// Generated by the protocol buffer compiler.  DO NOT EDIT!
// clang-format off
// source: keyapis/telemetry_control/v1/keyapis_telemetry_control_template_v1.proto

// This CPP symbol can be defined to use imports that match up to the framework
// imports needed when using CocoaPods.
#if !defined(GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS)
 #define GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS 0
#endif

#if GPB_USE_PROTOBUF_FRAMEWORK_IMPORTS
 #import <Protobuf/GPBProtocolBuffers_RuntimeSupport.h>
#else
 #import "GPBProtocolBuffers_RuntimeSupport.h"
#endif

#if GOOGLE_PROTOBUF_OBJC_VERSION < 30007
#error This file was generated by a newer version of protoc which is incompatible with your Protocol Buffer library sources.
#endif
#if 30007 < GOOGLE_PROTOBUF_OBJC_MIN_SUPPORTED_VERSION
#error This file was generated by an older version of protoc which is incompatible with your Protocol Buffer library sources.
#endif

#import <stdatomic.h>

#import "keyapis/telemetry_control/v1/KeyapisTelemetryControlTemplateV1.pbobjc.h"
#import "google/api/Annotations.pbobjc.h"
#import "google/api/FieldBehavior.pbobjc.h"
// @@protoc_insertion_point(imports)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#pragma clang diagnostic ignored "-Wdirect-ivar-access"
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"

#pragma mark - Objective-C Class declarations
// Forward declarations of Objective-C classes that we can use as
// static values in struct initializers.
// We don't use [Foo class] because it is not a static value.
GPBObjCClassDeclaration(GPBBoolValue);
GPBObjCClassDeclaration(GPBFloatValue);
GPBObjCClassDeclaration(GPBInt32Value);
GPBObjCClassDeclaration(GPBStringValue);
GPBObjCClassDeclaration(GPBTimestamp);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateDevice);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateIndicator);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid);
GPBObjCClassDeclaration(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError);

#pragma mark - KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root

@implementation KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root

+ (GPBExtensionRegistry*)extensionRegistry {
  // This is called by +initialize so there is no need to worry
  // about thread safety and initialization of registry.
  static GPBExtensionRegistry* registry = nil;
  if (!registry) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    registry = [[GPBExtensionRegistry alloc] init];
    // Merge in the imports (direct or indirect) that defined extensions.
    [registry addExtensions:[GAPIAnnotationsRoot extensionRegistry]];
    [registry addExtensions:[GAPIFieldBehaviorRoot extensionRegistry]];
  }
  return registry;
}

@end

static GPBFileDescription KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription = {
  .package = "keyapis.telemetry_control.v1",
  .prefix = "KEYAPISTELEMETRYCONTROLV1",
  .syntax = GPBFileSyntaxProto3
};

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "OrderByTypeUnknown\000Id\000MetricType\000Model\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_OrderByTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_Id,
        KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_MetricType,
        KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_Model,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_OrderByTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_Id:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_MetricType:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_Model:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "DirectionTypeUnknown\000Desc\000Asc\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_DirectionTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_Desc,
        KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_Asc,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_DirectionTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_Desc:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_Asc:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "MetricTypeUnknown\000HotWater\000ColdWater\000Hea"
        "t\000Gas\000Electricity\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_MetricTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_HotWater,
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_ColdWater,
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_Heat,
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_Gas,
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_Electricity,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_MetricTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_HotWater:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_ColdWater:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_Heat:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_Gas:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_Electricity:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "PlanTypeUnknown\000Single\000Double\000Triple\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_PlanTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_Single,
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_Double,
        KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_Triple,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_PlanTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_Single:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_Double:
    case KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_Triple:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "OrderByTypeUnknown\000Id\000SignType\000ArchiveTy"
        "pe\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_OrderByTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_Id,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_SignType,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_ArchiveType,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_OrderByTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_Id:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_SignType:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_ArchiveType:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "DirectionTypeUnknown\000Desc\000Asc\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_DirectionTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_Desc,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_Asc,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_DirectionTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_Desc:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_Asc:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "VendorTypeUnknown\000Enviro\000Lartech\000Rtk\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_VendorTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_Enviro,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_Lartech,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_Rtk,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_VendorTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_Enviro:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_Lartech:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_Rtk:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "UnitTypeUnknown\000Percent\000C\000Wt\000Gkal\000Value\000"
        "Kwh\000KgCm2\000KgfCm2\000M3\000M3H\000Mpa\000Ms\000Boolean\000T"
        "\000TH\000H\000NonMeasurable\000Imp\000J\000Kj\000Gj\000Wth\000Kwt\000"
        "Min\000S\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_UnitTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Percent,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_C,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Wt,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Gkal,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Value,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Kwh,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_KgCm2,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_KgfCm2,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_M3,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_M3H,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Mpa,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Ms,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Boolean,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_T,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_TH,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_H,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_NonMeasurable,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Imp,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_J,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Kj,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Gj,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Wth,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Kwt,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Min,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_S,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_UnitTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Percent:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_C:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Wt:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Gkal:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Value:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Kwh:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_KgCm2:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_KgfCm2:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_M3:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_M3H:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Mpa:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Ms:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Boolean:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_T:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_TH:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_H:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_NonMeasurable:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Imp:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_J:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Kj:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Gj:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Wth:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Kwt:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_Min:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_S:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "SignTypeUnknown\000AbsoluteDs\000AbsoluteRc\000In"
        "tervalDs\000IntervalRc\000CurrentDs\000CurrentRs\000"
        "Volume\000Parameter\000Flag\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_SignTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_AbsoluteDs,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_AbsoluteRc,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_IntervalDs,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_IntervalRc,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_CurrentDs,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_CurrentRs,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_Volume,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_Parameter,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_Flag,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_SignTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_AbsoluteDs:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_AbsoluteRc:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_IntervalDs:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_IntervalRc:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_CurrentDs:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_CurrentRs:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_Volume:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_Parameter:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_Flag:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - Enum KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType

