// Generated by the protocol buffer compiler.  DO NOT EDIT!

// @@protoc_insertion_point(imports)
#import "ProtocolBuffers.h"

@class PBDescriptorProto;
@class PBDescriptorProtoBuilder;
@class PBDescriptorProtoExtensionRange;
@class PBDescriptorProtoExtensionRangeBuilder;
@class PBEnumDescriptorProto;
@class PBEnumDescriptorProtoBuilder;
@class PBEnumOptions;
@class PBEnumOptionsBuilder;
@class PBEnumValueDescriptorProto;
@class PBEnumValueDescriptorProtoBuilder;
@class PBEnumValueOptions;
@class PBEnumValueOptionsBuilder;
@class PBFieldDescriptorProto;
@class PBFieldDescriptorProtoBuilder;
@class PBFieldOptions;
@class PBFieldOptionsBuilder;
@class PBFileDescriptorProto;
@class PBFileDescriptorProtoBuilder;
@class PBFileDescriptorSet;
@class PBFileDescriptorSetBuilder;
@class PBFileOptions;
@class PBFileOptionsBuilder;
@class PBMessageOptions;
@class PBMessageOptionsBuilder;
@class PBMethodDescriptorProto;
@class PBMethodDescriptorProtoBuilder;
@class PBMethodOptions;
@class PBMethodOptionsBuilder;
@class PBOneofDescriptorProto;
@class PBOneofDescriptorProtoBuilder;
@class PBServiceDescriptorProto;
@class PBServiceDescriptorProtoBuilder;
@class PBServiceOptions;
@class PBServiceOptionsBuilder;
@class PBSourceCodeInfo;
@class PBSourceCodeInfoBuilder;
@class PBSourceCodeInfoLocation;
@class PBSourceCodeInfoLocationBuilder;
@class PBUninterpretedOption;
@class PBUninterpretedOptionBuilder;
@class PBUninterpretedOptionNamePart;
@class PBUninterpretedOptionNamePartBuilder;
#ifndef __has_feature
  #define __has_feature(x) 0 // Compatibility with non-clang compilers.
#endif // __has_feature

#ifndef NS_RETURNS_NOT_RETAINED
  #if __has_feature(attribute_ns_returns_not_retained)
    #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained))
  #else
    #define NS_RETURNS_NOT_RETAINED
  #endif
#endif

typedef enum {
  PBFieldDescriptorProtoTypeTypeDouble = 1,
  PBFieldDescriptorProtoTypeTypeFloat = 2,
  PBFieldDescriptorProtoTypeTypeInt64 = 3,
  PBFieldDescriptorProtoTypeTypeUint64 = 4,
  PBFieldDescriptorProtoTypeTypeInt32 = 5,
  PBFieldDescriptorProtoTypeTypeFixed64 = 6,
  PBFieldDescriptorProtoTypeTypeFixed32 = 7,
  PBFieldDescriptorProtoTypeTypeBool = 8,
  PBFieldDescriptorProtoTypeTypeString = 9,
  PBFieldDescriptorProtoTypeTypeGroup = 10,
  PBFieldDescriptorProtoTypeTypeMessage = 11,
  PBFieldDescriptorProtoTypeTypeBytes = 12,
  PBFieldDescriptorProtoTypeTypeUint32 = 13,
  PBFieldDescriptorProtoTypeTypeEnum = 14,
  PBFieldDescriptorProtoTypeTypeSfixed32 = 15,
  PBFieldDescriptorProtoTypeTypeSfixed64 = 16,
  PBFieldDescriptorProtoTypeTypeSint32 = 17,
  PBFieldDescriptorProtoTypeTypeSint64 = 18,
} PBFieldDescriptorProtoType;

BOOL PBFieldDescriptorProtoTypeIsValidValue(PBFieldDescriptorProtoType value);

typedef enum {
  PBFieldDescriptorProtoLabelLabelOptional = 1,
  PBFieldDescriptorProtoLabelLabelRequired = 2,
  PBFieldDescriptorProtoLabelLabelRepeated = 3,
} PBFieldDescriptorProtoLabel;

BOOL PBFieldDescriptorProtoLabelIsValidValue(PBFieldDescriptorProtoLabel value);

typedef enum {
  PBFileOptionsOptimizeModeSpeed = 1,
  PBFileOptionsOptimizeModeCodeSize = 2,
  PBFileOptionsOptimizeModeLiteRuntime = 3,
} PBFileOptionsOptimizeMode;

BOOL PBFileOptionsOptimizeModeIsValidValue(PBFileOptionsOptimizeMode value);

typedef enum {
  PBFieldOptionsCTypeString = 0,
  PBFieldOptionsCTypeCord = 1,
  PBFieldOptionsCTypeStringPiece = 2,
} PBFieldOptionsCType;

BOOL PBFieldOptionsCTypeIsValidValue(PBFieldOptionsCType value);


@interface PBDescriptorRoot : NSObject {
}
+ (PBExtensionRegistry*) extensionRegistry;
+ (void) registerAllExtensions:(PBMutableExtensionRegistry*) registry;
@end

@interface PBFileDescriptorSet : PBGeneratedMessage {
@private
  NSMutableArray * fileArray;
}
@property (readonly, strong) NSArray * file;
- (PBFileDescriptorProto*)fileAtIndex:(NSUInteger)index;

+ (PBFileDescriptorSet*) defaultInstance;
- (PBFileDescriptorSet*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBFileDescriptorSetBuilder*) builder;
+ (PBFileDescriptorSetBuilder*) builder;
+ (PBFileDescriptorSetBuilder*) builderWithPrototype:(PBFileDescriptorSet*) prototype;
- (PBFileDescriptorSetBuilder*) toBuilder;