GPBEnumDescriptor *KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_EnumDescriptor(void) {
  static _Atomic(GPBEnumDescriptor*) descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static const char *valueNames =
        "ArchiveTypeUnknown\000Current\000Halfhour\000Hour"
        "\000Day\000Month\000Year\000";
    static const int32_t values[] = {
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_ArchiveTypeUnknown,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Current,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Halfhour,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Hour,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Day,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Month,
        KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Year,
    };
    GPBEnumDescriptor *worker =
        [GPBEnumDescriptor allocDescriptorForName:GPBNSStringifySymbol(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType)
                                       valueNames:valueNames
                                           values:values
                                            count:(uint32_t)(sizeof(values) / sizeof(int32_t))
                                     enumVerifier:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_IsValidValue
                                            flags:GPBEnumDescriptorInitializationFlag_None];
    GPBEnumDescriptor *expected = nil;
    if (!atomic_compare_exchange_strong(&descriptor, &expected, worker)) {
      [worker release];
    }
  }
  return descriptor;
}

BOOL KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_IsValidValue(int32_t value__) {
  switch (value__) {
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_ArchiveTypeUnknown:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Current:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Halfhour:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Hour:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Day:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Month:
    case KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_Year:
      return YES;
    default:
      return NO;
  }
}

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest

@implementation KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest

@dynamic hasData_p, data_p;

typedef struct KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISTELEMETRYCONTROLV1TemplateDevice *data_p;
} KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevice),
        .number = KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest_FieldNumber_Data_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest)
                                   messageName:@"PostTemplateDeviceRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse

@implementation KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateDevice *data_p;
  KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error *error;
} KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevice),
        .number = KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error),
        .number = KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse)
                                   messageName:@"PostTemplateDeviceResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error

@implementation KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError *validation;
} KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError),
        .number = KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1PostTemplateDeviceResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest

@implementation KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest

@dynamic id_p;

typedef struct KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest__storage_ {
  uint32_t _has_storage_[1];
  int32_t id_p;
} KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest)
                                   messageName:@"DeleteTemplateDeviceRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceResponse

@implementation KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceResponse


typedef struct KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceResponse__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceResponse)
                                   messageName:@"DeleteTemplateDeviceResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1DeleteTemplateDeviceResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest

@dynamic id_p;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest__storage_ {
  uint32_t _has_storage_[1];
  int32_t id_p;
} KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest)
                                   messageName:@"GetTemplateDeviceRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse

@dynamic typeOneOfCase;
@dynamic data_p;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateDevice *data_p;
} KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevice),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse)
                                   messageName:@"GetTemplateDeviceResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest

@dynamic paginationOneOfCase;
@dynamic hasFilter, filter;
@dynamic paging;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter *filter;
  KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging *paging;
} KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "filter",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest_FieldNumber_Filter,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest__storage_, filter),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "paging",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest_FieldNumber_Paging,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest__storage_, paging),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest)
                                   messageName:@"GetTemplateDeviceListRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "pagination",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest_ClearPaginationOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListRequest descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging

@implementation KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging

@dynamic orderByType;
@dynamic directionType;
@dynamic limit;
@dynamic offset;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType orderByType;
  KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType directionType;
  int32_t limit;
  int32_t offset;
} KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "orderByType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_FieldNumber_OrderByType,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging__storage_, orderByType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "directionType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_FieldNumber_DirectionType,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging__storage_, directionType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "limit",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_FieldNumber_Limit,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging__storage_, limit),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "offset",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_FieldNumber_Offset,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging__storage_, offset),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging)
                                   messageName:@"TemplateDevicePaging"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_FieldNumber_OrderByType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_FieldNumber_OrderByType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_FieldNumber_DirectionType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_FieldNumber_DirectionType];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError

@implementation KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError

@dynamic reasonOneOfCase;
@dynamic limit;
@dynamic offset;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid *limit;
  KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid *offset;
} KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "limit",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_FieldNumber_Limit,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError__storage_, limit),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "offset",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_FieldNumber_Offset,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError__storage_, offset),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError)
                                   messageName:@"ValidationError"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid

@implementation KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid


typedef struct KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid)
                                   messageName:@"LimitInvalid"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_LimitInvalid__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid

@implementation KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid


typedef struct KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid)
                                   messageName:@"OffsetInvalid"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError_OffsetInvalid__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter

@implementation KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter

@dynamic metricTypesArray, metricTypesArray_Count;
@dynamic modelIdsArray, modelIdsArray_Count;
@dynamic planTypesArray, planTypesArray_Count;
@dynamic indicatorVendorTypesArray, indicatorVendorTypesArray_Count;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter__storage_ {
  uint32_t _has_storage_[1];
  GPBEnumArray *metricTypesArray;
  GPBInt32Array *modelIdsArray;
  GPBEnumArray *planTypesArray;
  GPBEnumArray *indicatorVendorTypesArray;
} KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "metricTypesArray",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_FieldNumber_MetricTypesArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter__storage_, metricTypesArray),
        .flags = (GPBFieldFlags)(GPBFieldRepeated | GPBFieldPacked | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "modelIdsArray",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_FieldNumber_ModelIdsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter__storage_, modelIdsArray),
        .flags = (GPBFieldFlags)(GPBFieldRepeated | GPBFieldPacked),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "planTypesArray",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_FieldNumber_PlanTypesArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter__storage_, planTypesArray),
        .flags = (GPBFieldFlags)(GPBFieldRepeated | GPBFieldPacked | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "indicatorVendorTypesArray",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_FieldNumber_IndicatorVendorTypesArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter__storage_, indicatorVendorTypesArray),
        .flags = (GPBFieldFlags)(GPBFieldRepeated | GPBFieldPacked | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter)
                                   messageName:@"TemplateDeviceFilter"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError

@implementation KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError

@dynamic path;
@dynamic message;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError__storage_ {
  uint32_t _has_storage_[1];
  NSString *path;
  NSString *message;
} KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "path",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError_FieldNumber_Path,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError__storage_, path),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "message",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError_FieldNumber_Message,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError__storage_, message),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError)
                                   messageName:@"ValidationError"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateDevice *data_p;
  KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error *error;
} KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevice),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse)
                                   messageName:@"GetTemplateDeviceListResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error

@dynamic reasonOneOfCase;
@dynamic templateDeviceFilterValidation;
@dynamic templateDevicePagingValidation;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError *templateDeviceFilterValidation;
  KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError *templateDevicePagingValidation;
} KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "templateDeviceFilterValidation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error_FieldNumber_TemplateDeviceFilterValidation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error__storage_, templateDeviceFilterValidation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "templateDevicePagingValidation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevicePaging_ValidationError),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error_FieldNumber_TemplateDevicePagingValidation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error__storage_, templateDevicePagingValidation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceListResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest

@dynamic hasFilter, filter;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter *filter;
} KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "filter",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest_FieldNumber_Filter,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest__storage_, filter),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest)
                                   messageName:@"GetTemplateDeviceCountRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse__storage_ {
  uint32_t _has_storage_[2];
  int32_t data_p;
  KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error *error;
} KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse)
                                   messageName:@"GetTemplateDeviceCountResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error