+ (PBFileDescriptorSet*) parseFromData:(NSData*) data;
+ (PBFileDescriptorSet*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFileDescriptorSet*) parseFromInputStream:(NSInputStream*) input;
+ (PBFileDescriptorSet*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFileDescriptorSet*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBFileDescriptorSet*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBFileDescriptorSetBuilder : PBGeneratedMessageBuilder {
@private
  PBFileDescriptorSet* result;
}

- (PBFileDescriptorSet*) defaultInstance;

- (PBFileDescriptorSetBuilder*) clear;
- (PBFileDescriptorSetBuilder*) clone;

- (PBFileDescriptorSet*) build;
- (PBFileDescriptorSet*) buildPartial;

- (PBFileDescriptorSetBuilder*) mergeFrom:(PBFileDescriptorSet*) other;
- (PBFileDescriptorSetBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBFileDescriptorSetBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (NSMutableArray *)file;
- (PBFileDescriptorProto*)fileAtIndex:(NSUInteger)index;
- (PBFileDescriptorSetBuilder *)addFile:(PBFileDescriptorProto*)value;
- (PBFileDescriptorSetBuilder *)setFileArray:(NSArray *)array;
- (PBFileDescriptorSetBuilder *)clearFile;
@end

@interface PBFileDescriptorProto : PBGeneratedMessage {
@private
  BOOL hasName_:1;
  BOOL hasPackage_:1;
  BOOL hasOptions_:1;
  BOOL hasSourceCodeInfo_:1;
  NSString* name;
  NSString* package;
  PBFileOptions* options;
  PBSourceCodeInfo* sourceCodeInfo;
  PBAppendableArray * publicDependencyArray;
  PBAppendableArray * weakDependencyArray;
  NSMutableArray * dependencyArray;
  NSMutableArray * messageTypeArray;
  NSMutableArray * enumTypeArray;
  NSMutableArray * serviceArray;
  NSMutableArray * extensionArray;
}
- (BOOL) hasName;
- (BOOL) hasPackage;
- (BOOL) hasOptions;
- (BOOL) hasSourceCodeInfo;
@property (readonly, strong) NSString* name;
@property (readonly, strong) NSString* package;
@property (readonly, strong) PBArray * dependency;
@property (readonly, strong) PBArray * publicDependency;
@property (readonly, strong) PBArray * weakDependency;
@property (readonly, strong) NSArray * messageType;
@property (readonly, strong) NSArray * enumType;
@property (readonly, strong) NSArray * service;
@property (readonly, strong) NSArray * extension;
@property (readonly, strong) PBFileOptions* options;
@property (readonly, strong) PBSourceCodeInfo* sourceCodeInfo;
- (NSString*)dependencyAtIndex:(NSUInteger)index;
- (SInt32)publicDependencyAtIndex:(NSUInteger)index;
- (SInt32)weakDependencyAtIndex:(NSUInteger)index;
- (PBDescriptorProto*)messageTypeAtIndex:(NSUInteger)index;
- (PBEnumDescriptorProto*)enumTypeAtIndex:(NSUInteger)index;
- (PBServiceDescriptorProto*)serviceAtIndex:(NSUInteger)index;
- (PBFieldDescriptorProto*)extensionAtIndex:(NSUInteger)index;

+ (PBFileDescriptorProto*) defaultInstance;
- (PBFileDescriptorProto*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBFileDescriptorProtoBuilder*) builder;
+ (PBFileDescriptorProtoBuilder*) builder;
+ (PBFileDescriptorProtoBuilder*) builderWithPrototype:(PBFileDescriptorProto*) prototype;
- (PBFileDescriptorProtoBuilder*) toBuilder;

+ (PBFileDescriptorProto*) parseFromData:(NSData*) data;
+ (PBFileDescriptorProto*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFileDescriptorProto*) parseFromInputStream:(NSInputStream*) input;
+ (PBFileDescriptorProto*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFileDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBFileDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBFileDescriptorProtoBuilder : PBGeneratedMessageBuilder {
@private
  PBFileDescriptorProto* result;
}

- (PBFileDescriptorProto*) defaultInstance;

- (PBFileDescriptorProtoBuilder*) clear;
- (PBFileDescriptorProtoBuilder*) clone;

- (PBFileDescriptorProto*) build;
- (PBFileDescriptorProto*) buildPartial;

- (PBFileDescriptorProtoBuilder*) mergeFrom:(PBFileDescriptorProto*) other;
- (PBFileDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBFileDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasName;
- (NSString*) name;
- (PBFileDescriptorProtoBuilder*) setName:(NSString*) value;
- (PBFileDescriptorProtoBuilder*) clearName;

- (BOOL) hasPackage;
- (NSString*) package;
- (PBFileDescriptorProtoBuilder*) setPackage:(NSString*) value;
- (PBFileDescriptorProtoBuilder*) clearPackage;

- (NSMutableArray *)dependency;
- (NSString*)dependencyAtIndex:(NSUInteger)index;
- (PBFileDescriptorProtoBuilder *)addDependency:(NSString*)value;
- (PBFileDescriptorProtoBuilder *)setDependencyArray:(NSArray *)array;
- (PBFileDescriptorProtoBuilder *)clearDependency;

- (PBAppendableArray *)publicDependency;
- (SInt32)publicDependencyAtIndex:(NSUInteger)index;
- (PBFileDescriptorProtoBuilder *)addPublicDependency:(SInt32)value;
- (PBFileDescriptorProtoBuilder *)setPublicDependencyArray:(NSArray *)array;
- (PBFileDescriptorProtoBuilder *)setPublicDependencyValues:(const SInt32 *)values count:(NSUInteger)count;
- (PBFileDescriptorProtoBuilder *)clearPublicDependency;

- (PBAppendableArray *)weakDependency;
- (SInt32)weakDependencyAtIndex:(NSUInteger)index;
- (PBFileDescriptorProtoBuilder *)addWeakDependency:(SInt32)value;
- (PBFileDescriptorProtoBuilder *)setWeakDependencyArray:(NSArray *)array;
- (PBFileDescriptorProtoBuilder *)setWeakDependencyValues:(const SInt32 *)values count:(NSUInteger)count;
- (PBFileDescriptorProtoBuilder *)clearWeakDependency;

- (NSMutableArray *)messageType;
- (PBDescriptorProto*)messageTypeAtIndex:(NSUInteger)index;
- (PBFileDescriptorProtoBuilder *)addMessageType:(PBDescriptorProto*)value;
- (PBFileDescriptorProtoBuilder *)setMessageTypeArray:(NSArray *)array;
- (PBFileDescriptorProtoBuilder *)clearMessageType;

- (NSMutableArray *)enumType;
- (PBEnumDescriptorProto*)enumTypeAtIndex:(NSUInteger)index;
- (PBFileDescriptorProtoBuilder *)addEnumType:(PBEnumDescriptorProto*)value;
- (PBFileDescriptorProtoBuilder *)setEnumTypeArray:(NSArray *)array;
- (PBFileDescriptorProtoBuilder *)clearEnumType;

- (NSMutableArray *)service;
- (PBServiceDescriptorProto*)serviceAtIndex:(NSUInteger)index;
- (PBFileDescriptorProtoBuilder *)addService:(PBServiceDescriptorProto*)value;
- (PBFileDescriptorProtoBuilder *)setServiceArray:(NSArray *)array;
- (PBFileDescriptorProtoBuilder *)clearService;

- (NSMutableArray *)extension;
- (PBFieldDescriptorProto*)extensionAtIndex:(NSUInteger)index;
- (PBFileDescriptorProtoBuilder *)addExtension:(PBFieldDescriptorProto*)value;
- (PBFileDescriptorProtoBuilder *)setExtensionArray:(NSArray *)array;
- (PBFileDescriptorProtoBuilder *)clearExtension;

- (BOOL) hasOptions;
- (PBFileOptions*) options;
- (PBFileDescriptorProtoBuilder*) setOptions:(PBFileOptions*) value;
- (PBFileDescriptorProtoBuilder*) setOptionsBuilder:(PBFileOptionsBuilder*) builderForValue;
- (PBFileDescriptorProtoBuilder*) mergeOptions:(PBFileOptions*) value;
- (PBFileDescriptorProtoBuilder*) clearOptions;

- (BOOL) hasSourceCodeInfo;
- (PBSourceCodeInfo*) sourceCodeInfo;
- (PBFileDescriptorProtoBuilder*) setSourceCodeInfo:(PBSourceCodeInfo*) value;
- (PBFileDescriptorProtoBuilder*) setSourceCodeInfoBuilder:(PBSourceCodeInfoBuilder*) builderForValue;
- (PBFileDescriptorProtoBuilder*) mergeSourceCodeInfo:(PBSourceCodeInfo*) value;
- (PBFileDescriptorProtoBuilder*) clearSourceCodeInfo;
@end

@interface PBDescriptorProto : PBGeneratedMessage {
@private
  BOOL hasName_:1;
  BOOL hasOptions_:1;
  NSString* name;
  PBMessageOptions* options;
  NSMutableArray * fieldArray;
  NSMutableArray * extensionArray;
  NSMutableArray * nestedTypeArray;
  NSMutableArray * enumTypeArray;
  NSMutableArray * extensionRangeArray;
  NSMutableArray * oneofDeclArray;
}
- (BOOL) hasName;
- (BOOL) hasOptions;
@property (readonly, strong) NSString* name;
@property (readonly, strong) NSArray * field;
@property (readonly, strong) NSArray * extension;
@property (readonly, strong) NSArray * nestedType;
@property (readonly, strong) NSArray * enumType;
@property (readonly, strong) NSArray * extensionRange;
@property (readonly, strong) NSArray * oneofDecl;
@property (readonly, strong) PBMessageOptions* options;
- (PBFieldDescriptorProto*)fieldAtIndex:(NSUInteger)index;
- (PBFieldDescriptorProto*)extensionAtIndex:(NSUInteger)index;
- (PBDescriptorProto*)nestedTypeAtIndex:(NSUInteger)index;
- (PBEnumDescriptorProto*)enumTypeAtIndex:(NSUInteger)index;
- (PBDescriptorProtoExtensionRange*)extensionRangeAtIndex:(NSUInteger)index;
- (PBOneofDescriptorProto*)oneofDeclAtIndex:(NSUInteger)index;

+ (PBDescriptorProto*) defaultInstance;
- (PBDescriptorProto*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBDescriptorProtoBuilder*) builder;
+ (PBDescriptorProtoBuilder*) builder;
+ (PBDescriptorProtoBuilder*) builderWithPrototype:(PBDescriptorProto*) prototype;
- (PBDescriptorProtoBuilder*) toBuilder;

+ (PBDescriptorProto*) parseFromData:(NSData*) data;
+ (PBDescriptorProto*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBDescriptorProto*) parseFromInputStream:(NSInputStream*) input;
+ (PBDescriptorProto*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBDescriptorProtoExtensionRange : PBGeneratedMessage {
@private
  BOOL hasStart_:1;
  BOOL hasEnd_:1;
  SInt32 start;
  SInt32 end;
}
- (BOOL) hasStart;
- (BOOL) hasEnd;
@property (readonly) SInt32 start;
@property (readonly) SInt32 end;

+ (PBDescriptorProtoExtensionRange*) defaultInstance;
- (PBDescriptorProtoExtensionRange*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBDescriptorProtoExtensionRangeBuilder*) builder;
+ (PBDescriptorProtoExtensionRangeBuilder*) builder;
+ (PBDescriptorProtoExtensionRangeBuilder*) builderWithPrototype:(PBDescriptorProtoExtensionRange*) prototype;
- (PBDescriptorProtoExtensionRangeBuilder*) toBuilder;

+ (PBDescriptorProtoExtensionRange*) parseFromData:(NSData*) data;
+ (PBDescriptorProtoExtensionRange*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBDescriptorProtoExtensionRange*) parseFromInputStream:(NSInputStream*) input;
+ (PBDescriptorProtoExtensionRange*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBDescriptorProtoExtensionRange*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBDescriptorProtoExtensionRange*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBDescriptorProtoExtensionRangeBuilder : PBGeneratedMessageBuilder {
@private
  PBDescriptorProtoExtensionRange* result;
}

- (PBDescriptorProtoExtensionRange*) defaultInstance;

- (PBDescriptorProtoExtensionRangeBuilder*) clear;
- (PBDescriptorProtoExtensionRangeBuilder*) clone;

- (PBDescriptorProtoExtensionRange*) build;
- (PBDescriptorProtoExtensionRange*) buildPartial;

- (PBDescriptorProtoExtensionRangeBuilder*) mergeFrom:(PBDescriptorProtoExtensionRange*) other;
- (PBDescriptorProtoExtensionRangeBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBDescriptorProtoExtensionRangeBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasStart;
- (SInt32) start;
- (PBDescriptorProtoExtensionRangeBuilder*) setStart:(SInt32) value;
- (PBDescriptorProtoExtensionRangeBuilder*) clearStart;

- (BOOL) hasEnd;
- (SInt32) end;
- (PBDescriptorProtoExtensionRangeBuilder*) setEnd:(SInt32) value;
- (PBDescriptorProtoExtensionRangeBuilder*) clearEnd;
@end

@interface PBDescriptorProtoBuilder : PBGeneratedMessageBuilder {
@private
  PBDescriptorProto* result;
}

- (PBDescriptorProto*) defaultInstance;

- (PBDescriptorProtoBuilder*) clear;
- (PBDescriptorProtoBuilder*) clone;

- (PBDescriptorProto*) build;
- (PBDescriptorProto*) buildPartial;

- (PBDescriptorProtoBuilder*) mergeFrom:(PBDescriptorProto*) other;
- (PBDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasName;
- (NSString*) name;
- (PBDescriptorProtoBuilder*) setName:(NSString*) value;
- (PBDescriptorProtoBuilder*) clearName;

- (NSMutableArray *)field;
- (PBFieldDescriptorProto*)fieldAtIndex:(NSUInteger)index;
- (PBDescriptorProtoBuilder *)addField:(PBFieldDescriptorProto*)value;
- (PBDescriptorProtoBuilder *)setFieldArray:(NSArray *)array;
- (PBDescriptorProtoBuilder *)clearField;

- (NSMutableArray *)extension;
- (PBFieldDescriptorProto*)extensionAtIndex:(NSUInteger)index;
- (PBDescriptorProtoBuilder *)addExtension:(PBFieldDescriptorProto*)value;
- (PBDescriptorProtoBuilder *)setExtensionArray:(NSArray *)array;
- (PBDescriptorProtoBuilder *)clearExtension;

- (NSMutableArray *)nestedType;
- (PBDescriptorProto*)nestedTypeAtIndex:(NSUInteger)index;
- (PBDescriptorProtoBuilder *)addNestedType:(PBDescriptorProto*)value;
- (PBDescriptorProtoBuilder *)setNestedTypeArray:(NSArray *)array;
- (PBDescriptorProtoBuilder *)clearNestedType;

- (NSMutableArray *)enumType;
- (PBEnumDescriptorProto*)enumTypeAtIndex:(NSUInteger)index;
- (PBDescriptorProtoBuilder *)addEnumType:(PBEnumDescriptorProto*)value;
- (PBDescriptorProtoBuilder *)setEnumTypeArray:(NSArray *)array;
- (PBDescriptorProtoBuilder *)clearEnumType;

- (NSMutableArray *)extensionRange;
- (PBDescriptorProtoExtensionRange*)extensionRangeAtIndex:(NSUInteger)index;
- (PBDescriptorProtoBuilder *)addExtensionRange:(PBDescriptorProtoExtensionRange*)value;
- (PBDescriptorProtoBuilder *)setExtensionRangeArray:(NSArray *)array;
- (PBDescriptorProtoBuilder *)clearExtensionRange;

- (NSMutableArray *)oneofDecl;
- (PBOneofDescriptorProto*)oneofDeclAtIndex:(NSUInteger)index;
- (PBDescriptorProtoBuilder *)addOneofDecl:(PBOneofDescriptorProto*)value;
- (PBDescriptorProtoBuilder *)setOneofDeclArray:(NSArray *)array;
- (PBDescriptorProtoBuilder *)clearOneofDecl;

- (BOOL) hasOptions;
- (PBMessageOptions*) options;
- (PBDescriptorProtoBuilder*) setOptions:(PBMessageOptions*) value;
- (PBDescriptorProtoBuilder*) setOptionsBuilder:(PBMessageOptionsBuilder*) builderForValue;
- (PBDescriptorProtoBuilder*) mergeOptions:(PBMessageOptions*) value;
- (PBDescriptorProtoBuilder*) clearOptions;
@end

@interface PBFieldDescriptorProto : PBGeneratedMessage {
@private
  BOOL hasNumber_:1;
  BOOL hasOneofIndex_:1;
  BOOL hasName_:1;
  BOOL hasTypeName_:1;
  BOOL hasExtendee_:1;
  BOOL hasDefaultValue_:1;
  BOOL hasOptions_:1;
  BOOL hasLabel_:1;
  BOOL hasType_:1;
  SInt32 number;
  SInt32 oneofIndex;
  NSString* name;
  NSString* typeName;
  NSString* extendee;
  NSString* defaultValue;
  PBFieldOptions* options;
  PBFieldDescriptorProtoLabel label;
  PBFieldDescriptorProtoType type;
}
- (BOOL) hasName;
- (BOOL) hasNumber;
- (BOOL) hasLabel;
- (BOOL) hasType;
- (BOOL) hasTypeName;
- (BOOL) hasExtendee;
- (BOOL) hasDefaultValue;
- (BOOL) hasOneofIndex;
- (BOOL) hasOptions;
@property (readonly, strong) NSString* name;
@property (readonly) SInt32 number;
@property (readonly) PBFieldDescriptorProtoLabel label;
@property (readonly) PBFieldDescriptorProtoType type;
@property (readonly, strong) NSString* typeName;
@property (readonly, strong) NSString* extendee;
@property (readonly, strong) NSString* defaultValue;
@property (readonly) SInt32 oneofIndex;
@property (readonly, strong) PBFieldOptions* options;

+ (PBFieldDescriptorProto*) defaultInstance;
- (PBFieldDescriptorProto*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBFieldDescriptorProtoBuilder*) builder;
+ (PBFieldDescriptorProtoBuilder*) builder;
+ (PBFieldDescriptorProtoBuilder*) builderWithPrototype:(PBFieldDescriptorProto*) prototype;
- (PBFieldDescriptorProtoBuilder*) toBuilder;

+ (PBFieldDescriptorProto*) parseFromData:(NSData*) data;
+ (PBFieldDescriptorProto*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFieldDescriptorProto*) parseFromInputStream:(NSInputStream*) input;
+ (PBFieldDescriptorProto*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFieldDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBFieldDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBFieldDescriptorProtoBuilder : PBGeneratedMessageBuilder {
@private
  PBFieldDescriptorProto* result;
}

- (PBFieldDescriptorProto*) defaultInstance;

- (PBFieldDescriptorProtoBuilder*) clear;
- (PBFieldDescriptorProtoBuilder*) clone;

- (PBFieldDescriptorProto*) build;
- (PBFieldDescriptorProto*) buildPartial;

- (PBFieldDescriptorProtoBuilder*) mergeFrom:(PBFieldDescriptorProto*) other;
- (PBFieldDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBFieldDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasName;
- (NSString*) name;
- (PBFieldDescriptorProtoBuilder*) setName:(NSString*) value;
- (PBFieldDescriptorProtoBuilder*) clearName;

- (BOOL) hasNumber;
- (SInt32) number;
- (PBFieldDescriptorProtoBuilder*) setNumber:(SInt32) value;
- (PBFieldDescriptorProtoBuilder*) clearNumber;

- (BOOL) hasLabel;
- (PBFieldDescriptorProtoLabel) label;
- (PBFieldDescriptorProtoBuilder*) setLabel:(PBFieldDescriptorProtoLabel) value;
- (PBFieldDescriptorProtoBuilder*) clearLabel;

- (BOOL) hasType;
- (PBFieldDescriptorProtoType) type;
- (PBFieldDescriptorProtoBuilder*) setType:(PBFieldDescriptorProtoType) value;
- (PBFieldDescriptorProtoBuilder*) clearType;

- (BOOL) hasTypeName;
- (NSString*) typeName;
- (PBFieldDescriptorProtoBuilder*) setTypeName:(NSString*) value;
- (PBFieldDescriptorProtoBuilder*) clearTypeName;

- (BOOL) hasExtendee;
- (NSString*) extendee;
- (PBFieldDescriptorProtoBuilder*) setExtendee:(NSString*) value;
- (PBFieldDescriptorProtoBuilder*) clearExtendee;

- (BOOL) hasDefaultValue;
- (NSString*) defaultValue;
- (PBFieldDescriptorProtoBuilder*) setDefaultValue:(NSString*) value;
- (PBFieldDescriptorProtoBuilder*) clearDefaultValue;

- (BOOL) hasOneofIndex;
- (SInt32) oneofIndex;
- (PBFieldDescriptorProtoBuilder*) setOneofIndex:(SInt32) value;
- (PBFieldDescriptorProtoBuilder*) clearOneofIndex;

- (BOOL) hasOptions;
- (PBFieldOptions*) options;
- (PBFieldDescriptorProtoBuilder*) setOptions:(PBFieldOptions*) value;
- (PBFieldDescriptorProtoBuilder*) setOptionsBuilder:(PBFieldOptionsBuilder*) builderForValue;
- (PBFieldDescriptorProtoBuilder*) mergeOptions:(PBFieldOptions*) value;
- (PBFieldDescriptorProtoBuilder*) clearOptions;
@end

@interface PBOneofDescriptorProto : PBGeneratedMessage {
@private
  BOOL hasName_:1;
  NSString* name;
}
- (BOOL) hasName;
@property (readonly, strong) NSString* name;

+ (PBOneofDescriptorProto*) defaultInstance;
- (PBOneofDescriptorProto*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBOneofDescriptorProtoBuilder*) builder;
+ (PBOneofDescriptorProtoBuilder*) builder;
+ (PBOneofDescriptorProtoBuilder*) builderWithPrototype:(PBOneofDescriptorProto*) prototype;
- (PBOneofDescriptorProtoBuilder*) toBuilder;

+ (PBOneofDescriptorProto*) parseFromData:(NSData*) data;
+ (PBOneofDescriptorProto*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBOneofDescriptorProto*) parseFromInputStream:(NSInputStream*) input;
+ (PBOneofDescriptorProto*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBOneofDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBOneofDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBOneofDescriptorProtoBuilder : PBGeneratedMessageBuilder {
@private
  PBOneofDescriptorProto* result;
}

- (PBOneofDescriptorProto*) defaultInstance;

- (PBOneofDescriptorProtoBuilder*) clear;
- (PBOneofDescriptorProtoBuilder*) clone;

- (PBOneofDescriptorProto*) build;
- (PBOneofDescriptorProto*) buildPartial;

- (PBOneofDescriptorProtoBuilder*) mergeFrom:(PBOneofDescriptorProto*) other;
- (PBOneofDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBOneofDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasName;
- (NSString*) name;
- (PBOneofDescriptorProtoBuilder*) setName:(NSString*) value;
- (PBOneofDescriptorProtoBuilder*) clearName;
@end

@interface PBEnumDescriptorProto : PBGeneratedMessage {
@private
  BOOL hasName_:1;
  BOOL hasOptions_:1;
  NSString* name;
  PBEnumOptions* options;
  NSMutableArray * valueArray;
}
- (BOOL) hasName;
- (BOOL) hasOptions;
@property (readonly, strong) NSString* name;
@property (readonly, strong) NSArray * value;
@property (readonly, strong) PBEnumOptions* options;
- (PBEnumValueDescriptorProto*)valueAtIndex:(NSUInteger)index;

+ (PBEnumDescriptorProto*) defaultInstance;
- (PBEnumDescriptorProto*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBEnumDescriptorProtoBuilder*) builder;
+ (PBEnumDescriptorProtoBuilder*) builder;
+ (PBEnumDescriptorProtoBuilder*) builderWithPrototype:(PBEnumDescriptorProto*) prototype;
- (PBEnumDescriptorProtoBuilder*) toBuilder;

+ (PBEnumDescriptorProto*) parseFromData:(NSData*) data;
+ (PBEnumDescriptorProto*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBEnumDescriptorProto*) parseFromInputStream:(NSInputStream*) input;
+ (PBEnumDescriptorProto*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBEnumDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBEnumDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBEnumDescriptorProtoBuilder : PBGeneratedMessageBuilder {
@private
  PBEnumDescriptorProto* result;
}

- (PBEnumDescriptorProto*) defaultInstance;

- (PBEnumDescriptorProtoBuilder*) clear;
- (PBEnumDescriptorProtoBuilder*) clone;

- (PBEnumDescriptorProto*) build;
- (PBEnumDescriptorProto*) buildPartial;

- (PBEnumDescriptorProtoBuilder*) mergeFrom:(PBEnumDescriptorProto*) other;
- (PBEnumDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBEnumDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasName;
- (NSString*) name;
- (PBEnumDescriptorProtoBuilder*) setName:(NSString*) value;
- (PBEnumDescriptorProtoBuilder*) clearName;

- (NSMutableArray *)value;
- (PBEnumValueDescriptorProto*)valueAtIndex:(NSUInteger)index;
- (PBEnumDescriptorProtoBuilder *)addValue:(PBEnumValueDescriptorProto*)value;
- (PBEnumDescriptorProtoBuilder *)setValueArray:(NSArray *)array;
- (PBEnumDescriptorProtoBuilder *)clearValue;

- (BOOL) hasOptions;
- (PBEnumOptions*) options;
- (PBEnumDescriptorProtoBuilder*) setOptions:(PBEnumOptions*) value;
- (PBEnumDescriptorProtoBuilder*) setOptionsBuilder:(PBEnumOptionsBuilder*) builderForValue;
- (PBEnumDescriptorProtoBuilder*) mergeOptions:(PBEnumOptions*) value;
- (PBEnumDescriptorProtoBuilder*) clearOptions;
@end

@interface PBEnumValueDescriptorProto : PBGeneratedMessage {
@private
  BOOL hasNumber_:1;
  BOOL hasName_:1;
  BOOL hasOptions_:1;
  SInt32 number;
  NSString* name;
  PBEnumValueOptions* options;
}
- (BOOL) hasName;
- (BOOL) hasNumber;
- (BOOL) hasOptions;
@property (readonly, strong) NSString* name;
@property (readonly) SInt32 number;
@property (readonly, strong) PBEnumValueOptions* options;

+ (PBEnumValueDescriptorProto*) defaultInstance;
- (PBEnumValueDescriptorProto*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBEnumValueDescriptorProtoBuilder*) builder;
+ (PBEnumValueDescriptorProtoBuilder*) builder;
+ (PBEnumValueDescriptorProtoBuilder*) builderWithPrototype:(PBEnumValueDescriptorProto*) prototype;
- (PBEnumValueDescriptorProtoBuilder*) toBuilder;

+ (PBEnumValueDescriptorProto*) parseFromData:(NSData*) data;
+ (PBEnumValueDescriptorProto*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBEnumValueDescriptorProto*) parseFromInputStream:(NSInputStream*) input;
+ (PBEnumValueDescriptorProto*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBEnumValueDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBEnumValueDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBEnumValueDescriptorProtoBuilder : PBGeneratedMessageBuilder {
@private
  PBEnumValueDescriptorProto* result;
}

- (PBEnumValueDescriptorProto*) defaultInstance;

- (PBEnumValueDescriptorProtoBuilder*) clear;
- (PBEnumValueDescriptorProtoBuilder*) clone;

- (PBEnumValueDescriptorProto*) build;
- (PBEnumValueDescriptorProto*) buildPartial;

- (PBEnumValueDescriptorProtoBuilder*) mergeFrom:(PBEnumValueDescriptorProto*) other;
- (PBEnumValueDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBEnumValueDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasName;
- (NSString*) name;
- (PBEnumValueDescriptorProtoBuilder*) setName:(NSString*) value;
- (PBEnumValueDescriptorProtoBuilder*) clearName;

- (BOOL) hasNumber;
- (SInt32) number;
- (PBEnumValueDescriptorProtoBuilder*) setNumber:(SInt32) value;
- (PBEnumValueDescriptorProtoBuilder*) clearNumber;

- (BOOL) hasOptions;
- (PBEnumValueOptions*) options;
- (PBEnumValueDescriptorProtoBuilder*) setOptions:(PBEnumValueOptions*) value;
- (PBEnumValueDescriptorProtoBuilder*) setOptionsBuilder:(PBEnumValueOptionsBuilder*) builderForValue;
- (PBEnumValueDescriptorProtoBuilder*) mergeOptions:(PBEnumValueOptions*) value;
- (PBEnumValueDescriptorProtoBuilder*) clearOptions;
@end

@interface PBServiceDescriptorProto : PBGeneratedMessage {
@private
  BOOL hasName_:1;
  BOOL hasOptions_:1;
  NSString* name;
  PBServiceOptions* options;
  NSMutableArray * methodArray;
}
- (BOOL) hasName;
- (BOOL) hasOptions;
@property (readonly, strong) NSString* name;
@property (readonly, strong) NSArray * method;
@property (readonly, strong) PBServiceOptions* options;
- (PBMethodDescriptorProto*)methodAtIndex:(NSUInteger)index;

+ (PBServiceDescriptorProto*) defaultInstance;
- (PBServiceDescriptorProto*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBServiceDescriptorProtoBuilder*) builder;
+ (PBServiceDescriptorProtoBuilder*) builder;
+ (PBServiceDescriptorProtoBuilder*) builderWithPrototype:(PBServiceDescriptorProto*) prototype;
- (PBServiceDescriptorProtoBuilder*) toBuilder;

+ (PBServiceDescriptorProto*) parseFromData:(NSData*) data;
+ (PBServiceDescriptorProto*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBServiceDescriptorProto*) parseFromInputStream:(NSInputStream*) input;
+ (PBServiceDescriptorProto*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBServiceDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBServiceDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBServiceDescriptorProtoBuilder : PBGeneratedMessageBuilder {
@private
  PBServiceDescriptorProto* result;
}

- (PBServiceDescriptorProto*) defaultInstance;

- (PBServiceDescriptorProtoBuilder*) clear;
- (PBServiceDescriptorProtoBuilder*) clone;

- (PBServiceDescriptorProto*) build;
- (PBServiceDescriptorProto*) buildPartial;

- (PBServiceDescriptorProtoBuilder*) mergeFrom:(PBServiceDescriptorProto*) other;
- (PBServiceDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBServiceDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasName;
- (NSString*) name;
- (PBServiceDescriptorProtoBuilder*) setName:(NSString*) value;
- (PBServiceDescriptorProtoBuilder*) clearName;

- (NSMutableArray *)method;
- (PBMethodDescriptorProto*)methodAtIndex:(NSUInteger)index;
- (PBServiceDescriptorProtoBuilder *)addMethod:(PBMethodDescriptorProto*)value;
- (PBServiceDescriptorProtoBuilder *)setMethodArray:(NSArray *)array;
- (PBServiceDescriptorProtoBuilder *)clearMethod;

- (BOOL) hasOptions;
- (PBServiceOptions*) options;
- (PBServiceDescriptorProtoBuilder*) setOptions:(PBServiceOptions*) value;
- (PBServiceDescriptorProtoBuilder*) setOptionsBuilder:(PBServiceOptionsBuilder*) builderForValue;
- (PBServiceDescriptorProtoBuilder*) mergeOptions:(PBServiceOptions*) value;
- (PBServiceDescriptorProtoBuilder*) clearOptions;
@end

@interface PBMethodDescriptorProto : PBGeneratedMessage {
@private
  BOOL hasName_:1;
  BOOL hasInputType_:1;
  BOOL hasOutputType_:1;
  BOOL hasOptions_:1;
  NSString* name;
  NSString* inputType;
  NSString* outputType;
  PBMethodOptions* options;
}
- (BOOL) hasName;
- (BOOL) hasInputType;
- (BOOL) hasOutputType;
- (BOOL) hasOptions;
@property (readonly, strong) NSString* name;
@property (readonly, strong) NSString* inputType;
@property (readonly, strong) NSString* outputType;
@property (readonly, strong) PBMethodOptions* options;

+ (PBMethodDescriptorProto*) defaultInstance;
- (PBMethodDescriptorProto*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBMethodDescriptorProtoBuilder*) builder;
+ (PBMethodDescriptorProtoBuilder*) builder;
+ (PBMethodDescriptorProtoBuilder*) builderWithPrototype:(PBMethodDescriptorProto*) prototype;
- (PBMethodDescriptorProtoBuilder*) toBuilder;

+ (PBMethodDescriptorProto*) parseFromData:(NSData*) data;
+ (PBMethodDescriptorProto*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBMethodDescriptorProto*) parseFromInputStream:(NSInputStream*) input;
+ (PBMethodDescriptorProto*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBMethodDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBMethodDescriptorProto*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBMethodDescriptorProtoBuilder : PBGeneratedMessageBuilder {
@private
  PBMethodDescriptorProto* result;
}

- (PBMethodDescriptorProto*) defaultInstance;

- (PBMethodDescriptorProtoBuilder*) clear;
- (PBMethodDescriptorProtoBuilder*) clone;

- (PBMethodDescriptorProto*) build;
- (PBMethodDescriptorProto*) buildPartial;

- (PBMethodDescriptorProtoBuilder*) mergeFrom:(PBMethodDescriptorProto*) other;
- (PBMethodDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBMethodDescriptorProtoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasName;
- (NSString*) name;
- (PBMethodDescriptorProtoBuilder*) setName:(NSString*) value;
- (PBMethodDescriptorProtoBuilder*) clearName;

- (BOOL) hasInputType;
- (NSString*) inputType;
- (PBMethodDescriptorProtoBuilder*) setInputType:(NSString*) value;
- (PBMethodDescriptorProtoBuilder*) clearInputType;

- (BOOL) hasOutputType;
- (NSString*) outputType;
- (PBMethodDescriptorProtoBuilder*) setOutputType:(NSString*) value;
- (PBMethodDescriptorProtoBuilder*) clearOutputType;

- (BOOL) hasOptions;
- (PBMethodOptions*) options;
- (PBMethodDescriptorProtoBuilder*) setOptions:(PBMethodOptions*) value;
- (PBMethodDescriptorProtoBuilder*) setOptionsBuilder:(PBMethodOptionsBuilder*) builderForValue;
- (PBMethodDescriptorProtoBuilder*) mergeOptions:(PBMethodOptions*) value;
- (PBMethodDescriptorProtoBuilder*) clearOptions;
@end

@interface PBFileOptions : PBExtendableMessage {
@private
  BOOL hasJavaMultipleFiles_:1;
  BOOL hasJavaGenerateEqualsAndHash_:1;
  BOOL hasJavaStringCheckUtf8_:1;
  BOOL hasCcGenericServices_:1;
  BOOL hasJavaGenericServices_:1;
  BOOL hasPyGenericServices_:1;
  BOOL hasDeprecated_:1;
  BOOL hasJavaPackage_:1;
  BOOL hasJavaOuterClassname_:1;
  BOOL hasGoPackage_:1;
  BOOL hasOptimizeFor_:1;
  BOOL javaMultipleFiles_:1;
  BOOL javaGenerateEqualsAndHash_:1;
  BOOL javaStringCheckUtf8_:1;
  BOOL ccGenericServices_:1;
  BOOL javaGenericServices_:1;
  BOOL pyGenericServices_:1;
  BOOL deprecated_:1;
  NSString* javaPackage;
  NSString* javaOuterClassname;
  NSString* goPackage;
  PBFileOptionsOptimizeMode optimizeFor;
  NSMutableArray * uninterpretedOptionArray;
}
- (BOOL) hasJavaPackage;
- (BOOL) hasJavaOuterClassname;
- (BOOL) hasJavaMultipleFiles;
- (BOOL) hasJavaGenerateEqualsAndHash;
- (BOOL) hasJavaStringCheckUtf8;
- (BOOL) hasOptimizeFor;
- (BOOL) hasGoPackage;
- (BOOL) hasCcGenericServices;
- (BOOL) hasJavaGenericServices;
- (BOOL) hasPyGenericServices;
- (BOOL) hasDeprecated;
@property (readonly, strong) NSString* javaPackage;
@property (readonly, strong) NSString* javaOuterClassname;
- (BOOL) javaMultipleFiles;
- (BOOL) javaGenerateEqualsAndHash;
- (BOOL) javaStringCheckUtf8;
@property (readonly) PBFileOptionsOptimizeMode optimizeFor;
@property (readonly, strong) NSString* goPackage;
- (BOOL) ccGenericServices;
- (BOOL) javaGenericServices;
- (BOOL) pyGenericServices;
- (BOOL) deprecated;
@property (readonly, strong) NSArray * uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;

+ (PBFileOptions*) defaultInstance;
- (PBFileOptions*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBFileOptionsBuilder*) builder;
+ (PBFileOptionsBuilder*) builder;
+ (PBFileOptionsBuilder*) builderWithPrototype:(PBFileOptions*) prototype;
- (PBFileOptionsBuilder*) toBuilder;

+ (PBFileOptions*) parseFromData:(NSData*) data;
+ (PBFileOptions*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFileOptions*) parseFromInputStream:(NSInputStream*) input;
+ (PBFileOptions*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFileOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBFileOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBFileOptionsBuilder : PBExtendableMessageBuilder {
@private
  PBFileOptions* result;
}

- (PBFileOptions*) defaultInstance;

- (PBFileOptionsBuilder*) clear;
- (PBFileOptionsBuilder*) clone;

- (PBFileOptions*) build;
- (PBFileOptions*) buildPartial;

- (PBFileOptionsBuilder*) mergeFrom:(PBFileOptions*) other;
- (PBFileOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBFileOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasJavaPackage;
- (NSString*) javaPackage;
- (PBFileOptionsBuilder*) setJavaPackage:(NSString*) value;
- (PBFileOptionsBuilder*) clearJavaPackage;

- (BOOL) hasJavaOuterClassname;
- (NSString*) javaOuterClassname;
- (PBFileOptionsBuilder*) setJavaOuterClassname:(NSString*) value;
- (PBFileOptionsBuilder*) clearJavaOuterClassname;

- (BOOL) hasJavaMultipleFiles;
- (BOOL) javaMultipleFiles;
- (PBFileOptionsBuilder*) setJavaMultipleFiles:(BOOL) value;
- (PBFileOptionsBuilder*) clearJavaMultipleFiles;

- (BOOL) hasJavaGenerateEqualsAndHash;
- (BOOL) javaGenerateEqualsAndHash;
- (PBFileOptionsBuilder*) setJavaGenerateEqualsAndHash:(BOOL) value;
- (PBFileOptionsBuilder*) clearJavaGenerateEqualsAndHash;

- (BOOL) hasJavaStringCheckUtf8;
- (BOOL) javaStringCheckUtf8;
- (PBFileOptionsBuilder*) setJavaStringCheckUtf8:(BOOL) value;
- (PBFileOptionsBuilder*) clearJavaStringCheckUtf8;

- (BOOL) hasOptimizeFor;
- (PBFileOptionsOptimizeMode) optimizeFor;
- (PBFileOptionsBuilder*) setOptimizeFor:(PBFileOptionsOptimizeMode) value;
- (PBFileOptionsBuilder*) clearOptimizeFor;

- (BOOL) hasGoPackage;
- (NSString*) goPackage;
- (PBFileOptionsBuilder*) setGoPackage:(NSString*) value;
- (PBFileOptionsBuilder*) clearGoPackage;

- (BOOL) hasCcGenericServices;
- (BOOL) ccGenericServices;
- (PBFileOptionsBuilder*) setCcGenericServices:(BOOL) value;
- (PBFileOptionsBuilder*) clearCcGenericServices;

- (BOOL) hasJavaGenericServices;
- (BOOL) javaGenericServices;
- (PBFileOptionsBuilder*) setJavaGenericServices:(BOOL) value;
- (PBFileOptionsBuilder*) clearJavaGenericServices;

- (BOOL) hasPyGenericServices;
- (BOOL) pyGenericServices;
- (PBFileOptionsBuilder*) setPyGenericServices:(BOOL) value;
- (PBFileOptionsBuilder*) clearPyGenericServices;

- (BOOL) hasDeprecated;
- (BOOL) deprecated;
- (PBFileOptionsBuilder*) setDeprecated:(BOOL) value;
- (PBFileOptionsBuilder*) clearDeprecated;

- (NSMutableArray *)uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;
- (PBFileOptionsBuilder *)addUninterpretedOption:(PBUninterpretedOption*)value;
- (PBFileOptionsBuilder *)setUninterpretedOptionArray:(NSArray *)array;
- (PBFileOptionsBuilder *)clearUninterpretedOption;
@end

@interface PBMessageOptions : PBExtendableMessage {
@private
  BOOL hasMessageSetWireFormat_:1;
  BOOL hasNoStandardDescriptorAccessor_:1;
  BOOL hasDeprecated_:1;
  BOOL messageSetWireFormat_:1;
  BOOL noStandardDescriptorAccessor_:1;
  BOOL deprecated_:1;
  NSMutableArray * uninterpretedOptionArray;
}
- (BOOL) hasMessageSetWireFormat;
- (BOOL) hasNoStandardDescriptorAccessor;
- (BOOL) hasDeprecated;
- (BOOL) messageSetWireFormat;
- (BOOL) noStandardDescriptorAccessor;
- (BOOL) deprecated;
@property (readonly, strong) NSArray * uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;

+ (PBMessageOptions*) defaultInstance;
- (PBMessageOptions*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBMessageOptionsBuilder*) builder;
+ (PBMessageOptionsBuilder*) builder;
+ (PBMessageOptionsBuilder*) builderWithPrototype:(PBMessageOptions*) prototype;
- (PBMessageOptionsBuilder*) toBuilder;

+ (PBMessageOptions*) parseFromData:(NSData*) data;
+ (PBMessageOptions*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBMessageOptions*) parseFromInputStream:(NSInputStream*) input;
+ (PBMessageOptions*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBMessageOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBMessageOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBMessageOptionsBuilder : PBExtendableMessageBuilder {
@private
  PBMessageOptions* result;
}

- (PBMessageOptions*) defaultInstance;

- (PBMessageOptionsBuilder*) clear;
- (PBMessageOptionsBuilder*) clone;

- (PBMessageOptions*) build;
- (PBMessageOptions*) buildPartial;

- (PBMessageOptionsBuilder*) mergeFrom:(PBMessageOptions*) other;
- (PBMessageOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBMessageOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasMessageSetWireFormat;
- (BOOL) messageSetWireFormat;
- (PBMessageOptionsBuilder*) setMessageSetWireFormat:(BOOL) value;
- (PBMessageOptionsBuilder*) clearMessageSetWireFormat;

- (BOOL) hasNoStandardDescriptorAccessor;
- (BOOL) noStandardDescriptorAccessor;
- (PBMessageOptionsBuilder*) setNoStandardDescriptorAccessor:(BOOL) value;
- (PBMessageOptionsBuilder*) clearNoStandardDescriptorAccessor;

- (BOOL) hasDeprecated;
- (BOOL) deprecated;
- (PBMessageOptionsBuilder*) setDeprecated:(BOOL) value;
- (PBMessageOptionsBuilder*) clearDeprecated;

- (NSMutableArray *)uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;
- (PBMessageOptionsBuilder *)addUninterpretedOption:(PBUninterpretedOption*)value;
- (PBMessageOptionsBuilder *)setUninterpretedOptionArray:(NSArray *)array;
- (PBMessageOptionsBuilder *)clearUninterpretedOption;
@end

@interface PBFieldOptions : PBExtendableMessage {
@private
  BOOL hasPacked_:1;
  BOOL hasLazy_:1;
  BOOL hasDeprecated_:1;
  BOOL hasWeak_:1;
  BOOL hasExperimentalMapKey_:1;
  BOOL hasCtype_:1;
  BOOL packed_:1;
  BOOL lazy_:1;
  BOOL deprecated_:1;
  BOOL weak_:1;
  NSString* experimentalMapKey;
  PBFieldOptionsCType ctype;
  NSMutableArray * uninterpretedOptionArray;
}
- (BOOL) hasCtype;
- (BOOL) hasPacked;
- (BOOL) hasLazy;
- (BOOL) hasDeprecated;
- (BOOL) hasExperimentalMapKey;
- (BOOL) hasWeak;
@property (readonly) PBFieldOptionsCType ctype;
- (BOOL) packed;
- (BOOL) lazy;
- (BOOL) deprecated;
@property (readonly, strong) NSString* experimentalMapKey;
- (BOOL) weak;
@property (readonly, strong) NSArray * uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;

+ (PBFieldOptions*) defaultInstance;
- (PBFieldOptions*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBFieldOptionsBuilder*) builder;
+ (PBFieldOptionsBuilder*) builder;
+ (PBFieldOptionsBuilder*) builderWithPrototype:(PBFieldOptions*) prototype;
- (PBFieldOptionsBuilder*) toBuilder;

+ (PBFieldOptions*) parseFromData:(NSData*) data;
+ (PBFieldOptions*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFieldOptions*) parseFromInputStream:(NSInputStream*) input;
+ (PBFieldOptions*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBFieldOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBFieldOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBFieldOptionsBuilder : PBExtendableMessageBuilder {
@private
  PBFieldOptions* result;
}

- (PBFieldOptions*) defaultInstance;

- (PBFieldOptionsBuilder*) clear;
- (PBFieldOptionsBuilder*) clone;

- (PBFieldOptions*) build;
- (PBFieldOptions*) buildPartial;

- (PBFieldOptionsBuilder*) mergeFrom:(PBFieldOptions*) other;
- (PBFieldOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBFieldOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasCtype;
- (PBFieldOptionsCType) ctype;
- (PBFieldOptionsBuilder*) setCtype:(PBFieldOptionsCType) value;
- (PBFieldOptionsBuilder*) clearCtype;

- (BOOL) hasPacked;
- (BOOL) packed;
- (PBFieldOptionsBuilder*) setPacked:(BOOL) value;
- (PBFieldOptionsBuilder*) clearPacked;

- (BOOL) hasLazy;
- (BOOL) lazy;
- (PBFieldOptionsBuilder*) setLazy:(BOOL) value;
- (PBFieldOptionsBuilder*) clearLazy;

- (BOOL) hasDeprecated;
- (BOOL) deprecated;
- (PBFieldOptionsBuilder*) setDeprecated:(BOOL) value;
- (PBFieldOptionsBuilder*) clearDeprecated;

- (BOOL) hasExperimentalMapKey;
- (NSString*) experimentalMapKey;
- (PBFieldOptionsBuilder*) setExperimentalMapKey:(NSString*) value;
- (PBFieldOptionsBuilder*) clearExperimentalMapKey;

- (BOOL) hasWeak;
- (BOOL) weak;
- (PBFieldOptionsBuilder*) setWeak:(BOOL) value;
- (PBFieldOptionsBuilder*) clearWeak;

- (NSMutableArray *)uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;
- (PBFieldOptionsBuilder *)addUninterpretedOption:(PBUninterpretedOption*)value;
- (PBFieldOptionsBuilder *)setUninterpretedOptionArray:(NSArray *)array;
- (PBFieldOptionsBuilder *)clearUninterpretedOption;
@end

@interface PBEnumOptions : PBExtendableMessage {
@private
  BOOL hasAllowAlias_:1;
  BOOL hasDeprecated_:1;
  BOOL allowAlias_:1;
  BOOL deprecated_:1;
  NSMutableArray * uninterpretedOptionArray;
}
- (BOOL) hasAllowAlias;
- (BOOL) hasDeprecated;
- (BOOL) allowAlias;
- (BOOL) deprecated;
@property (readonly, strong) NSArray * uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;

+ (PBEnumOptions*) defaultInstance;
- (PBEnumOptions*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBEnumOptionsBuilder*) builder;
+ (PBEnumOptionsBuilder*) builder;
+ (PBEnumOptionsBuilder*) builderWithPrototype:(PBEnumOptions*) prototype;
- (PBEnumOptionsBuilder*) toBuilder;

+ (PBEnumOptions*) parseFromData:(NSData*) data;
+ (PBEnumOptions*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBEnumOptions*) parseFromInputStream:(NSInputStream*) input;
+ (PBEnumOptions*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBEnumOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBEnumOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBEnumOptionsBuilder : PBExtendableMessageBuilder {
@private
  PBEnumOptions* result;
}

- (PBEnumOptions*) defaultInstance;

- (PBEnumOptionsBuilder*) clear;
- (PBEnumOptionsBuilder*) clone;

- (PBEnumOptions*) build;
- (PBEnumOptions*) buildPartial;

- (PBEnumOptionsBuilder*) mergeFrom:(PBEnumOptions*) other;
- (PBEnumOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBEnumOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasAllowAlias;
- (BOOL) allowAlias;
- (PBEnumOptionsBuilder*) setAllowAlias:(BOOL) value;
- (PBEnumOptionsBuilder*) clearAllowAlias;

- (BOOL) hasDeprecated;
- (BOOL) deprecated;
- (PBEnumOptionsBuilder*) setDeprecated:(BOOL) value;
- (PBEnumOptionsBuilder*) clearDeprecated;

- (NSMutableArray *)uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;
- (PBEnumOptionsBuilder *)addUninterpretedOption:(PBUninterpretedOption*)value;
- (PBEnumOptionsBuilder *)setUninterpretedOptionArray:(NSArray *)array;
- (PBEnumOptionsBuilder *)clearUninterpretedOption;
@end

@interface PBEnumValueOptions : PBExtendableMessage {
@private
  BOOL hasDeprecated_:1;
  BOOL deprecated_:1;
  NSMutableArray * uninterpretedOptionArray;
}
- (BOOL) hasDeprecated;
- (BOOL) deprecated;
@property (readonly, strong) NSArray * uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;

+ (PBEnumValueOptions*) defaultInstance;
- (PBEnumValueOptions*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBEnumValueOptionsBuilder*) builder;
+ (PBEnumValueOptionsBuilder*) builder;
+ (PBEnumValueOptionsBuilder*) builderWithPrototype:(PBEnumValueOptions*) prototype;
- (PBEnumValueOptionsBuilder*) toBuilder;

+ (PBEnumValueOptions*) parseFromData:(NSData*) data;
+ (PBEnumValueOptions*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBEnumValueOptions*) parseFromInputStream:(NSInputStream*) input;
+ (PBEnumValueOptions*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBEnumValueOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBEnumValueOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBEnumValueOptionsBuilder : PBExtendableMessageBuilder {
@private
  PBEnumValueOptions* result;
}

- (PBEnumValueOptions*) defaultInstance;

- (PBEnumValueOptionsBuilder*) clear;
- (PBEnumValueOptionsBuilder*) clone;

- (PBEnumValueOptions*) build;
- (PBEnumValueOptions*) buildPartial;

- (PBEnumValueOptionsBuilder*) mergeFrom:(PBEnumValueOptions*) other;
- (PBEnumValueOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBEnumValueOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasDeprecated;
- (BOOL) deprecated;
- (PBEnumValueOptionsBuilder*) setDeprecated:(BOOL) value;
- (PBEnumValueOptionsBuilder*) clearDeprecated;

- (NSMutableArray *)uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;
- (PBEnumValueOptionsBuilder *)addUninterpretedOption:(PBUninterpretedOption*)value;
- (PBEnumValueOptionsBuilder *)setUninterpretedOptionArray:(NSArray *)array;
- (PBEnumValueOptionsBuilder *)clearUninterpretedOption;
@end

@interface PBServiceOptions : PBExtendableMessage {
@private
  BOOL hasDeprecated_:1;
  BOOL deprecated_:1;
  NSMutableArray * uninterpretedOptionArray;
}
- (BOOL) hasDeprecated;
- (BOOL) deprecated;
@property (readonly, strong) NSArray * uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;

+ (PBServiceOptions*) defaultInstance;
- (PBServiceOptions*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBServiceOptionsBuilder*) builder;
+ (PBServiceOptionsBuilder*) builder;
+ (PBServiceOptionsBuilder*) builderWithPrototype:(PBServiceOptions*) prototype;
- (PBServiceOptionsBuilder*) toBuilder;

+ (PBServiceOptions*) parseFromData:(NSData*) data;
+ (PBServiceOptions*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBServiceOptions*) parseFromInputStream:(NSInputStream*) input;
+ (PBServiceOptions*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBServiceOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBServiceOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBServiceOptionsBuilder : PBExtendableMessageBuilder {
@private
  PBServiceOptions* result;
}

- (PBServiceOptions*) defaultInstance;

- (PBServiceOptionsBuilder*) clear;
- (PBServiceOptionsBuilder*) clone;

- (PBServiceOptions*) build;
- (PBServiceOptions*) buildPartial;

- (PBServiceOptionsBuilder*) mergeFrom:(PBServiceOptions*) other;
- (PBServiceOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBServiceOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasDeprecated;
- (BOOL) deprecated;
- (PBServiceOptionsBuilder*) setDeprecated:(BOOL) value;
- (PBServiceOptionsBuilder*) clearDeprecated;

- (NSMutableArray *)uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;
- (PBServiceOptionsBuilder *)addUninterpretedOption:(PBUninterpretedOption*)value;
- (PBServiceOptionsBuilder *)setUninterpretedOptionArray:(NSArray *)array;
- (PBServiceOptionsBuilder *)clearUninterpretedOption;
@end

@interface PBMethodOptions : PBExtendableMessage {
@private
  BOOL hasDeprecated_:1;
  BOOL deprecated_:1;
  NSMutableArray * uninterpretedOptionArray;
}
- (BOOL) hasDeprecated;
- (BOOL) deprecated;
@property (readonly, strong) NSArray * uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;

+ (PBMethodOptions*) defaultInstance;
- (PBMethodOptions*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBMethodOptionsBuilder*) builder;
+ (PBMethodOptionsBuilder*) builder;
+ (PBMethodOptionsBuilder*) builderWithPrototype:(PBMethodOptions*) prototype;
- (PBMethodOptionsBuilder*) toBuilder;

+ (PBMethodOptions*) parseFromData:(NSData*) data;
+ (PBMethodOptions*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBMethodOptions*) parseFromInputStream:(NSInputStream*) input;
+ (PBMethodOptions*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBMethodOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBMethodOptions*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBMethodOptionsBuilder : PBExtendableMessageBuilder {
@private
  PBMethodOptions* result;
}

- (PBMethodOptions*) defaultInstance;

- (PBMethodOptionsBuilder*) clear;
- (PBMethodOptionsBuilder*) clone;

- (PBMethodOptions*) build;
- (PBMethodOptions*) buildPartial;

- (PBMethodOptionsBuilder*) mergeFrom:(PBMethodOptions*) other;
- (PBMethodOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBMethodOptionsBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasDeprecated;
- (BOOL) deprecated;
- (PBMethodOptionsBuilder*) setDeprecated:(BOOL) value;
- (PBMethodOptionsBuilder*) clearDeprecated;

- (NSMutableArray *)uninterpretedOption;
- (PBUninterpretedOption*)uninterpretedOptionAtIndex:(NSUInteger)index;
- (PBMethodOptionsBuilder *)addUninterpretedOption:(PBUninterpretedOption*)value;
- (PBMethodOptionsBuilder *)setUninterpretedOptionArray:(NSArray *)array;
- (PBMethodOptionsBuilder *)clearUninterpretedOption;
@end

@interface PBUninterpretedOption : PBGeneratedMessage {
@private
  BOOL hasDoubleValue_:1;
  BOOL hasNegativeIntValue_:1;
  BOOL hasPositiveIntValue_:1;
  BOOL hasIdentifierValue_:1;
  BOOL hasAggregateValue_:1;
  BOOL hasStringValue_:1;
  Float64 doubleValue;
  SInt64 negativeIntValue;
  UInt64 positiveIntValue;
  NSString* identifierValue;
  NSString* aggregateValue;
  NSData* stringValue;
  NSMutableArray * nameArray;
}
- (BOOL) hasIdentifierValue;
- (BOOL) hasPositiveIntValue;
- (BOOL) hasNegativeIntValue;
- (BOOL) hasDoubleValue;
- (BOOL) hasStringValue;
- (BOOL) hasAggregateValue;
@property (readonly, strong) NSArray * name;
@property (readonly, strong) NSString* identifierValue;
@property (readonly) UInt64 positiveIntValue;
@property (readonly) SInt64 negativeIntValue;
@property (readonly) Float64 doubleValue;
@property (readonly, strong) NSData* stringValue;
@property (readonly, strong) NSString* aggregateValue;
- (PBUninterpretedOptionNamePart*)nameAtIndex:(NSUInteger)index;

+ (PBUninterpretedOption*) defaultInstance;
- (PBUninterpretedOption*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBUninterpretedOptionBuilder*) builder;
+ (PBUninterpretedOptionBuilder*) builder;
+ (PBUninterpretedOptionBuilder*) builderWithPrototype:(PBUninterpretedOption*) prototype;
- (PBUninterpretedOptionBuilder*) toBuilder;

+ (PBUninterpretedOption*) parseFromData:(NSData*) data;
+ (PBUninterpretedOption*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBUninterpretedOption*) parseFromInputStream:(NSInputStream*) input;
+ (PBUninterpretedOption*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBUninterpretedOption*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBUninterpretedOption*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBUninterpretedOptionNamePart : PBGeneratedMessage {
@private
  BOOL hasIsExtension_:1;
  BOOL hasNamePart_:1;
  BOOL isExtension_:1;
  NSString* namePart;
}
- (BOOL) hasNamePart;
- (BOOL) hasIsExtension;
@property (readonly, strong) NSString* namePart;
- (BOOL) isExtension;

+ (PBUninterpretedOptionNamePart*) defaultInstance;
- (PBUninterpretedOptionNamePart*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBUninterpretedOptionNamePartBuilder*) builder;
+ (PBUninterpretedOptionNamePartBuilder*) builder;
+ (PBUninterpretedOptionNamePartBuilder*) builderWithPrototype:(PBUninterpretedOptionNamePart*) prototype;
- (PBUninterpretedOptionNamePartBuilder*) toBuilder;

+ (PBUninterpretedOptionNamePart*) parseFromData:(NSData*) data;
+ (PBUninterpretedOptionNamePart*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBUninterpretedOptionNamePart*) parseFromInputStream:(NSInputStream*) input;
+ (PBUninterpretedOptionNamePart*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBUninterpretedOptionNamePart*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBUninterpretedOptionNamePart*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBUninterpretedOptionNamePartBuilder : PBGeneratedMessageBuilder {
@private
  PBUninterpretedOptionNamePart* result;
}

- (PBUninterpretedOptionNamePart*) defaultInstance;

- (PBUninterpretedOptionNamePartBuilder*) clear;
- (PBUninterpretedOptionNamePartBuilder*) clone;

- (PBUninterpretedOptionNamePart*) build;
- (PBUninterpretedOptionNamePart*) buildPartial;

- (PBUninterpretedOptionNamePartBuilder*) mergeFrom:(PBUninterpretedOptionNamePart*) other;
- (PBUninterpretedOptionNamePartBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBUninterpretedOptionNamePartBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (BOOL) hasNamePart;
- (NSString*) namePart;
- (PBUninterpretedOptionNamePartBuilder*) setNamePart:(NSString*) value;
- (PBUninterpretedOptionNamePartBuilder*) clearNamePart;

- (BOOL) hasIsExtension;
- (BOOL) isExtension;
- (PBUninterpretedOptionNamePartBuilder*) setIsExtension:(BOOL) value;
- (PBUninterpretedOptionNamePartBuilder*) clearIsExtension;
@end

@interface PBUninterpretedOptionBuilder : PBGeneratedMessageBuilder {
@private
  PBUninterpretedOption* result;
}

- (PBUninterpretedOption*) defaultInstance;

- (PBUninterpretedOptionBuilder*) clear;
- (PBUninterpretedOptionBuilder*) clone;

- (PBUninterpretedOption*) build;
- (PBUninterpretedOption*) buildPartial;

- (PBUninterpretedOptionBuilder*) mergeFrom:(PBUninterpretedOption*) other;
- (PBUninterpretedOptionBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBUninterpretedOptionBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (NSMutableArray *)name;
- (PBUninterpretedOptionNamePart*)nameAtIndex:(NSUInteger)index;
- (PBUninterpretedOptionBuilder *)addName:(PBUninterpretedOptionNamePart*)value;
- (PBUninterpretedOptionBuilder *)setNameArray:(NSArray *)array;
- (PBUninterpretedOptionBuilder *)clearName;

- (BOOL) hasIdentifierValue;
- (NSString*) identifierValue;
- (PBUninterpretedOptionBuilder*) setIdentifierValue:(NSString*) value;
- (PBUninterpretedOptionBuilder*) clearIdentifierValue;

- (BOOL) hasPositiveIntValue;
- (UInt64) positiveIntValue;
- (PBUninterpretedOptionBuilder*) setPositiveIntValue:(UInt64) value;
- (PBUninterpretedOptionBuilder*) clearPositiveIntValue;

- (BOOL) hasNegativeIntValue;
- (SInt64) negativeIntValue;
- (PBUninterpretedOptionBuilder*) setNegativeIntValue:(SInt64) value;
- (PBUninterpretedOptionBuilder*) clearNegativeIntValue;

- (BOOL) hasDoubleValue;
- (Float64) doubleValue;
- (PBUninterpretedOptionBuilder*) setDoubleValue:(Float64) value;
- (PBUninterpretedOptionBuilder*) clearDoubleValue;

- (BOOL) hasStringValue;
- (NSData*) stringValue;
- (PBUninterpretedOptionBuilder*) setStringValue:(NSData*) value;
- (PBUninterpretedOptionBuilder*) clearStringValue;

- (BOOL) hasAggregateValue;
- (NSString*) aggregateValue;
- (PBUninterpretedOptionBuilder*) setAggregateValue:(NSString*) value;
- (PBUninterpretedOptionBuilder*) clearAggregateValue;
@end

@interface PBSourceCodeInfo : PBGeneratedMessage {
@private
  NSMutableArray * locationArray;
}
@property (readonly, strong) NSArray * location;
- (PBSourceCodeInfoLocation*)locationAtIndex:(NSUInteger)index;

+ (PBSourceCodeInfo*) defaultInstance;
- (PBSourceCodeInfo*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBSourceCodeInfoBuilder*) builder;
+ (PBSourceCodeInfoBuilder*) builder;
+ (PBSourceCodeInfoBuilder*) builderWithPrototype:(PBSourceCodeInfo*) prototype;
- (PBSourceCodeInfoBuilder*) toBuilder;

+ (PBSourceCodeInfo*) parseFromData:(NSData*) data;
+ (PBSourceCodeInfo*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBSourceCodeInfo*) parseFromInputStream:(NSInputStream*) input;
+ (PBSourceCodeInfo*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBSourceCodeInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBSourceCodeInfo*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBSourceCodeInfoLocation : PBGeneratedMessage {
@private
  BOOL hasLeadingComments_:1;
  BOOL hasTrailingComments_:1;
  NSString* leadingComments;
  NSString* trailingComments;
  PBAppendableArray * pathArray;
  SInt32 pathMemoizedSerializedSize;
  PBAppendableArray * spanArray;
  SInt32 spanMemoizedSerializedSize;
}
- (BOOL) hasLeadingComments;
- (BOOL) hasTrailingComments;
@property (readonly, strong) PBArray * path;
@property (readonly, strong) PBArray * span;
@property (readonly, strong) NSString* leadingComments;
@property (readonly, strong) NSString* trailingComments;
- (SInt32)pathAtIndex:(NSUInteger)index;
- (SInt32)spanAtIndex:(NSUInteger)index;

+ (PBSourceCodeInfoLocation*) defaultInstance;
- (PBSourceCodeInfoLocation*) defaultInstance;

- (BOOL) isInitialized;
- (void) writeToCodedOutputStream:(PBCodedOutputStream*) output;
- (PBSourceCodeInfoLocationBuilder*) builder;
+ (PBSourceCodeInfoLocationBuilder*) builder;
+ (PBSourceCodeInfoLocationBuilder*) builderWithPrototype:(PBSourceCodeInfoLocation*) prototype;
- (PBSourceCodeInfoLocationBuilder*) toBuilder;

+ (PBSourceCodeInfoLocation*) parseFromData:(NSData*) data;
+ (PBSourceCodeInfoLocation*) parseFromData:(NSData*) data extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBSourceCodeInfoLocation*) parseFromInputStream:(NSInputStream*) input;
+ (PBSourceCodeInfoLocation*) parseFromInputStream:(NSInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
+ (PBSourceCodeInfoLocation*) parseFromCodedInputStream:(PBCodedInputStream*) input;
+ (PBSourceCodeInfoLocation*) parseFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;
@end

@interface PBSourceCodeInfoLocationBuilder : PBGeneratedMessageBuilder {
@private
  PBSourceCodeInfoLocation* result;
}

- (PBSourceCodeInfoLocation*) defaultInstance;

- (PBSourceCodeInfoLocationBuilder*) clear;
- (PBSourceCodeInfoLocationBuilder*) clone;

- (PBSourceCodeInfoLocation*) build;
- (PBSourceCodeInfoLocation*) buildPartial;

- (PBSourceCodeInfoLocationBuilder*) mergeFrom:(PBSourceCodeInfoLocation*) other;
- (PBSourceCodeInfoLocationBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBSourceCodeInfoLocationBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (PBAppendableArray *)path;
- (SInt32)pathAtIndex:(NSUInteger)index;
- (PBSourceCodeInfoLocationBuilder *)addPath:(SInt32)value;
- (PBSourceCodeInfoLocationBuilder *)setPathArray:(NSArray *)array;
- (PBSourceCodeInfoLocationBuilder *)setPathValues:(const SInt32 *)values count:(NSUInteger)count;
- (PBSourceCodeInfoLocationBuilder *)clearPath;

- (PBAppendableArray *)span;
- (SInt32)spanAtIndex:(NSUInteger)index;
- (PBSourceCodeInfoLocationBuilder *)addSpan:(SInt32)value;
- (PBSourceCodeInfoLocationBuilder *)setSpanArray:(NSArray *)array;
- (PBSourceCodeInfoLocationBuilder *)setSpanValues:(const SInt32 *)values count:(NSUInteger)count;
- (PBSourceCodeInfoLocationBuilder *)clearSpan;

- (BOOL) hasLeadingComments;
- (NSString*) leadingComments;
- (PBSourceCodeInfoLocationBuilder*) setLeadingComments:(NSString*) value;
- (PBSourceCodeInfoLocationBuilder*) clearLeadingComments;

- (BOOL) hasTrailingComments;
- (NSString*) trailingComments;
- (PBSourceCodeInfoLocationBuilder*) setTrailingComments:(NSString*) value;
- (PBSourceCodeInfoLocationBuilder*) clearTrailingComments;
@end

@interface PBSourceCodeInfoBuilder : PBGeneratedMessageBuilder {
@private
  PBSourceCodeInfo* result;
}

- (PBSourceCodeInfo*) defaultInstance;

- (PBSourceCodeInfoBuilder*) clear;
- (PBSourceCodeInfoBuilder*) clone;

- (PBSourceCodeInfo*) build;
- (PBSourceCodeInfo*) buildPartial;

- (PBSourceCodeInfoBuilder*) mergeFrom:(PBSourceCodeInfo*) other;
- (PBSourceCodeInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input;
- (PBSourceCodeInfoBuilder*) mergeFromCodedInputStream:(PBCodedInputStream*) input extensionRegistry:(PBExtensionRegistry*) extensionRegistry;

- (NSMutableArray *)location;
- (PBSourceCodeInfoLocation*)locationAtIndex:(NSUInteger)index;
- (PBSourceCodeInfoBuilder *)addLocation:(PBSourceCodeInfoLocation*)value;
- (PBSourceCodeInfoBuilder *)setLocationArray:(NSArray *)array;
- (PBSourceCodeInfoBuilder *)clearLocation;
@end


// @@protoc_insertion_point(global_scope)