@dynamic reasonOneOfCase;
@dynamic templateDeviceFilterValidation;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError *templateDeviceFilterValidation;
} KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "templateDeviceFilterValidation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDeviceFilter_ValidationError),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error_FieldNumber_TemplateDeviceFilterValidation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error__storage_, templateDeviceFilterValidation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateDeviceCountResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateDevice

@implementation KEYAPISTELEMETRYCONTROLV1TemplateDevice

@dynamic id_p;
@dynamic hasCreatedAt, createdAt;
@dynamic hasChangedAt, changedAt;
@dynamic metricType;
@dynamic modelId;
@dynamic indicatorTemplateIdsArray, indicatorTemplateIdsArray_Count;
@dynamic planType;
@dynamic indicatorVendorType;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_ {
  uint32_t _has_storage_[1];
  int32_t id_p;
  KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType metricType;
  int32_t modelId;
  KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType planType;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType indicatorVendorType;
  GPBTimestamp *createdAt;
  GPBTimestamp *changedAt;
  GPBInt32Array *indicatorTemplateIdsArray;
} KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "createdAt",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBTimestamp),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_CreatedAt,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_, createdAt),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "changedAt",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBTimestamp),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_ChangedAt,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_, changedAt),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "metricType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_MetricType,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_, metricType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "modelId",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_ModelId,
        .hasIndex = 4,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_, modelId),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "indicatorTemplateIdsArray",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_IndicatorTemplateIdsArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_, indicatorTemplateIdsArray),
        .flags = (GPBFieldFlags)(GPBFieldRepeated | GPBFieldPacked),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "planType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_PlanType,
        .hasIndex = 5,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_, planType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "indicatorVendorType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_IndicatorVendorType,
        .hasIndex = 6,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_, indicatorVendorType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevice)
                                   messageName:@"TemplateDevice"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateDevice__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t KEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevice *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevice descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_MetricType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateDevice_MetricType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevice *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevice descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_MetricType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevice *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevice descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_PlanType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateDevice_PlanType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevice *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevice descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_PlanType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISTELEMETRYCONTROLV1TemplateDevice_IndicatorVendorType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevice *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevice descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_IndicatorVendorType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateDevice_IndicatorVendorType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateDevice *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateDevice descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateDevice_FieldNumber_IndicatorVendorType];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError

@implementation KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError

@dynamic path;
@dynamic message;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError__storage_ {
  uint32_t _has_storage_[1];
  NSString *path;
  NSString *message;
} KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "path",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError_FieldNumber_Path,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError__storage_, path),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "message",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError_FieldNumber_Message,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError__storage_, message),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError)
                                   messageName:@"ValidationError"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateDevice_ValidationError__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateDevice)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest

@dynamic id_p;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest__storage_ {
  uint32_t _has_storage_[1];
  int32_t id_p;
} KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest)
                                   messageName:@"GetTemplateIndicatorRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse

@dynamic typeOneOfCase;
@dynamic data_p;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator *data_p;
} KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicator),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse)
                                   messageName:@"GetTemplateIndicatorResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest

@dynamic paginationOneOfCase;
@dynamic hasFilter, filter;
@dynamic paging;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter *filter;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging *paging;
} KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "filter",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest_FieldNumber_Filter,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest__storage_, filter),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "paging",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest_FieldNumber_Paging,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest__storage_, paging),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest)
                                   messageName:@"GetTemplateIndicatorListRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "pagination",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest_ClearPaginationOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListRequest descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging

@implementation KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging

@dynamic orderByType;
@dynamic directionType;
@dynamic limit;
@dynamic offset;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType orderByType;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType directionType;
  int32_t limit;
  int32_t offset;
} KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "orderByType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_FieldNumber_OrderByType,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging__storage_, orderByType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "directionType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_FieldNumber_DirectionType,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging__storage_, directionType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "limit",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_FieldNumber_Limit,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging__storage_, limit),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "offset",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_FieldNumber_Offset,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging__storage_, offset),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging)
                                   messageName:@"TemplateIndicatorPaging"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_FieldNumber_OrderByType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_OrderByType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_FieldNumber_OrderByType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_FieldNumber_DirectionType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_DirectionType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_FieldNumber_DirectionType];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError

@implementation KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError

@dynamic reasonOneOfCase;
@dynamic limit;
@dynamic offset;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid *limit;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid *offset;
} KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "limit",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_FieldNumber_Limit,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError__storage_, limit),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "offset",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_FieldNumber_Offset,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError__storage_, offset),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError)
                                   messageName:@"ValidationError"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid

@implementation KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid


typedef struct KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid)
                                   messageName:@"LimitInvalid"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_LimitInvalid__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid

@implementation KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid


typedef struct KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid)
                                   messageName:@"OffsetInvalid"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError_OffsetInvalid__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter

@implementation KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter

@dynamic signTypesArray, signTypesArray_Count;
@dynamic archiveTypesArray, archiveTypesArray_Count;
@dynamic hasIsIndividual, isIndividual;
@dynamic hasTitle, title;
@dynamic indicatorVendorTypesArray, indicatorVendorTypesArray_Count;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter__storage_ {
  uint32_t _has_storage_[1];
  GPBEnumArray *signTypesArray;
  GPBEnumArray *archiveTypesArray;
  GPBBoolValue *isIndividual;
  GPBStringValue *title;
  GPBEnumArray *indicatorVendorTypesArray;
} KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "signTypesArray",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_FieldNumber_SignTypesArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter__storage_, signTypesArray),
        .flags = (GPBFieldFlags)(GPBFieldRepeated | GPBFieldPacked | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "archiveTypesArray",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_FieldNumber_ArchiveTypesArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter__storage_, archiveTypesArray),
        .flags = (GPBFieldFlags)(GPBFieldRepeated | GPBFieldPacked | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "isIndividual",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBBoolValue),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_FieldNumber_IsIndividual,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter__storage_, isIndividual),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "title",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_FieldNumber_Title,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter__storage_, title),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "indicatorVendorTypesArray",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_FieldNumber_IndicatorVendorTypesArray,
        .hasIndex = GPBNoHasBit,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter__storage_, indicatorVendorTypesArray),
        .flags = (GPBFieldFlags)(GPBFieldRepeated | GPBFieldPacked | GPBFieldHasEnumDescriptor),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter)
                                   messageName:@"TemplateIndicatorFilter"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError

@implementation KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError

@dynamic path;
@dynamic message;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError__storage_ {
  uint32_t _has_storage_[1];
  NSString *path;
  NSString *message;
} KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "path",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError_FieldNumber_Path,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError__storage_, path),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "message",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError_FieldNumber_Message,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError__storage_, message),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError)
                                   messageName:@"ValidationError"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator *data_p;
  KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error *error;
} KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicator),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse)
                                   messageName:@"GetTemplateIndicatorListResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error

@dynamic reasonOneOfCase;
@dynamic templateIndicatorFilterValidation;
@dynamic templateIndicatorPagingValidation;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError *templateIndicatorFilterValidation;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError *templateIndicatorPagingValidation;
} KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "templateIndicatorFilterValidation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error_FieldNumber_TemplateIndicatorFilterValidation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error__storage_, templateIndicatorFilterValidation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "templateIndicatorPagingValidation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorPaging_ValidationError),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error_FieldNumber_TemplateIndicatorPagingValidation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error__storage_, templateIndicatorPagingValidation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorListResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest

@dynamic hasFilter, filter;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter *filter;
} KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "filter",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest_FieldNumber_Filter,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest__storage_, filter),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest)
                                   messageName:@"GetTemplateIndicatorCountRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse__storage_ {
  uint32_t _has_storage_[2];
  int32_t data_p;
  KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error *error;
} KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse)
                                   messageName:@"GetTemplateIndicatorCountResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error

@implementation KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error

@dynamic reasonOneOfCase;
@dynamic templateIndicatorFilterValidation;

typedef struct KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError *templateIndicatorFilterValidation;
} KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "templateIndicatorFilterValidation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicatorFilter_ValidationError),
        .number = KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error_FieldNumber_TemplateIndicatorFilterValidation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error__storage_, templateIndicatorFilterValidation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1GetTemplateIndicatorCountResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest

@implementation KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest

@dynamic hasData_p, data_p;

typedef struct KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest__storage_ {
  uint32_t _has_storage_[1];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator *data_p;
} KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicator),
        .number = KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest_FieldNumber_Data_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest)
                                   messageName:@"PostTemplateIndicatorRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse

@implementation KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse

@dynamic typeOneOfCase;
@dynamic data_p;
@dynamic error;

typedef struct KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator *data_p;
  KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error *error;
} KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "data_p",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicator),
        .number = KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_FieldNumber_Data_p,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse__storage_, data_p),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "error",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error),
        .number = KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_FieldNumber_Error,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse__storage_, error),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse)
                                   messageName:@"PostTemplateIndicatorResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "type",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_ClearTypeOneOfCase(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error

@implementation KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error

@dynamic reasonOneOfCase;
@dynamic validation;

typedef struct KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error__storage_ {
  uint32_t _has_storage_[2];
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError *validation;
} KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "validation",
        .dataTypeSpecific.clazz = GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError),
        .number = KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error_FieldNumber_Validation,
        .hasIndex = -1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error__storage_, validation),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error)
                                   messageName:@"Error"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    static const char *oneofs[] = {
      "reason",
    };
    [localDescriptor setupOneofs:oneofs
                           count:(uint32_t)(sizeof(oneofs) / sizeof(char*))
                   firstHasIndex:-1];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

void KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error_ClearReasonOneOfCase(KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1PostTemplateIndicatorResponse_Error descriptor];
  GPBOneofDescriptor *oneof = [descriptor.oneofs objectAtIndex:0];
  GPBClearOneof(message, oneof);
}
#pragma mark - KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest

@implementation KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest

@dynamic id_p;

typedef struct KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest__storage_ {
  uint32_t _has_storage_[1];
  int32_t id_p;
} KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest)
                                   messageName:@"DeleteTemplateIndicatorRequest"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorRequest__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorResponse

@implementation KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorResponse


typedef struct KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorResponse__storage_ {
  uint32_t _has_storage_[1];
} KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorResponse__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorResponse)
                                   messageName:@"DeleteTemplateIndicatorResponse"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:NULL
                                    fieldCount:0
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1DeleteTemplateIndicatorResponse__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateIndicator

@implementation KEYAPISTELEMETRYCONTROLV1TemplateIndicator

@dynamic id_p;
@dynamic hasCreatedAt, createdAt;
@dynamic hasChangedAt, changedAt;
@dynamic title;
@dynamic unitType;
@dynamic signType;
@dynamic archiveType;
@dynamic presentationUnitType;
@dynamic hasCompatibilityCode, compatibilityCode;
@dynamic isIndividual;
@dynamic hasCoefficient, coefficient;
@dynamic hasShift, shift;
@dynamic hasRoundDecimalDigits, roundDecimalDigits;
@dynamic metricExpectedFreq;
@dynamic indicatorVendorType;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_ {
  uint32_t _has_storage_[1];
  int32_t id_p;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType unitType;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType signType;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType archiveType;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType presentationUnitType;
  int32_t metricExpectedFreq;
  KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType indicatorVendorType;
  GPBTimestamp *createdAt;
  GPBTimestamp *changedAt;
  NSString *title;
  GPBStringValue *compatibilityCode;
  GPBFloatValue *coefficient;
  GPBFloatValue *shift;
  GPBInt32Value *roundDecimalDigits;
} KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "id_p",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_Id_p,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, id_p),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "createdAt",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBTimestamp),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_CreatedAt,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, createdAt),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "changedAt",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBTimestamp),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_ChangedAt,
        .hasIndex = 2,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, changedAt),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "title",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_Title,
        .hasIndex = 3,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, title),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "unitType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_UnitType,
        .hasIndex = 4,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, unitType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "signType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_SignType,
        .hasIndex = 5,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, signType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "archiveType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_ArchiveType,
        .hasIndex = 6,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, archiveType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "presentationUnitType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_PresentationUnitType,
        .hasIndex = 7,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, presentationUnitType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
      {
        .name = "compatibilityCode",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBStringValue),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_CompatibilityCode,
        .hasIndex = 8,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, compatibilityCode),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "isIndividual",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_IsIndividual,
        .hasIndex = 9,
        .offset = 10,  // Stored in _has_storage_ to save space.
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeBool,
      },
      {
        .name = "coefficient",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBFloatValue),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_Coefficient,
        .hasIndex = 11,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, coefficient),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "shift",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBFloatValue),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_Shift,
        .hasIndex = 12,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, shift),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "roundDecimalDigits",
        .dataTypeSpecific.clazz = GPBObjCClass(GPBInt32Value),
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_RoundDecimalDigits,
        .hasIndex = 13,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, roundDecimalDigits),
        .flags = GPBFieldOptional,
        .dataType = GPBDataTypeMessage,
      },
      {
        .name = "metricExpectedFreq",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_MetricExpectedFreq,
        .hasIndex = 14,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, metricExpectedFreq),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeInt32,
      },
      {
        .name = "indicatorVendorType",
        .dataTypeSpecific.enumDescFunc = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_VendorType_EnumDescriptor,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_IndicatorVendorType,
        .hasIndex = 15,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_, indicatorVendorType),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldHasEnumDescriptor | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeEnum,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicator)
                                   messageName:@"TemplateIndicator"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end

int32_t KEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_UnitType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateIndicator_UnitType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_UnitType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_SignType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateIndicator_SignType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_SignType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_ArchiveType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateIndicator_ArchiveType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_ArchiveType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISTELEMETRYCONTROLV1TemplateIndicator_PresentationUnitType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_PresentationUnitType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateIndicator_PresentationUnitType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_PresentationUnitType];
  GPBSetMessageRawEnumField(message, field, value);
}

int32_t KEYAPISTELEMETRYCONTROLV1TemplateIndicator_IndicatorVendorType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_IndicatorVendorType];
  return GPBGetMessageRawEnumField(message, field);
}

void SetKEYAPISTELEMETRYCONTROLV1TemplateIndicator_IndicatorVendorType_RawValue(KEYAPISTELEMETRYCONTROLV1TemplateIndicator *message, int32_t value) {
  GPBDescriptor *descriptor = [KEYAPISTELEMETRYCONTROLV1TemplateIndicator descriptor];
  GPBFieldDescriptor *field = [descriptor fieldWithNumber:KEYAPISTELEMETRYCONTROLV1TemplateIndicator_FieldNumber_IndicatorVendorType];
  GPBSetMessageRawEnumField(message, field, value);
}

#pragma mark - KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError

@implementation KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError

@dynamic path;
@dynamic message;

typedef struct KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError__storage_ {
  uint32_t _has_storage_[1];
  NSString *path;
  NSString *message;
} KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError__storage_;

// This method is threadsafe because it is initially called
// in +initialize for each subclass.
+ (GPBDescriptor *)descriptor {
  static GPBDescriptor *descriptor = nil;
  if (!descriptor) {
    GPB_DEBUG_CHECK_RUNTIME_VERSIONS();
    static GPBMessageFieldDescription fields[] = {
      {
        .name = "path",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError_FieldNumber_Path,
        .hasIndex = 0,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError__storage_, path),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
      {
        .name = "message",
        .dataTypeSpecific.clazz = Nil,
        .number = KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError_FieldNumber_Message,
        .hasIndex = 1,
        .offset = (uint32_t)offsetof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError__storage_, message),
        .flags = (GPBFieldFlags)(GPBFieldOptional | GPBFieldClearHasIvarOnZero),
        .dataType = GPBDataTypeString,
      },
    };
    GPBDescriptor *localDescriptor =
        [GPBDescriptor allocDescriptorForClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError)
                                   messageName:@"ValidationError"
                               fileDescription:&KEYAPISTELEMETRYCONTROLV1KeyapisTelemetryControlTemplateV1Root_FileDescription
                                        fields:fields
                                    fieldCount:(uint32_t)(sizeof(fields) / sizeof(GPBMessageFieldDescription))
                                   storageSize:sizeof(KEYAPISTELEMETRYCONTROLV1TemplateIndicator_ValidationError__storage_)
                                         flags:(GPBDescriptorInitializationFlags)(GPBDescriptorInitializationFlag_UsesClassRefs | GPBDescriptorInitializationFlag_Proto3OptionalKnown | GPBDescriptorInitializationFlag_ClosedEnumSupportKnown)];
    [localDescriptor setupContainingMessageClass:GPBObjCClass(KEYAPISTELEMETRYCONTROLV1TemplateIndicator)];
    #if defined(DEBUG) && DEBUG
      NSAssert(descriptor == nil, @"Startup recursed!");
    #endif  // DEBUG
    descriptor = localDescriptor;
  }
  return descriptor;
}

@end


#pragma clang diagnostic pop

// @@protoc_insertion_point(global_scope)

// clang-format on
