// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: descriptor.proto

package com.google.protobuf;

public final class DescriptorProtos {
  private DescriptorProtos() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public interface FileDescriptorSetOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.FileDescriptorSet)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> 
        getFileList();
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index);
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    int getFileCount();
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
        getFileOrBuilderList();
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.FileDescriptorSet}
   *
   * <pre>
   * The protocol compiler can output a FileDescriptorSet containing the .proto
   * files it parses.
   * </pre>
   */
  public static final class FileDescriptorSet extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.FileDescriptorSet)
      FileDescriptorSetOrBuilder {
    // Use FileDescriptorSet.newBuilder() to construct.
    private FileDescriptorSet(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FileDescriptorSet(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FileDescriptorSet defaultInstance;
    public static FileDescriptorSet getDefaultInstance() {
      return defaultInstance;
    }

    public FileDescriptorSet getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FileDescriptorSet(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                file_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              file_.add(input.readMessage(com.google.protobuf.DescriptorProtos.FileDescriptorProto.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          file_ = java.util.Collections.unmodifiableList(file_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.FileDescriptorSet.class, com.google.protobuf.DescriptorProtos.FileDescriptorSet.Builder.class);
    }

    public static com.google.protobuf.Parser<FileDescriptorSet> PARSER =
        new com.google.protobuf.AbstractParser<FileDescriptorSet>() {
      public FileDescriptorSet parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FileDescriptorSet(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<FileDescriptorSet> getParserForType() {
      return PARSER;
    }

    public static final int FILE_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> file_;
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> getFileList() {
      return file_;
    }
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
        getFileOrBuilderList() {
      return file_;
    }
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    public int getFileCount() {
      return file_.size();
    }
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    public com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index) {
      return file_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
     */
    public com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
        int index) {
      return file_.get(index);
    }

    private void initFields() {
      file_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getFileCount(); i++) {
        if (!getFile(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < file_.size(); i++) {
        output.writeMessage(1, file_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < file_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, file_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileDescriptorSet prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.FileDescriptorSet}
     *
     * <pre>
     * The protocol compiler can output a FileDescriptorSet containing the .proto
     * files it parses.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.FileDescriptorSet)
        com.google.protobuf.DescriptorProtos.FileDescriptorSetOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.FileDescriptorSet.class, com.google.protobuf.DescriptorProtos.FileDescriptorSet.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorSet.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getFileFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (fileBuilder_ == null) {
          file_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          fileBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.FileDescriptorSet getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.FileDescriptorSet build() {
        com.google.protobuf.DescriptorProtos.FileDescriptorSet result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.FileDescriptorSet buildPartial() {
        com.google.protobuf.DescriptorProtos.FileDescriptorSet result = new com.google.protobuf.DescriptorProtos.FileDescriptorSet(this);
        int from_bitField0_ = bitField0_;
        if (fileBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            file_ = java.util.Collections.unmodifiableList(file_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.file_ = file_;
        } else {
          result.file_ = fileBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorSet) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.FileDescriptorSet)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorSet other) {
        if (other == com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDefaultInstance()) return this;
        if (fileBuilder_ == null) {
          if (!other.file_.isEmpty()) {
            if (file_.isEmpty()) {
              file_ = other.file_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureFileIsMutable();
              file_.addAll(other.file_);
            }
            onChanged();
          }
        } else {
          if (!other.file_.isEmpty()) {
            if (fileBuilder_.isEmpty()) {
              fileBuilder_.dispose();
              fileBuilder_ = null;
              file_ = other.file_;
              bitField0_ = (bitField0_ & ~0x00000001);
              fileBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getFileFieldBuilder() : null;
            } else {
              fileBuilder_.addAllMessages(other.file_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getFileCount(); i++) {
          if (!getFile(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.FileDescriptorSet parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.FileDescriptorSet) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> file_ =
        java.util.Collections.emptyList();
      private void ensureFileIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          file_ = new java.util.ArrayList<>(file_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.FileDescriptorProto, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> fileBuilder_;

      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> getFileList() {
        if (fileBuilder_ == null) {
          return java.util.Collections.unmodifiableList(file_);
        } else {
          return fileBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public int getFileCount() {
        if (fileBuilder_ == null) {
          return file_.size();
        } else {
          return fileBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index) {
        if (fileBuilder_ == null) {
          return file_.get(index);
        } else {
          return fileBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder setFile(
          int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.set(index, value);
          onChanged();
        } else {
          fileBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder setFile(
          int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.set(index, builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder addFile(com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.add(value);
          onChanged();
        } else {
          fileBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder addFile(
          int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.add(index, value);
          onChanged();
        } else {
          fileBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder addFile(
          com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.add(builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder addFile(
          int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.add(index, builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder addAllFile(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProto> values) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, file_);
          onChanged();
        } else {
          fileBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder clearFile() {
        if (fileBuilder_ == null) {
          file_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          fileBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public Builder removeFile(int index) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.remove(index);
          onChanged();
        } else {
          fileBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder getFileBuilder(
          int index) {
        return getFileFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
          int index) {
        if (fileBuilder_ == null) {
          return file_.get(index);  } else {
          return fileBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
           getFileOrBuilderList() {
        if (fileBuilder_ != null) {
          return fileBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(file_);
        }
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder addFileBuilder() {
        return getFileFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder addFileBuilder(
          int index) {
        return getFileFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.FileDescriptorProto file = 1;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder> 
           getFileBuilderList() {
        return getFileFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.FileDescriptorProto, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
          getFileFieldBuilder() {
        if (fileBuilder_ == null) {
          fileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  file_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          file_ = null;
        }
        return fileBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorSet)
    }

    static {
      defaultInstance = new FileDescriptorSet(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet)
  }

  public interface FileDescriptorProtoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.FileDescriptorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * file name, relative to root of source tree
     * </pre>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * file name, relative to root of source tree
     * </pre>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * file name, relative to root of source tree
     * </pre>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional string package = 2;</code>
     *
     * <pre>
     * e.g. "foo", "foo.bar", etc.
     * </pre>
     */
    boolean hasPackage();
    /**
     * <code>optional string package = 2;</code>
     *
     * <pre>
     * e.g. "foo", "foo.bar", etc.
     * </pre>
     */
    java.lang.String getPackage();
    /**
     * <code>optional string package = 2;</code>
     *
     * <pre>
     * e.g. "foo", "foo.bar", etc.
     * </pre>
     */
    com.google.protobuf.ByteString
        getPackageBytes();

    /**
     * <code>repeated string dependency = 3;</code>
     *
     * <pre>
     * Names of files imported by this file.
     * </pre>
     */
    com.google.protobuf.ProtocolStringList
        getDependencyList();
    /**
     * <code>repeated string dependency = 3;</code>
     *
     * <pre>
     * Names of files imported by this file.
     * </pre>
     */
    int getDependencyCount();
    /**
     * <code>repeated string dependency = 3;</code>
     *
     * <pre>
     * Names of files imported by this file.
     * </pre>
     */
    java.lang.String getDependency(int index);
    /**
     * <code>repeated string dependency = 3;</code>
     *
     * <pre>
     * Names of files imported by this file.
     * </pre>
     */
    com.google.protobuf.ByteString
        getDependencyBytes(int index);

    /**
     * <code>repeated int32 public_dependency = 10;</code>
     *
     * <pre>
     * Indexes of the public imported files in the dependency list above.
     * </pre>
     */
    java.util.List<java.lang.Integer> getPublicDependencyList();
    /**
     * <code>repeated int32 public_dependency = 10;</code>
     *
     * <pre>
     * Indexes of the public imported files in the dependency list above.
     * </pre>
     */
    int getPublicDependencyCount();
    /**
     * <code>repeated int32 public_dependency = 10;</code>
     *
     * <pre>
     * Indexes of the public imported files in the dependency list above.
     * </pre>
     */
    int getPublicDependency(int index);

    /**
     * <code>repeated int32 weak_dependency = 11;</code>
     *
     * <pre>
     * Indexes of the weak imported files in the dependency list.
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    java.util.List<java.lang.Integer> getWeakDependencyList();
    /**
     * <code>repeated int32 weak_dependency = 11;</code>
     *
     * <pre>
     * Indexes of the weak imported files in the dependency list.
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    int getWeakDependencyCount();
    /**
     * <code>repeated int32 weak_dependency = 11;</code>
     *
     * <pre>
     * Indexes of the weak imported files in the dependency list.
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    int getWeakDependency(int index);

    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> 
        getMessageTypeList();
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index);
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    int getMessageTypeCount();
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
        getMessageTypeOrBuilderList();
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> 
        getEnumTypeList();
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index);
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    int getEnumTypeCount();
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
        getEnumTypeOrBuilderList();
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> 
        getServiceList();
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index);
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    int getServiceCount();
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
        getServiceOrBuilderList();
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
        getExtensionList();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index);
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    int getExtensionCount();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
        getExtensionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
        int index);

    /**
     * <code>optional .google.protobuf.FileOptions options = 8;</code>
     */
    boolean hasOptions();
    /**
     * <code>optional .google.protobuf.FileOptions options = 8;</code>
     */
    com.google.protobuf.DescriptorProtos.FileOptions getOptions();
    /**
     * <code>optional .google.protobuf.FileOptions options = 8;</code>
     */
    com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder();

    /**
     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
     *
     * <pre>
     * This field contains optional information about the original source code.
     * You may safely remove this entire field whithout harming runtime
     * functionality of the descriptors -- the information is needed only by
     * development tools.
     * </pre>
     */
    boolean hasSourceCodeInfo();
    /**
     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
     *
     * <pre>
     * This field contains optional information about the original source code.
     * You may safely remove this entire field whithout harming runtime
     * functionality of the descriptors -- the information is needed only by
     * development tools.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo();
    /**
     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
     *
     * <pre>
     * This field contains optional information about the original source code.
     * You may safely remove this entire field whithout harming runtime
     * functionality of the descriptors -- the information is needed only by
     * development tools.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder();
  }
  /**
   * Protobuf type {@code google.protobuf.FileDescriptorProto}
   *
   * <pre>
   * Describes a complete .proto file.
   * </pre>
   */
  public static final class FileDescriptorProto extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.FileDescriptorProto)
      FileDescriptorProtoOrBuilder {
    // Use FileDescriptorProto.newBuilder() to construct.
    private FileDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FileDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FileDescriptorProto defaultInstance;
    public static FileDescriptorProto getDefaultInstance() {
      return defaultInstance;
    }

    public FileDescriptorProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FileDescriptorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              package_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                dependency_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              dependency_.add(bs);
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                messageType_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000020;
              }
              messageType_.add(input.readMessage(com.google.protobuf.DescriptorProtos.DescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                enumType_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000040;
              }
              enumType_.add(input.readMessage(com.google.protobuf.DescriptorProtos.EnumDescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                service_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000080;
              }
              service_.add(input.readMessage(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                extension_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000100;
              }
              extension_.add(input.readMessage(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 66: {
              com.google.protobuf.DescriptorProtos.FileOptions.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.FileOptions.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 74: {
              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = sourceCodeInfo_.toBuilder();
              }
              sourceCodeInfo_ = input.readMessage(com.google.protobuf.DescriptorProtos.SourceCodeInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(sourceCodeInfo_);
                sourceCodeInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 80: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                publicDependency_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              publicDependency_.add(input.readInt32());
              break;
            }
            case 82: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
                publicDependency_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              while (input.getBytesUntilLimit() > 0) {
                publicDependency_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 88: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                weakDependency_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              weakDependency_.add(input.readInt32());
              break;
            }
            case 90: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                weakDependency_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              while (input.getBytesUntilLimit() > 0) {
                weakDependency_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          dependency_ = dependency_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          messageType_ = java.util.Collections.unmodifiableList(messageType_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          enumType_ = java.util.Collections.unmodifiableList(enumType_);
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          service_ = java.util.Collections.unmodifiableList(service_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          extension_ = java.util.Collections.unmodifiableList(extension_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          publicDependency_ = java.util.Collections.unmodifiableList(publicDependency_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          weakDependency_ = java.util.Collections.unmodifiableList(weakDependency_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.FileDescriptorProto.class, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder.class);
    }

    public static com.google.protobuf.Parser<FileDescriptorProto> PARSER =
        new com.google.protobuf.AbstractParser<FileDescriptorProto>() {
      public FileDescriptorProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FileDescriptorProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<FileDescriptorProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * file name, relative to root of source tree
     * </pre>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * file name, relative to root of source tree
     * </pre>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     *
     * <pre>
     * file name, relative to root of source tree
     * </pre>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PACKAGE_FIELD_NUMBER = 2;
    private java.lang.Object package_;
    /**
     * <code>optional string package = 2;</code>
     *
     * <pre>
     * e.g. "foo", "foo.bar", etc.
     * </pre>
     */
    public boolean hasPackage() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string package = 2;</code>
     *
     * <pre>
     * e.g. "foo", "foo.bar", etc.
     * </pre>
     */
    public java.lang.String getPackage() {
      java.lang.Object ref = package_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          package_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string package = 2;</code>
     *
     * <pre>
     * e.g. "foo", "foo.bar", etc.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getPackageBytes() {
      java.lang.Object ref = package_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        package_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEPENDENCY_FIELD_NUMBER = 3;
    private com.google.protobuf.LazyStringList dependency_;
    /**
     * <code>repeated string dependency = 3;</code>
     *
     * <pre>
     * Names of files imported by this file.
     * </pre>
     */
    public com.google.protobuf.ProtocolStringList
        getDependencyList() {
      return dependency_;
    }
    /**
     * <code>repeated string dependency = 3;</code>
     *
     * <pre>
     * Names of files imported by this file.
     * </pre>
     */
    public int getDependencyCount() {
      return dependency_.size();
    }
    /**
     * <code>repeated string dependency = 3;</code>
     *
     * <pre>
     * Names of files imported by this file.
     * </pre>
     */
    public java.lang.String getDependency(int index) {
      return dependency_.get(index);
    }
    /**
     * <code>repeated string dependency = 3;</code>
     *
     * <pre>
     * Names of files imported by this file.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getDependencyBytes(int index) {
      return dependency_.getByteString(index);
    }

    public static final int PUBLIC_DEPENDENCY_FIELD_NUMBER = 10;
    private java.util.List<java.lang.Integer> publicDependency_;
    /**
     * <code>repeated int32 public_dependency = 10;</code>
     *
     * <pre>
     * Indexes of the public imported files in the dependency list above.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getPublicDependencyList() {
      return publicDependency_;
    }
    /**
     * <code>repeated int32 public_dependency = 10;</code>
     *
     * <pre>
     * Indexes of the public imported files in the dependency list above.
     * </pre>
     */
    public int getPublicDependencyCount() {
      return publicDependency_.size();
    }
    /**
     * <code>repeated int32 public_dependency = 10;</code>
     *
     * <pre>
     * Indexes of the public imported files in the dependency list above.
     * </pre>
     */
    public int getPublicDependency(int index) {
      return publicDependency_.get(index);
    }

    public static final int WEAK_DEPENDENCY_FIELD_NUMBER = 11;
    private java.util.List<java.lang.Integer> weakDependency_;
    /**
     * <code>repeated int32 weak_dependency = 11;</code>
     *
     * <pre>
     * Indexes of the weak imported files in the dependency list.
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    public java.util.List<java.lang.Integer>
        getWeakDependencyList() {
      return weakDependency_;
    }
    /**
     * <code>repeated int32 weak_dependency = 11;</code>
     *
     * <pre>
     * Indexes of the weak imported files in the dependency list.
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    public int getWeakDependencyCount() {
      return weakDependency_.size();
    }
    /**
     * <code>repeated int32 weak_dependency = 11;</code>
     *
     * <pre>
     * Indexes of the weak imported files in the dependency list.
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    public int getWeakDependency(int index) {
      return weakDependency_.get(index);
    }

    public static final int MESSAGE_TYPE_FIELD_NUMBER = 4;
    private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> messageType_;
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getMessageTypeList() {
      return messageType_;
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
        getMessageTypeOrBuilderList() {
      return messageType_;
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    public int getMessageTypeCount() {
      return messageType_.size();
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) {
      return messageType_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
     *
     * <pre>
     * All top-level definitions in this file.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
        int index) {
      return messageType_.get(index);
    }

    public static final int ENUM_TYPE_FIELD_NUMBER = 5;
    private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_;
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
      return enumType_;
    }
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
        getEnumTypeOrBuilderList() {
      return enumType_;
    }
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    public int getEnumTypeCount() {
      return enumType_.size();
    }
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
      return enumType_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
        int index) {
      return enumType_.get(index);
    }

    public static final int SERVICE_FIELD_NUMBER = 6;
    private java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> service_;
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> getServiceList() {
      return service_;
    }
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
        getServiceOrBuilderList() {
      return service_;
    }
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    public int getServiceCount() {
      return service_.size();
    }
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) {
      return service_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
     */
    public com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
        int index) {
      return service_.get(index);
    }

    public static final int EXTENSION_FIELD_NUMBER = 7;
    private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_;
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
      return extension_;
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
        getExtensionOrBuilderList() {
      return extension_;
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    public int getExtensionCount() {
      return extension_.size();
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
      return extension_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
        int index) {
      return extension_.get(index);
    }

    public static final int OPTIONS_FIELD_NUMBER = 8;
    private com.google.protobuf.DescriptorProtos.FileOptions options_;
    /**
     * <code>optional .google.protobuf.FileOptions options = 8;</code>
     */
    public boolean hasOptions() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .google.protobuf.FileOptions options = 8;</code>
     */
    public com.google.protobuf.DescriptorProtos.FileOptions getOptions() {
      return options_;
    }
    /**
     * <code>optional .google.protobuf.FileOptions options = 8;</code>
     */
    public com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() {
      return options_;
    }

    public static final int SOURCE_CODE_INFO_FIELD_NUMBER = 9;
    private com.google.protobuf.DescriptorProtos.SourceCodeInfo sourceCodeInfo_;
    /**
     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
     *
     * <pre>
     * This field contains optional information about the original source code.
     * You may safely remove this entire field whithout harming runtime
     * functionality of the descriptors -- the information is needed only by
     * development tools.
     * </pre>
     */
    public boolean hasSourceCodeInfo() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
     *
     * <pre>
     * This field contains optional information about the original source code.
     * You may safely remove this entire field whithout harming runtime
     * functionality of the descriptors -- the information is needed only by
     * development tools.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() {
      return sourceCodeInfo_;
    }
    /**
     * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
     *
     * <pre>
     * This field contains optional information about the original source code.
     * You may safely remove this entire field whithout harming runtime
     * functionality of the descriptors -- the information is needed only by
     * development tools.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
      return sourceCodeInfo_;
    }

    private void initFields() {
      name_ = "";
      package_ = "";
      dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      publicDependency_ = java.util.Collections.emptyList();
      weakDependency_ = java.util.Collections.emptyList();
      messageType_ = java.util.Collections.emptyList();
      enumType_ = java.util.Collections.emptyList();
      service_ = java.util.Collections.emptyList();
      extension_ = java.util.Collections.emptyList();
      options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
      sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getMessageTypeCount(); i++) {
        if (!getMessageType(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getEnumTypeCount(); i++) {
        if (!getEnumType(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getServiceCount(); i++) {
        if (!getService(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getExtensionCount(); i++) {
        if (!getExtension(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasOptions()) {
        if (!getOptions().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getPackageBytes());
      }
      for (int i = 0; i < dependency_.size(); i++) {
        output.writeBytes(3, dependency_.getByteString(i));
      }
      for (int i = 0; i < messageType_.size(); i++) {
        output.writeMessage(4, messageType_.get(i));
      }
      for (int i = 0; i < enumType_.size(); i++) {
        output.writeMessage(5, enumType_.get(i));
      }
      for (int i = 0; i < service_.size(); i++) {
        output.writeMessage(6, service_.get(i));
      }
      for (int i = 0; i < extension_.size(); i++) {
        output.writeMessage(7, extension_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(8, options_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(9, sourceCodeInfo_);
      }
      for (int i = 0; i < publicDependency_.size(); i++) {
        output.writeInt32(10, publicDependency_.get(i));
      }
      for (int i = 0; i < weakDependency_.size(); i++) {
        output.writeInt32(11, weakDependency_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getPackageBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < dependency_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(dependency_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getDependencyList().size();
      }
      for (int i = 0; i < messageType_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, messageType_.get(i));
      }
      for (int i = 0; i < enumType_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, enumType_.get(i));
      }
      for (int i = 0; i < service_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, service_.get(i));
      }
      for (int i = 0; i < extension_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, extension_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, options_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, sourceCodeInfo_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < publicDependency_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(publicDependency_.get(i));
        }
        size += dataSize;
        size += 1 * getPublicDependencyList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < weakDependency_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(weakDependency_.get(i));
        }
        size += dataSize;
        size += 1 * getWeakDependencyList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileDescriptorProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.FileDescriptorProto}
     *
     * <pre>
     * Describes a complete .proto file.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.FileDescriptorProto)
        com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.FileDescriptorProto.class, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getMessageTypeFieldBuilder();
          getEnumTypeFieldBuilder();
          getServiceFieldBuilder();
          getExtensionFieldBuilder();
          getOptionsFieldBuilder();
          getSourceCodeInfoFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        package_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        publicDependency_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        weakDependency_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        if (messageTypeBuilder_ == null) {
          messageType_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          messageTypeBuilder_.clear();
        }
        if (enumTypeBuilder_ == null) {
          enumType_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          enumTypeBuilder_.clear();
        }
        if (serviceBuilder_ == null) {
          service_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          serviceBuilder_.clear();
        }
        if (extensionBuilder_ == null) {
          extension_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          extensionBuilder_.clear();
        }
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (sourceCodeInfoBuilder_ == null) {
          sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
        } else {
          sourceCodeInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.FileDescriptorProto getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.FileDescriptorProto build() {
        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.FileDescriptorProto buildPartial() {
        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = new com.google.protobuf.DescriptorProtos.FileDescriptorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.package_ = package_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          dependency_ = dependency_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.dependency_ = dependency_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          publicDependency_ = java.util.Collections.unmodifiableList(publicDependency_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.publicDependency_ = publicDependency_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          weakDependency_ = java.util.Collections.unmodifiableList(weakDependency_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.weakDependency_ = weakDependency_;
        if (messageTypeBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            messageType_ = java.util.Collections.unmodifiableList(messageType_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.messageType_ = messageType_;
        } else {
          result.messageType_ = messageTypeBuilder_.build();
        }
        if (enumTypeBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            enumType_ = java.util.Collections.unmodifiableList(enumType_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.enumType_ = enumType_;
        } else {
          result.enumType_ = enumTypeBuilder_.build();
        }
        if (serviceBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            service_ = java.util.Collections.unmodifiableList(service_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.service_ = service_;
        } else {
          result.service_ = serviceBuilder_.build();
        }
        if (extensionBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            extension_ = java.util.Collections.unmodifiableList(extension_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.extension_ = extension_;
        } else {
          result.extension_ = extensionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000004;
        }
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000008;
        }
        if (sourceCodeInfoBuilder_ == null) {
          result.sourceCodeInfo_ = sourceCodeInfo_;
        } else {
          result.sourceCodeInfo_ = sourceCodeInfoBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorProto) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.FileDescriptorProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorProto other) {
        if (other == com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasPackage()) {
          bitField0_ |= 0x00000002;
          package_ = other.package_;
          onChanged();
        }
        if (!other.dependency_.isEmpty()) {
          if (dependency_.isEmpty()) {
            dependency_ = other.dependency_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureDependencyIsMutable();
            dependency_.addAll(other.dependency_);
          }
          onChanged();
        }
        if (!other.publicDependency_.isEmpty()) {
          if (publicDependency_.isEmpty()) {
            publicDependency_ = other.publicDependency_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensurePublicDependencyIsMutable();
            publicDependency_.addAll(other.publicDependency_);
          }
          onChanged();
        }
        if (!other.weakDependency_.isEmpty()) {
          if (weakDependency_.isEmpty()) {
            weakDependency_ = other.weakDependency_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureWeakDependencyIsMutable();
            weakDependency_.addAll(other.weakDependency_);
          }
          onChanged();
        }
        if (messageTypeBuilder_ == null) {
          if (!other.messageType_.isEmpty()) {
            if (messageType_.isEmpty()) {
              messageType_ = other.messageType_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureMessageTypeIsMutable();
              messageType_.addAll(other.messageType_);
            }
            onChanged();
          }
        } else {
          if (!other.messageType_.isEmpty()) {
            if (messageTypeBuilder_.isEmpty()) {
              messageTypeBuilder_.dispose();
              messageTypeBuilder_ = null;
              messageType_ = other.messageType_;
              bitField0_ = (bitField0_ & ~0x00000020);
              messageTypeBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getMessageTypeFieldBuilder() : null;
            } else {
              messageTypeBuilder_.addAllMessages(other.messageType_);
            }
          }
        }
        if (enumTypeBuilder_ == null) {
          if (!other.enumType_.isEmpty()) {
            if (enumType_.isEmpty()) {
              enumType_ = other.enumType_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureEnumTypeIsMutable();
              enumType_.addAll(other.enumType_);
            }
            onChanged();
          }
        } else {
          if (!other.enumType_.isEmpty()) {
            if (enumTypeBuilder_.isEmpty()) {
              enumTypeBuilder_.dispose();
              enumTypeBuilder_ = null;
              enumType_ = other.enumType_;
              bitField0_ = (bitField0_ & ~0x00000040);
              enumTypeBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getEnumTypeFieldBuilder() : null;
            } else {
              enumTypeBuilder_.addAllMessages(other.enumType_);
            }
          }
        }
        if (serviceBuilder_ == null) {
          if (!other.service_.isEmpty()) {
            if (service_.isEmpty()) {
              service_ = other.service_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureServiceIsMutable();
              service_.addAll(other.service_);
            }
            onChanged();
          }
        } else {
          if (!other.service_.isEmpty()) {
            if (serviceBuilder_.isEmpty()) {
              serviceBuilder_.dispose();
              serviceBuilder_ = null;
              service_ = other.service_;
              bitField0_ = (bitField0_ & ~0x00000080);
              serviceBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getServiceFieldBuilder() : null;
            } else {
              serviceBuilder_.addAllMessages(other.service_);
            }
          }
        }
        if (extensionBuilder_ == null) {
          if (!other.extension_.isEmpty()) {
            if (extension_.isEmpty()) {
              extension_ = other.extension_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureExtensionIsMutable();
              extension_.addAll(other.extension_);
            }
            onChanged();
          }
        } else {
          if (!other.extension_.isEmpty()) {
            if (extensionBuilder_.isEmpty()) {
              extensionBuilder_.dispose();
              extensionBuilder_ = null;
              extension_ = other.extension_;
              bitField0_ = (bitField0_ & ~0x00000100);
              extensionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getExtensionFieldBuilder() : null;
            } else {
              extensionBuilder_.addAllMessages(other.extension_);
            }
          }
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        if (other.hasSourceCodeInfo()) {
          mergeSourceCodeInfo(other.getSourceCodeInfo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getMessageTypeCount(); i++) {
          if (!getMessageType(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getEnumTypeCount(); i++) {
          if (!getEnumType(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getServiceCount(); i++) {
          if (!getService(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getExtensionCount(); i++) {
          if (!getExtension(i).isInitialized()) {
            
            return false;
          }
        }
        if (hasOptions()) {
          if (!getOptions().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.FileDescriptorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.FileDescriptorProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * file name, relative to root of source tree
       * </pre>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * file name, relative to root of source tree
       * </pre>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * file name, relative to root of source tree
       * </pre>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * file name, relative to root of source tree
       * </pre>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * file name, relative to root of source tree
       * </pre>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       *
       * <pre>
       * file name, relative to root of source tree
       * </pre>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object package_ = "";
      /**
       * <code>optional string package = 2;</code>
       *
       * <pre>
       * e.g. "foo", "foo.bar", etc.
       * </pre>
       */
      public boolean hasPackage() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string package = 2;</code>
       *
       * <pre>
       * e.g. "foo", "foo.bar", etc.
       * </pre>
       */
      public java.lang.String getPackage() {
        java.lang.Object ref = package_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            package_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string package = 2;</code>
       *
       * <pre>
       * e.g. "foo", "foo.bar", etc.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getPackageBytes() {
        java.lang.Object ref = package_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          package_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string package = 2;</code>
       *
       * <pre>
       * e.g. "foo", "foo.bar", etc.
       * </pre>
       */
      public Builder setPackage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        package_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string package = 2;</code>
       *
       * <pre>
       * e.g. "foo", "foo.bar", etc.
       * </pre>
       */
      public Builder clearPackage() {
        bitField0_ = (bitField0_ & ~0x00000002);
        package_ = getDefaultInstance().getPackage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string package = 2;</code>
       *
       * <pre>
       * e.g. "foo", "foo.bar", etc.
       * </pre>
       */
      public Builder setPackageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        package_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDependencyIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          dependency_ = new com.google.protobuf.LazyStringArrayList(dependency_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public com.google.protobuf.ProtocolStringList
          getDependencyList() {
        return dependency_.getUnmodifiableView();
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public int getDependencyCount() {
        return dependency_.size();
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public java.lang.String getDependency(int index) {
        return dependency_.get(index);
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getDependencyBytes(int index) {
        return dependency_.getByteString(index);
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public Builder setDependency(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDependencyIsMutable();
        dependency_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public Builder addDependency(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDependencyIsMutable();
        dependency_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public Builder addAllDependency(
          java.lang.Iterable<java.lang.String> values) {
        ensureDependencyIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, dependency_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public Builder clearDependency() {
        dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string dependency = 3;</code>
       *
       * <pre>
       * Names of files imported by this file.
       * </pre>
       */
      public Builder addDependencyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDependencyIsMutable();
        dependency_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Integer> publicDependency_ = java.util.Collections.emptyList();
      private void ensurePublicDependencyIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          publicDependency_ = new java.util.ArrayList<>(publicDependency_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated int32 public_dependency = 10;</code>
       *
       * <pre>
       * Indexes of the public imported files in the dependency list above.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getPublicDependencyList() {
        return java.util.Collections.unmodifiableList(publicDependency_);
      }
      /**
       * <code>repeated int32 public_dependency = 10;</code>
       *
       * <pre>
       * Indexes of the public imported files in the dependency list above.
       * </pre>
       */
      public int getPublicDependencyCount() {
        return publicDependency_.size();
      }
      /**
       * <code>repeated int32 public_dependency = 10;</code>
       *
       * <pre>
       * Indexes of the public imported files in the dependency list above.
       * </pre>
       */
      public int getPublicDependency(int index) {
        return publicDependency_.get(index);
      }
      /**
       * <code>repeated int32 public_dependency = 10;</code>
       *
       * <pre>
       * Indexes of the public imported files in the dependency list above.
       * </pre>
       */
      public Builder setPublicDependency(
          int index, int value) {
        ensurePublicDependencyIsMutable();
        publicDependency_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 public_dependency = 10;</code>
       *
       * <pre>
       * Indexes of the public imported files in the dependency list above.
       * </pre>
       */
      public Builder addPublicDependency(int value) {
        ensurePublicDependencyIsMutable();
        publicDependency_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 public_dependency = 10;</code>
       *
       * <pre>
       * Indexes of the public imported files in the dependency list above.
       * </pre>
       */
      public Builder addAllPublicDependency(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensurePublicDependencyIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, publicDependency_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 public_dependency = 10;</code>
       *
       * <pre>
       * Indexes of the public imported files in the dependency list above.
       * </pre>
       */
      public Builder clearPublicDependency() {
        publicDependency_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Integer> weakDependency_ = java.util.Collections.emptyList();
      private void ensureWeakDependencyIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          weakDependency_ = new java.util.ArrayList<>(weakDependency_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated int32 weak_dependency = 11;</code>
       *
       * <pre>
       * Indexes of the weak imported files in the dependency list.
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getWeakDependencyList() {
        return java.util.Collections.unmodifiableList(weakDependency_);
      }
      /**
       * <code>repeated int32 weak_dependency = 11;</code>
       *
       * <pre>
       * Indexes of the weak imported files in the dependency list.
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public int getWeakDependencyCount() {
        return weakDependency_.size();
      }
      /**
       * <code>repeated int32 weak_dependency = 11;</code>
       *
       * <pre>
       * Indexes of the weak imported files in the dependency list.
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public int getWeakDependency(int index) {
        return weakDependency_.get(index);
      }
      /**
       * <code>repeated int32 weak_dependency = 11;</code>
       *
       * <pre>
       * Indexes of the weak imported files in the dependency list.
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public Builder setWeakDependency(
          int index, int value) {
        ensureWeakDependencyIsMutable();
        weakDependency_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 weak_dependency = 11;</code>
       *
       * <pre>
       * Indexes of the weak imported files in the dependency list.
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public Builder addWeakDependency(int value) {
        ensureWeakDependencyIsMutable();
        weakDependency_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 weak_dependency = 11;</code>
       *
       * <pre>
       * Indexes of the weak imported files in the dependency list.
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public Builder addAllWeakDependency(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureWeakDependencyIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, weakDependency_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 weak_dependency = 11;</code>
       *
       * <pre>
       * Indexes of the weak imported files in the dependency list.
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public Builder clearWeakDependency() {
        weakDependency_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> messageType_ =
        java.util.Collections.emptyList();
      private void ensureMessageTypeIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          messageType_ = new java.util.ArrayList<>(messageType_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> messageTypeBuilder_;

      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getMessageTypeList() {
        if (messageTypeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(messageType_);
        } else {
          return messageTypeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public int getMessageTypeCount() {
        if (messageTypeBuilder_ == null) {
          return messageType_.size();
        } else {
          return messageTypeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) {
        if (messageTypeBuilder_ == null) {
          return messageType_.get(index);
        } else {
          return messageTypeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder setMessageType(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
        if (messageTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMessageTypeIsMutable();
          messageType_.set(index, value);
          onChanged();
        } else {
          messageTypeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder setMessageType(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
        if (messageTypeBuilder_ == null) {
          ensureMessageTypeIsMutable();
          messageType_.set(index, builderForValue.build());
          onChanged();
        } else {
          messageTypeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder addMessageType(com.google.protobuf.DescriptorProtos.DescriptorProto value) {
        if (messageTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMessageTypeIsMutable();
          messageType_.add(value);
          onChanged();
        } else {
          messageTypeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder addMessageType(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
        if (messageTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMessageTypeIsMutable();
          messageType_.add(index, value);
          onChanged();
        } else {
          messageTypeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder addMessageType(
          com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
        if (messageTypeBuilder_ == null) {
          ensureMessageTypeIsMutable();
          messageType_.add(builderForValue.build());
          onChanged();
        } else {
          messageTypeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder addMessageType(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
        if (messageTypeBuilder_ == null) {
          ensureMessageTypeIsMutable();
          messageType_.add(index, builderForValue.build());
          onChanged();
        } else {
          messageTypeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder addAllMessageType(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto> values) {
        if (messageTypeBuilder_ == null) {
          ensureMessageTypeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, messageType_);
          onChanged();
        } else {
          messageTypeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder clearMessageType() {
        if (messageTypeBuilder_ == null) {
          messageType_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          messageTypeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public Builder removeMessageType(int index) {
        if (messageTypeBuilder_ == null) {
          ensureMessageTypeIsMutable();
          messageType_.remove(index);
          onChanged();
        } else {
          messageTypeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder getMessageTypeBuilder(
          int index) {
        return getMessageTypeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
          int index) {
        if (messageTypeBuilder_ == null) {
          return messageType_.get(index);  } else {
          return messageTypeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
           getMessageTypeOrBuilderList() {
        if (messageTypeBuilder_ != null) {
          return messageTypeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(messageType_);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addMessageTypeBuilder() {
        return getMessageTypeFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addMessageTypeBuilder(
          int index) {
        return getMessageTypeFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto message_type = 4;</code>
       *
       * <pre>
       * All top-level definitions in this file.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.Builder> 
           getMessageTypeBuilderList() {
        return getMessageTypeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
          getMessageTypeFieldBuilder() {
        if (messageTypeBuilder_ == null) {
          messageTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  messageType_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          messageType_ = null;
        }
        return messageTypeBuilder_;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_ =
        java.util.Collections.emptyList();
      private void ensureEnumTypeIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          enumType_ = new java.util.ArrayList<>(enumType_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> enumTypeBuilder_;

      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
        if (enumTypeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(enumType_);
        } else {
          return enumTypeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public int getEnumTypeCount() {
        if (enumTypeBuilder_ == null) {
          return enumType_.size();
        } else {
          return enumTypeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
        if (enumTypeBuilder_ == null) {
          return enumType_.get(index);
        } else {
          return enumTypeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder setEnumType(
          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
        if (enumTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnumTypeIsMutable();
          enumType_.set(index, value);
          onChanged();
        } else {
          enumTypeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder setEnumType(
          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          enumType_.set(index, builderForValue.build());
          onChanged();
        } else {
          enumTypeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
        if (enumTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnumTypeIsMutable();
          enumType_.add(value);
          onChanged();
        } else {
          enumTypeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder addEnumType(
          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
        if (enumTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnumTypeIsMutable();
          enumType_.add(index, value);
          onChanged();
        } else {
          enumTypeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder addEnumType(
          com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          enumType_.add(builderForValue.build());
          onChanged();
        } else {
          enumTypeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder addEnumType(
          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          enumType_.add(index, builderForValue.build());
          onChanged();
        } else {
          enumTypeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder addAllEnumType(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProto> values) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, enumType_);
          onChanged();
        } else {
          enumTypeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder clearEnumType() {
        if (enumTypeBuilder_ == null) {
          enumType_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          enumTypeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public Builder removeEnumType(int index) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          enumType_.remove(index);
          onChanged();
        } else {
          enumTypeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder getEnumTypeBuilder(
          int index) {
        return getEnumTypeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
          int index) {
        if (enumTypeBuilder_ == null) {
          return enumType_.get(index);  } else {
          return enumTypeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
           getEnumTypeOrBuilderList() {
        if (enumTypeBuilder_ != null) {
          return enumTypeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(enumType_);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder() {
        return getEnumTypeFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder(
          int index) {
        return getEnumTypeFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 5;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder> 
           getEnumTypeBuilderList() {
        return getEnumTypeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
          getEnumTypeFieldBuilder() {
        if (enumTypeBuilder_ == null) {
          enumTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  enumType_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          enumType_ = null;
        }
        return enumTypeBuilder_;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> service_ =
        java.util.Collections.emptyList();
      private void ensureServiceIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          service_ = new java.util.ArrayList<>(service_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.ServiceDescriptorProto, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> serviceBuilder_;

      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> getServiceList() {
        if (serviceBuilder_ == null) {
          return java.util.Collections.unmodifiableList(service_);
        } else {
          return serviceBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public int getServiceCount() {
        if (serviceBuilder_ == null) {
          return service_.size();
        } else {
          return serviceBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) {
        if (serviceBuilder_ == null) {
          return service_.get(index);
        } else {
          return serviceBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder setService(
          int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
        if (serviceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureServiceIsMutable();
          service_.set(index, value);
          onChanged();
        } else {
          serviceBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder setService(
          int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
        if (serviceBuilder_ == null) {
          ensureServiceIsMutable();
          service_.set(index, builderForValue.build());
          onChanged();
        } else {
          serviceBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder addService(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
        if (serviceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureServiceIsMutable();
          service_.add(value);
          onChanged();
        } else {
          serviceBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder addService(
          int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
        if (serviceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureServiceIsMutable();
          service_.add(index, value);
          onChanged();
        } else {
          serviceBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder addService(
          com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
        if (serviceBuilder_ == null) {
          ensureServiceIsMutable();
          service_.add(builderForValue.build());
          onChanged();
        } else {
          serviceBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder addService(
          int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
        if (serviceBuilder_ == null) {
          ensureServiceIsMutable();
          service_.add(index, builderForValue.build());
          onChanged();
        } else {
          serviceBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder addAllService(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> values) {
        if (serviceBuilder_ == null) {
          ensureServiceIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, service_);
          onChanged();
        } else {
          serviceBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder clearService() {
        if (serviceBuilder_ == null) {
          service_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          serviceBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public Builder removeService(int index) {
        if (serviceBuilder_ == null) {
          ensureServiceIsMutable();
          service_.remove(index);
          onChanged();
        } else {
          serviceBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder getServiceBuilder(
          int index) {
        return getServiceFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
          int index) {
        if (serviceBuilder_ == null) {
          return service_.get(index);  } else {
          return serviceBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
           getServiceOrBuilderList() {
        if (serviceBuilder_ != null) {
          return serviceBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(service_);
        }
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder addServiceBuilder() {
        return getServiceFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder addServiceBuilder(
          int index) {
        return getServiceFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.ServiceDescriptorProto service = 6;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder> 
           getServiceBuilderList() {
        return getServiceFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.ServiceDescriptorProto, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
          getServiceFieldBuilder() {
        if (serviceBuilder_ == null) {
          serviceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  service_,
                  ((bitField0_ & 0x00000080) == 0x00000080),
                  getParentForChildren(),
                  isClean());
          service_ = null;
        }
        return serviceBuilder_;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_ =
        java.util.Collections.emptyList();
      private void ensureExtensionIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          extension_ = new java.util.ArrayList<>(extension_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> extensionBuilder_;

      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
        if (extensionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(extension_);
        } else {
          return extensionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public int getExtensionCount() {
        if (extensionBuilder_ == null) {
          return extension_.size();
        } else {
          return extensionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
        if (extensionBuilder_ == null) {
          return extension_.get(index);
        } else {
          return extensionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder setExtension(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.set(index, value);
          onChanged();
        } else {
          extensionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder setExtension(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.set(index, builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.add(value);
          onChanged();
        } else {
          extensionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder addExtension(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.add(index, value);
          onChanged();
        } else {
          extensionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder addExtension(
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.add(builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder addExtension(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.add(index, builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder addAllExtension(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, extension_);
          onChanged();
        } else {
          extensionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder clearExtension() {
        if (extensionBuilder_ == null) {
          extension_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          extensionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public Builder removeExtension(int index) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.remove(index);
          onChanged();
        } else {
          extensionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getExtensionBuilder(
          int index) {
        return getExtensionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
          int index) {
        if (extensionBuilder_ == null) {
          return extension_.get(index);  } else {
          return extensionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
           getExtensionOrBuilderList() {
        if (extensionBuilder_ != null) {
          return extensionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(extension_);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder() {
        return getExtensionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder(
          int index) {
        return getExtensionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 7;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
           getExtensionBuilderList() {
        return getExtensionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
          getExtensionFieldBuilder() {
        if (extensionBuilder_ == null) {
          extensionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  extension_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          extension_ = null;
        }
        return extensionBuilder_;
      }

      private com.google.protobuf.DescriptorProtos.FileOptions options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions.Builder, com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      public boolean hasOptions() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.FileOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      public Builder setOptions(com.google.protobuf.DescriptorProtos.FileOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      public Builder setOptions(
          com.google.protobuf.DescriptorProtos.FileOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.FileOptions value) {
        if (optionsBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              options_ != com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance()) {
            options_ =
              com.google.protobuf.DescriptorProtos.FileOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
          onChanged();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.FileOptions.Builder getOptionsBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_;
        }
      }
      /**
       * <code>optional .google.protobuf.FileOptions options = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions.Builder, com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }

      private com.google.protobuf.DescriptorProtos.SourceCodeInfo sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.SourceCodeInfo, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder> sourceCodeInfoBuilder_;
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      public boolean hasSourceCodeInfo() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() {
        if (sourceCodeInfoBuilder_ == null) {
          return sourceCodeInfo_;
        } else {
          return sourceCodeInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      public Builder setSourceCodeInfo(com.google.protobuf.DescriptorProtos.SourceCodeInfo value) {
        if (sourceCodeInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sourceCodeInfo_ = value;
          onChanged();
        } else {
          sourceCodeInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      public Builder setSourceCodeInfo(
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder builderForValue) {
        if (sourceCodeInfoBuilder_ == null) {
          sourceCodeInfo_ = builderForValue.build();
          onChanged();
        } else {
          sourceCodeInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      public Builder mergeSourceCodeInfo(com.google.protobuf.DescriptorProtos.SourceCodeInfo value) {
        if (sourceCodeInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              sourceCodeInfo_ != com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance()) {
            sourceCodeInfo_ =
              com.google.protobuf.DescriptorProtos.SourceCodeInfo.newBuilder(sourceCodeInfo_).mergeFrom(value).buildPartial();
          } else {
            sourceCodeInfo_ = value;
          }
          onChanged();
        } else {
          sourceCodeInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      public Builder clearSourceCodeInfo() {
        if (sourceCodeInfoBuilder_ == null) {
          sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
          onChanged();
        } else {
          sourceCodeInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder getSourceCodeInfoBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getSourceCodeInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
        if (sourceCodeInfoBuilder_ != null) {
          return sourceCodeInfoBuilder_.getMessageOrBuilder();
        } else {
          return sourceCodeInfo_;
        }
      }
      /**
       * <code>optional .google.protobuf.SourceCodeInfo source_code_info = 9;</code>
       *
       * <pre>
       * This field contains optional information about the original source code.
       * You may safely remove this entire field whithout harming runtime
       * functionality of the descriptors -- the information is needed only by
       * development tools.
       * </pre>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.SourceCodeInfo, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder> 
          getSourceCodeInfoFieldBuilder() {
        if (sourceCodeInfoBuilder_ == null) {
          sourceCodeInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<>(
                  getSourceCodeInfo(),
                  getParentForChildren(),
                  isClean());
          sourceCodeInfo_ = null;
        }
        return sourceCodeInfoBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorProto)
    }

    static {
      defaultInstance = new FileDescriptorProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto)
  }

  public interface DescriptorProtoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.DescriptorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
        getFieldList();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index);
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    int getFieldCount();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
        getFieldOrBuilderList();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
        getExtensionList();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index);
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    int getExtensionCount();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
        getExtensionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> 
        getNestedTypeList();
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index);
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    int getNestedTypeCount();
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
        getNestedTypeOrBuilderList();
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> 
        getEnumTypeList();
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index);
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    int getEnumTypeCount();
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
        getEnumTypeOrBuilderList();
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> 
        getExtensionRangeList();
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index);
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    int getExtensionRangeCount();
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
        getExtensionRangeOrBuilderList();
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
        int index);

    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.OneofDescriptorProto> 
        getOneofDeclList();
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    com.google.protobuf.DescriptorProtos.OneofDescriptorProto getOneofDecl(int index);
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    int getOneofDeclCount();
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder> 
        getOneofDeclOrBuilderList();
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder(
        int index);

    /**
     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
     */
    boolean hasOptions();
    /**
     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
     */
    com.google.protobuf.DescriptorProtos.MessageOptions getOptions();
    /**
     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
     */
    com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code google.protobuf.DescriptorProto}
   *
   * <pre>
   * Describes a message type.
   * </pre>
   */
  public static final class DescriptorProto extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.DescriptorProto)
      DescriptorProtoOrBuilder {
    // Use DescriptorProto.newBuilder() to construct.
    private DescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DescriptorProto defaultInstance;
    public static DescriptorProto getDefaultInstance() {
      return defaultInstance;
    }

    public DescriptorProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DescriptorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                field_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              field_.add(input.readMessage(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                nestedType_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              nestedType_.add(input.readMessage(com.google.protobuf.DescriptorProtos.DescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                enumType_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000010;
              }
              enumType_.add(input.readMessage(com.google.protobuf.DescriptorProtos.EnumDescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                extensionRange_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000020;
              }
              extensionRange_.add(input.readMessage(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.PARSER, extensionRegistry));
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                extension_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              extension_.add(input.readMessage(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 58: {
              com.google.protobuf.DescriptorProtos.MessageOptions.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.MessageOptions.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 66: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                oneofDecl_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000040;
              }
              oneofDecl_.add(input.readMessage(com.google.protobuf.DescriptorProtos.OneofDescriptorProto.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          field_ = java.util.Collections.unmodifiableList(field_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          nestedType_ = java.util.Collections.unmodifiableList(nestedType_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          enumType_ = java.util.Collections.unmodifiableList(enumType_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          extensionRange_ = java.util.Collections.unmodifiableList(extensionRange_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          extension_ = java.util.Collections.unmodifiableList(extension_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          oneofDecl_ = java.util.Collections.unmodifiableList(oneofDecl_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.DescriptorProto.class, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder.class);
    }

    public static com.google.protobuf.Parser<DescriptorProto> PARSER =
        new com.google.protobuf.AbstractParser<DescriptorProto>() {
      public DescriptorProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DescriptorProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DescriptorProto> getParserForType() {
      return PARSER;
    }

    public interface ExtensionRangeOrBuilder extends
        // @@protoc_insertion_point(interface_extends:google.protobuf.DescriptorProto.ExtensionRange)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>optional int32 start = 1;</code>
       */
      boolean hasStart();
      /**
       * <code>optional int32 start = 1;</code>
       */
      int getStart();

      /**
       * <code>optional int32 end = 2;</code>
       */
      boolean hasEnd();
      /**
       * <code>optional int32 end = 2;</code>
       */
      int getEnd();
    }
    /**
     * Protobuf type {@code google.protobuf.DescriptorProto.ExtensionRange}
     */
    public static final class ExtensionRange extends
        com.google.protobuf.GeneratedMessage implements
        // @@protoc_insertion_point(message_implements:google.protobuf.DescriptorProto.ExtensionRange)
        ExtensionRangeOrBuilder {
      // Use ExtensionRange.newBuilder() to construct.
      private ExtensionRange(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private ExtensionRange(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final ExtensionRange defaultInstance;
      public static ExtensionRange getDefaultInstance() {
        return defaultInstance;
      }

      public ExtensionRange getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private ExtensionRange(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
                bitField0_ |= 0x00000001;
                start_ = input.readInt32();
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                end_ = input.readInt32();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.class, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder.class);
      }

      public static com.google.protobuf.Parser<ExtensionRange> PARSER =
          new com.google.protobuf.AbstractParser<ExtensionRange>() {
        public ExtensionRange parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new ExtensionRange(input, extensionRegistry);
        }
      };

      @java.lang.Override
      public com.google.protobuf.Parser<ExtensionRange> getParserForType() {
        return PARSER;
      }

      private int bitField0_;
      public static final int START_FIELD_NUMBER = 1;
      private int start_;
      /**
       * <code>optional int32 start = 1;</code>
       */
      public boolean hasStart() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 start = 1;</code>
       */
      public int getStart() {
        return start_;
      }

      public static final int END_FIELD_NUMBER = 2;
      private int end_;
      /**
       * <code>optional int32 end = 2;</code>
       */
      public boolean hasEnd() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 end = 2;</code>
       */
      public int getEnd() {
        return end_;
      }

      private void initFields() {
        start_ = 0;
        end_ = 0;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeInt32(1, start_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeInt32(2, end_);
        }
        getUnknownFields().writeTo(output);
      }

      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, start_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, end_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code google.protobuf.DescriptorProto.ExtensionRange}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:google.protobuf.DescriptorProto.ExtensionRange)
          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.class, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder.class);
        }

        // Construct using com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          start_ = 0;
          bitField0_ = (bitField0_ & ~0x00000001);
          end_ = 0;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
        }

        public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getDefaultInstanceForType() {
          return com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance();
        }

        public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange build() {
          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange buildPartial() {
          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result = new com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.start_ = start_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.end_ = end_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange) {
            return mergeFrom((com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange other) {
          if (other == com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance()) return this;
          if (other.hasStart()) {
            setStart(other.getStart());
          }
          if (other.hasEnd()) {
            setEnd(other.getEnd());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private int start_ ;
        /**
         * <code>optional int32 start = 1;</code>
         */
        public boolean hasStart() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 start = 1;</code>
         */
        public int getStart() {
          return start_;
        }
        /**
         * <code>optional int32 start = 1;</code>
         */
        public Builder setStart(int value) {
          bitField0_ |= 0x00000001;
          start_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 start = 1;</code>
         */
        public Builder clearStart() {
          bitField0_ = (bitField0_ & ~0x00000001);
          start_ = 0;
          onChanged();
          return this;
        }

        private int end_ ;
        /**
         * <code>optional int32 end = 2;</code>
         */
        public boolean hasEnd() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 end = 2;</code>
         */
        public int getEnd() {
          return end_;
        }
        /**
         * <code>optional int32 end = 2;</code>
         */
        public Builder setEnd(int value) {
          bitField0_ |= 0x00000002;
          end_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 end = 2;</code>
         */
        public Builder clearEnd() {
          bitField0_ = (bitField0_ & ~0x00000002);
          end_ = 0;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto.ExtensionRange)
      }

      static {
        defaultInstance = new ExtensionRange(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange)
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FIELD_FIELD_NUMBER = 2;
    private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> field_;
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getFieldList() {
      return field_;
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
        getFieldOrBuilderList() {
      return field_;
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    public int getFieldCount() {
      return field_.size();
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index) {
      return field_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
        int index) {
      return field_.get(index);
    }

    public static final int EXTENSION_FIELD_NUMBER = 6;
    private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_;
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
      return extension_;
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
        getExtensionOrBuilderList() {
      return extension_;
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    public int getExtensionCount() {
      return extension_.size();
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
      return extension_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
        int index) {
      return extension_.get(index);
    }

    public static final int NESTED_TYPE_FIELD_NUMBER = 3;
    private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> nestedType_;
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getNestedTypeList() {
      return nestedType_;
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
        getNestedTypeOrBuilderList() {
      return nestedType_;
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    public int getNestedTypeCount() {
      return nestedType_.size();
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    public com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index) {
      return nestedType_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
     */
    public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
        int index) {
      return nestedType_.get(index);
    }

    public static final int ENUM_TYPE_FIELD_NUMBER = 4;
    private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_;
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
      return enumType_;
    }
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
        getEnumTypeOrBuilderList() {
      return enumType_;
    }
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    public int getEnumTypeCount() {
      return enumType_.size();
    }
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
      return enumType_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
        int index) {
      return enumType_.get(index);
    }

    public static final int EXTENSION_RANGE_FIELD_NUMBER = 5;
    private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> extensionRange_;
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> getExtensionRangeList() {
      return extensionRange_;
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
        getExtensionRangeOrBuilderList() {
      return extensionRange_;
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    public int getExtensionRangeCount() {
      return extensionRange_.size();
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) {
      return extensionRange_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
     */
    public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
        int index) {
      return extensionRange_.get(index);
    }

    public static final int ONEOF_DECL_FIELD_NUMBER = 8;
    private java.util.List<com.google.protobuf.DescriptorProtos.OneofDescriptorProto> oneofDecl_;
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.OneofDescriptorProto> getOneofDeclList() {
      return oneofDecl_;
    }
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder> 
        getOneofDeclOrBuilderList() {
      return oneofDecl_;
    }
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    public int getOneofDeclCount() {
      return oneofDecl_.size();
    }
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    public com.google.protobuf.DescriptorProtos.OneofDescriptorProto getOneofDecl(int index) {
      return oneofDecl_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
     */
    public com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder(
        int index) {
      return oneofDecl_.get(index);
    }

    public static final int OPTIONS_FIELD_NUMBER = 7;
    private com.google.protobuf.DescriptorProtos.MessageOptions options_;
    /**
     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
     */
    public boolean hasOptions() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
     */
    public com.google.protobuf.DescriptorProtos.MessageOptions getOptions() {
      return options_;
    }
    /**
     * <code>optional .google.protobuf.MessageOptions options = 7;</code>
     */
    public com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder() {
      return options_;
    }

    private void initFields() {
      name_ = "";
      field_ = java.util.Collections.emptyList();
      extension_ = java.util.Collections.emptyList();
      nestedType_ = java.util.Collections.emptyList();
      enumType_ = java.util.Collections.emptyList();
      extensionRange_ = java.util.Collections.emptyList();
      oneofDecl_ = java.util.Collections.emptyList();
      options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getFieldCount(); i++) {
        if (!getField(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getExtensionCount(); i++) {
        if (!getExtension(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getNestedTypeCount(); i++) {
        if (!getNestedType(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getEnumTypeCount(); i++) {
        if (!getEnumType(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasOptions()) {
        if (!getOptions().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      for (int i = 0; i < field_.size(); i++) {
        output.writeMessage(2, field_.get(i));
      }
      for (int i = 0; i < nestedType_.size(); i++) {
        output.writeMessage(3, nestedType_.get(i));
      }
      for (int i = 0; i < enumType_.size(); i++) {
        output.writeMessage(4, enumType_.get(i));
      }
      for (int i = 0; i < extensionRange_.size(); i++) {
        output.writeMessage(5, extensionRange_.get(i));
      }
      for (int i = 0; i < extension_.size(); i++) {
        output.writeMessage(6, extension_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(7, options_);
      }
      for (int i = 0; i < oneofDecl_.size(); i++) {
        output.writeMessage(8, oneofDecl_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      for (int i = 0; i < field_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, field_.get(i));
      }
      for (int i = 0; i < nestedType_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, nestedType_.get(i));
      }
      for (int i = 0; i < enumType_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, enumType_.get(i));
      }
      for (int i = 0; i < extensionRange_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, extensionRange_.get(i));
      }
      for (int i = 0; i < extension_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, extension_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, options_);
      }
      for (int i = 0; i < oneofDecl_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, oneofDecl_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.DescriptorProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.DescriptorProto}
     *
     * <pre>
     * Describes a message type.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.DescriptorProto)
        com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.DescriptorProto.class, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getFieldFieldBuilder();
          getExtensionFieldBuilder();
          getNestedTypeFieldBuilder();
          getEnumTypeFieldBuilder();
          getExtensionRangeFieldBuilder();
          getOneofDeclFieldBuilder();
          getOptionsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (fieldBuilder_ == null) {
          field_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          fieldBuilder_.clear();
        }
        if (extensionBuilder_ == null) {
          extension_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          extensionBuilder_.clear();
        }
        if (nestedTypeBuilder_ == null) {
          nestedType_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          nestedTypeBuilder_.clear();
        }
        if (enumTypeBuilder_ == null) {
          enumType_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          enumTypeBuilder_.clear();
        }
        if (extensionRangeBuilder_ == null) {
          extensionRange_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          extensionRangeBuilder_.clear();
        }
        if (oneofDeclBuilder_ == null) {
          oneofDecl_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          oneofDeclBuilder_.clear();
        }
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.DescriptorProto getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.DescriptorProto build() {
        com.google.protobuf.DescriptorProtos.DescriptorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.DescriptorProto buildPartial() {
        com.google.protobuf.DescriptorProtos.DescriptorProto result = new com.google.protobuf.DescriptorProtos.DescriptorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (fieldBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            field_ = java.util.Collections.unmodifiableList(field_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.field_ = field_;
        } else {
          result.field_ = fieldBuilder_.build();
        }
        if (extensionBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            extension_ = java.util.Collections.unmodifiableList(extension_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.extension_ = extension_;
        } else {
          result.extension_ = extensionBuilder_.build();
        }
        if (nestedTypeBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            nestedType_ = java.util.Collections.unmodifiableList(nestedType_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.nestedType_ = nestedType_;
        } else {
          result.nestedType_ = nestedTypeBuilder_.build();
        }
        if (enumTypeBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            enumType_ = java.util.Collections.unmodifiableList(enumType_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.enumType_ = enumType_;
        } else {
          result.enumType_ = enumTypeBuilder_.build();
        }
        if (extensionRangeBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            extensionRange_ = java.util.Collections.unmodifiableList(extensionRange_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.extensionRange_ = extensionRange_;
        } else {
          result.extensionRange_ = extensionRangeBuilder_.build();
        }
        if (oneofDeclBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            oneofDecl_ = java.util.Collections.unmodifiableList(oneofDecl_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.oneofDecl_ = oneofDecl_;
        } else {
          result.oneofDecl_ = oneofDeclBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000002;
        }
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.DescriptorProto) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.DescriptorProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.DescriptorProto other) {
        if (other == com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (fieldBuilder_ == null) {
          if (!other.field_.isEmpty()) {
            if (field_.isEmpty()) {
              field_ = other.field_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureFieldIsMutable();
              field_.addAll(other.field_);
            }
            onChanged();
          }
        } else {
          if (!other.field_.isEmpty()) {
            if (fieldBuilder_.isEmpty()) {
              fieldBuilder_.dispose();
              fieldBuilder_ = null;
              field_ = other.field_;
              bitField0_ = (bitField0_ & ~0x00000002);
              fieldBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getFieldFieldBuilder() : null;
            } else {
              fieldBuilder_.addAllMessages(other.field_);
            }
          }
        }
        if (extensionBuilder_ == null) {
          if (!other.extension_.isEmpty()) {
            if (extension_.isEmpty()) {
              extension_ = other.extension_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureExtensionIsMutable();
              extension_.addAll(other.extension_);
            }
            onChanged();
          }
        } else {
          if (!other.extension_.isEmpty()) {
            if (extensionBuilder_.isEmpty()) {
              extensionBuilder_.dispose();
              extensionBuilder_ = null;
              extension_ = other.extension_;
              bitField0_ = (bitField0_ & ~0x00000004);
              extensionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getExtensionFieldBuilder() : null;
            } else {
              extensionBuilder_.addAllMessages(other.extension_);
            }
          }
        }
        if (nestedTypeBuilder_ == null) {
          if (!other.nestedType_.isEmpty()) {
            if (nestedType_.isEmpty()) {
              nestedType_ = other.nestedType_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureNestedTypeIsMutable();
              nestedType_.addAll(other.nestedType_);
            }
            onChanged();
          }
        } else {
          if (!other.nestedType_.isEmpty()) {
            if (nestedTypeBuilder_.isEmpty()) {
              nestedTypeBuilder_.dispose();
              nestedTypeBuilder_ = null;
              nestedType_ = other.nestedType_;
              bitField0_ = (bitField0_ & ~0x00000008);
              nestedTypeBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getNestedTypeFieldBuilder() : null;
            } else {
              nestedTypeBuilder_.addAllMessages(other.nestedType_);
            }
          }
        }
        if (enumTypeBuilder_ == null) {
          if (!other.enumType_.isEmpty()) {
            if (enumType_.isEmpty()) {
              enumType_ = other.enumType_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureEnumTypeIsMutable();
              enumType_.addAll(other.enumType_);
            }
            onChanged();
          }
        } else {
          if (!other.enumType_.isEmpty()) {
            if (enumTypeBuilder_.isEmpty()) {
              enumTypeBuilder_.dispose();
              enumTypeBuilder_ = null;
              enumType_ = other.enumType_;
              bitField0_ = (bitField0_ & ~0x00000010);
              enumTypeBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getEnumTypeFieldBuilder() : null;
            } else {
              enumTypeBuilder_.addAllMessages(other.enumType_);
            }
          }
        }
        if (extensionRangeBuilder_ == null) {
          if (!other.extensionRange_.isEmpty()) {
            if (extensionRange_.isEmpty()) {
              extensionRange_ = other.extensionRange_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureExtensionRangeIsMutable();
              extensionRange_.addAll(other.extensionRange_);
            }
            onChanged();
          }
        } else {
          if (!other.extensionRange_.isEmpty()) {
            if (extensionRangeBuilder_.isEmpty()) {
              extensionRangeBuilder_.dispose();
              extensionRangeBuilder_ = null;
              extensionRange_ = other.extensionRange_;
              bitField0_ = (bitField0_ & ~0x00000020);
              extensionRangeBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getExtensionRangeFieldBuilder() : null;
            } else {
              extensionRangeBuilder_.addAllMessages(other.extensionRange_);
            }
          }
        }
        if (oneofDeclBuilder_ == null) {
          if (!other.oneofDecl_.isEmpty()) {
            if (oneofDecl_.isEmpty()) {
              oneofDecl_ = other.oneofDecl_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureOneofDeclIsMutable();
              oneofDecl_.addAll(other.oneofDecl_);
            }
            onChanged();
          }
        } else {
          if (!other.oneofDecl_.isEmpty()) {
            if (oneofDeclBuilder_.isEmpty()) {
              oneofDeclBuilder_.dispose();
              oneofDeclBuilder_ = null;
              oneofDecl_ = other.oneofDecl_;
              bitField0_ = (bitField0_ & ~0x00000040);
              oneofDeclBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getOneofDeclFieldBuilder() : null;
            } else {
              oneofDeclBuilder_.addAllMessages(other.oneofDecl_);
            }
          }
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getFieldCount(); i++) {
          if (!getField(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getExtensionCount(); i++) {
          if (!getExtension(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getNestedTypeCount(); i++) {
          if (!getNestedType(i).isInitialized()) {
            
            return false;
          }
        }
        for (int i = 0; i < getEnumTypeCount(); i++) {
          if (!getEnumType(i).isInitialized()) {
            
            return false;
          }
        }
        if (hasOptions()) {
          if (!getOptions().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.DescriptorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.DescriptorProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> field_ =
        java.util.Collections.emptyList();
      private void ensureFieldIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          field_ = new java.util.ArrayList<>(field_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> fieldBuilder_;

      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getFieldList() {
        if (fieldBuilder_ == null) {
          return java.util.Collections.unmodifiableList(field_);
        } else {
          return fieldBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public int getFieldCount() {
        if (fieldBuilder_ == null) {
          return field_.size();
        } else {
          return fieldBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index) {
        if (fieldBuilder_ == null) {
          return field_.get(index);
        } else {
          return fieldBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder setField(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (fieldBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFieldIsMutable();
          field_.set(index, value);
          onChanged();
        } else {
          fieldBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder setField(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (fieldBuilder_ == null) {
          ensureFieldIsMutable();
          field_.set(index, builderForValue.build());
          onChanged();
        } else {
          fieldBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder addField(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (fieldBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFieldIsMutable();
          field_.add(value);
          onChanged();
        } else {
          fieldBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder addField(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (fieldBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFieldIsMutable();
          field_.add(index, value);
          onChanged();
        } else {
          fieldBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder addField(
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (fieldBuilder_ == null) {
          ensureFieldIsMutable();
          field_.add(builderForValue.build());
          onChanged();
        } else {
          fieldBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder addField(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (fieldBuilder_ == null) {
          ensureFieldIsMutable();
          field_.add(index, builderForValue.build());
          onChanged();
        } else {
          fieldBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder addAllField(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
        if (fieldBuilder_ == null) {
          ensureFieldIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, field_);
          onChanged();
        } else {
          fieldBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder clearField() {
        if (fieldBuilder_ == null) {
          field_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          fieldBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public Builder removeField(int index) {
        if (fieldBuilder_ == null) {
          ensureFieldIsMutable();
          field_.remove(index);
          onChanged();
        } else {
          fieldBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getFieldBuilder(
          int index) {
        return getFieldFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
          int index) {
        if (fieldBuilder_ == null) {
          return field_.get(index);  } else {
          return fieldBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
           getFieldOrBuilderList() {
        if (fieldBuilder_ != null) {
          return fieldBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(field_);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addFieldBuilder() {
        return getFieldFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addFieldBuilder(
          int index) {
        return getFieldFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto field = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
           getFieldBuilderList() {
        return getFieldFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
          getFieldFieldBuilder() {
        if (fieldBuilder_ == null) {
          fieldBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  field_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          field_ = null;
        }
        return fieldBuilder_;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_ =
        java.util.Collections.emptyList();
      private void ensureExtensionIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          extension_ = new java.util.ArrayList<>(extension_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> extensionBuilder_;

      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
        if (extensionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(extension_);
        } else {
          return extensionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public int getExtensionCount() {
        if (extensionBuilder_ == null) {
          return extension_.size();
        } else {
          return extensionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
        if (extensionBuilder_ == null) {
          return extension_.get(index);
        } else {
          return extensionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder setExtension(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.set(index, value);
          onChanged();
        } else {
          extensionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder setExtension(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.set(index, builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.add(value);
          onChanged();
        } else {
          extensionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder addExtension(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
        if (extensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionIsMutable();
          extension_.add(index, value);
          onChanged();
        } else {
          extensionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder addExtension(
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.add(builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder addExtension(
          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.add(index, builderForValue.build());
          onChanged();
        } else {
          extensionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder addAllExtension(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, extension_);
          onChanged();
        } else {
          extensionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder clearExtension() {
        if (extensionBuilder_ == null) {
          extension_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          extensionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public Builder removeExtension(int index) {
        if (extensionBuilder_ == null) {
          ensureExtensionIsMutable();
          extension_.remove(index);
          onChanged();
        } else {
          extensionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getExtensionBuilder(
          int index) {
        return getExtensionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
          int index) {
        if (extensionBuilder_ == null) {
          return extension_.get(index);  } else {
          return extensionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
           getExtensionOrBuilderList() {
        if (extensionBuilder_ != null) {
          return extensionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(extension_);
        }
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder() {
        return getExtensionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder(
          int index) {
        return getExtensionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.FieldDescriptorProto extension = 6;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
           getExtensionBuilderList() {
        return getExtensionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
          getExtensionFieldBuilder() {
        if (extensionBuilder_ == null) {
          extensionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  extension_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          extension_ = null;
        }
        return extensionBuilder_;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> nestedType_ =
        java.util.Collections.emptyList();
      private void ensureNestedTypeIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          nestedType_ = new java.util.ArrayList<>(nestedType_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> nestedTypeBuilder_;

      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getNestedTypeList() {
        if (nestedTypeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(nestedType_);
        } else {
          return nestedTypeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public int getNestedTypeCount() {
        if (nestedTypeBuilder_ == null) {
          return nestedType_.size();
        } else {
          return nestedTypeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index) {
        if (nestedTypeBuilder_ == null) {
          return nestedType_.get(index);
        } else {
          return nestedTypeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder setNestedType(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
        if (nestedTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNestedTypeIsMutable();
          nestedType_.set(index, value);
          onChanged();
        } else {
          nestedTypeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder setNestedType(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
        if (nestedTypeBuilder_ == null) {
          ensureNestedTypeIsMutable();
          nestedType_.set(index, builderForValue.build());
          onChanged();
        } else {
          nestedTypeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder addNestedType(com.google.protobuf.DescriptorProtos.DescriptorProto value) {
        if (nestedTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNestedTypeIsMutable();
          nestedType_.add(value);
          onChanged();
        } else {
          nestedTypeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder addNestedType(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
        if (nestedTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNestedTypeIsMutable();
          nestedType_.add(index, value);
          onChanged();
        } else {
          nestedTypeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder addNestedType(
          com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
        if (nestedTypeBuilder_ == null) {
          ensureNestedTypeIsMutable();
          nestedType_.add(builderForValue.build());
          onChanged();
        } else {
          nestedTypeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder addNestedType(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
        if (nestedTypeBuilder_ == null) {
          ensureNestedTypeIsMutable();
          nestedType_.add(index, builderForValue.build());
          onChanged();
        } else {
          nestedTypeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder addAllNestedType(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto> values) {
        if (nestedTypeBuilder_ == null) {
          ensureNestedTypeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, nestedType_);
          onChanged();
        } else {
          nestedTypeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder clearNestedType() {
        if (nestedTypeBuilder_ == null) {
          nestedType_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          nestedTypeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public Builder removeNestedType(int index) {
        if (nestedTypeBuilder_ == null) {
          ensureNestedTypeIsMutable();
          nestedType_.remove(index);
          onChanged();
        } else {
          nestedTypeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder getNestedTypeBuilder(
          int index) {
        return getNestedTypeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
          int index) {
        if (nestedTypeBuilder_ == null) {
          return nestedType_.get(index);  } else {
          return nestedTypeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
           getNestedTypeOrBuilderList() {
        if (nestedTypeBuilder_ != null) {
          return nestedTypeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(nestedType_);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addNestedTypeBuilder() {
        return getNestedTypeFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addNestedTypeBuilder(
          int index) {
        return getNestedTypeFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto nested_type = 3;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.Builder> 
           getNestedTypeBuilderList() {
        return getNestedTypeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
          getNestedTypeFieldBuilder() {
        if (nestedTypeBuilder_ == null) {
          nestedTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  nestedType_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          nestedType_ = null;
        }
        return nestedTypeBuilder_;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_ =
        java.util.Collections.emptyList();
      private void ensureEnumTypeIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          enumType_ = new java.util.ArrayList<>(enumType_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> enumTypeBuilder_;

      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
        if (enumTypeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(enumType_);
        } else {
          return enumTypeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public int getEnumTypeCount() {
        if (enumTypeBuilder_ == null) {
          return enumType_.size();
        } else {
          return enumTypeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
        if (enumTypeBuilder_ == null) {
          return enumType_.get(index);
        } else {
          return enumTypeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder setEnumType(
          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
        if (enumTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnumTypeIsMutable();
          enumType_.set(index, value);
          onChanged();
        } else {
          enumTypeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder setEnumType(
          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          enumType_.set(index, builderForValue.build());
          onChanged();
        } else {
          enumTypeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
        if (enumTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnumTypeIsMutable();
          enumType_.add(value);
          onChanged();
        } else {
          enumTypeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder addEnumType(
          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
        if (enumTypeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEnumTypeIsMutable();
          enumType_.add(index, value);
          onChanged();
        } else {
          enumTypeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder addEnumType(
          com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          enumType_.add(builderForValue.build());
          onChanged();
        } else {
          enumTypeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder addEnumType(
          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          enumType_.add(index, builderForValue.build());
          onChanged();
        } else {
          enumTypeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder addAllEnumType(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProto> values) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, enumType_);
          onChanged();
        } else {
          enumTypeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder clearEnumType() {
        if (enumTypeBuilder_ == null) {
          enumType_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          enumTypeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public Builder removeEnumType(int index) {
        if (enumTypeBuilder_ == null) {
          ensureEnumTypeIsMutable();
          enumType_.remove(index);
          onChanged();
        } else {
          enumTypeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder getEnumTypeBuilder(
          int index) {
        return getEnumTypeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
          int index) {
        if (enumTypeBuilder_ == null) {
          return enumType_.get(index);  } else {
          return enumTypeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
           getEnumTypeOrBuilderList() {
        if (enumTypeBuilder_ != null) {
          return enumTypeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(enumType_);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder() {
        return getEnumTypeFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder(
          int index) {
        return getEnumTypeFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.EnumDescriptorProto enum_type = 4;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder> 
           getEnumTypeBuilderList() {
        return getEnumTypeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
          getEnumTypeFieldBuilder() {
        if (enumTypeBuilder_ == null) {
          enumTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  enumType_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          enumType_ = null;
        }
        return enumTypeBuilder_;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> extensionRange_ =
        java.util.Collections.emptyList();
      private void ensureExtensionRangeIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          extensionRange_ = new java.util.ArrayList<>(extensionRange_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> extensionRangeBuilder_;

      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> getExtensionRangeList() {
        if (extensionRangeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(extensionRange_);
        } else {
          return extensionRangeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public int getExtensionRangeCount() {
        if (extensionRangeBuilder_ == null) {
          return extensionRange_.size();
        } else {
          return extensionRangeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) {
        if (extensionRangeBuilder_ == null) {
          return extensionRange_.get(index);
        } else {
          return extensionRangeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder setExtensionRange(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
        if (extensionRangeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionRangeIsMutable();
          extensionRange_.set(index, value);
          onChanged();
        } else {
          extensionRangeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder setExtensionRange(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
        if (extensionRangeBuilder_ == null) {
          ensureExtensionRangeIsMutable();
          extensionRange_.set(index, builderForValue.build());
          onChanged();
        } else {
          extensionRangeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder addExtensionRange(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
        if (extensionRangeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionRangeIsMutable();
          extensionRange_.add(value);
          onChanged();
        } else {
          extensionRangeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder addExtensionRange(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
        if (extensionRangeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtensionRangeIsMutable();
          extensionRange_.add(index, value);
          onChanged();
        } else {
          extensionRangeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder addExtensionRange(
          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
        if (extensionRangeBuilder_ == null) {
          ensureExtensionRangeIsMutable();
          extensionRange_.add(builderForValue.build());
          onChanged();
        } else {
          extensionRangeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder addExtensionRange(
          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
        if (extensionRangeBuilder_ == null) {
          ensureExtensionRangeIsMutable();
          extensionRange_.add(index, builderForValue.build());
          onChanged();
        } else {
          extensionRangeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder addAllExtensionRange(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> values) {
        if (extensionRangeBuilder_ == null) {
          ensureExtensionRangeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, extensionRange_);
          onChanged();
        } else {
          extensionRangeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder clearExtensionRange() {
        if (extensionRangeBuilder_ == null) {
          extensionRange_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          extensionRangeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public Builder removeExtensionRange(int index) {
        if (extensionRangeBuilder_ == null) {
          ensureExtensionRangeIsMutable();
          extensionRange_.remove(index);
          onChanged();
        } else {
          extensionRangeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder getExtensionRangeBuilder(
          int index) {
        return getExtensionRangeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
          int index) {
        if (extensionRangeBuilder_ == null) {
          return extensionRange_.get(index);  } else {
          return extensionRangeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
           getExtensionRangeOrBuilderList() {
        if (extensionRangeBuilder_ != null) {
          return extensionRangeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(extensionRange_);
        }
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder addExtensionRangeBuilder() {
        return getExtensionRangeFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder addExtensionRangeBuilder(
          int index) {
        return getExtensionRangeFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder> 
           getExtensionRangeBuilderList() {
        return getExtensionRangeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
          getExtensionRangeFieldBuilder() {
        if (extensionRangeBuilder_ == null) {
          extensionRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  extensionRange_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          extensionRange_ = null;
        }
        return extensionRangeBuilder_;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.OneofDescriptorProto> oneofDecl_ =
        java.util.Collections.emptyList();
      private void ensureOneofDeclIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          oneofDecl_ = new java.util.ArrayList<>(oneofDecl_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.OneofDescriptorProto, com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder> oneofDeclBuilder_;

      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.OneofDescriptorProto> getOneofDeclList() {
        if (oneofDeclBuilder_ == null) {
          return java.util.Collections.unmodifiableList(oneofDecl_);
        } else {
          return oneofDeclBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public int getOneofDeclCount() {
        if (oneofDeclBuilder_ == null) {
          return oneofDecl_.size();
        } else {
          return oneofDeclBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.OneofDescriptorProto getOneofDecl(int index) {
        if (oneofDeclBuilder_ == null) {
          return oneofDecl_.get(index);
        } else {
          return oneofDeclBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder setOneofDecl(
          int index, com.google.protobuf.DescriptorProtos.OneofDescriptorProto value) {
        if (oneofDeclBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOneofDeclIsMutable();
          oneofDecl_.set(index, value);
          onChanged();
        } else {
          oneofDeclBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder setOneofDecl(
          int index, com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder builderForValue) {
        if (oneofDeclBuilder_ == null) {
          ensureOneofDeclIsMutable();
          oneofDecl_.set(index, builderForValue.build());
          onChanged();
        } else {
          oneofDeclBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder addOneofDecl(com.google.protobuf.DescriptorProtos.OneofDescriptorProto value) {
        if (oneofDeclBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOneofDeclIsMutable();
          oneofDecl_.add(value);
          onChanged();
        } else {
          oneofDeclBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder addOneofDecl(
          int index, com.google.protobuf.DescriptorProtos.OneofDescriptorProto value) {
        if (oneofDeclBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOneofDeclIsMutable();
          oneofDecl_.add(index, value);
          onChanged();
        } else {
          oneofDeclBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder addOneofDecl(
          com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder builderForValue) {
        if (oneofDeclBuilder_ == null) {
          ensureOneofDeclIsMutable();
          oneofDecl_.add(builderForValue.build());
          onChanged();
        } else {
          oneofDeclBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder addOneofDecl(
          int index, com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder builderForValue) {
        if (oneofDeclBuilder_ == null) {
          ensureOneofDeclIsMutable();
          oneofDecl_.add(index, builderForValue.build());
          onChanged();
        } else {
          oneofDeclBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder addAllOneofDecl(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.OneofDescriptorProto> values) {
        if (oneofDeclBuilder_ == null) {
          ensureOneofDeclIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, oneofDecl_);
          onChanged();
        } else {
          oneofDeclBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder clearOneofDecl() {
        if (oneofDeclBuilder_ == null) {
          oneofDecl_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          oneofDeclBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public Builder removeOneofDecl(int index) {
        if (oneofDeclBuilder_ == null) {
          ensureOneofDeclIsMutable();
          oneofDecl_.remove(index);
          onChanged();
        } else {
          oneofDeclBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder getOneofDeclBuilder(
          int index) {
        return getOneofDeclFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder getOneofDeclOrBuilder(
          int index) {
        if (oneofDeclBuilder_ == null) {
          return oneofDecl_.get(index);  } else {
          return oneofDeclBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder> 
           getOneofDeclOrBuilderList() {
        if (oneofDeclBuilder_ != null) {
          return oneofDeclBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(oneofDecl_);
        }
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder addOneofDeclBuilder() {
        return getOneofDeclFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.OneofDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder addOneofDeclBuilder(
          int index) {
        return getOneofDeclFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.OneofDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.OneofDescriptorProto oneof_decl = 8;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder> 
           getOneofDeclBuilderList() {
        return getOneofDeclFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.OneofDescriptorProto, com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder> 
          getOneofDeclFieldBuilder() {
        if (oneofDeclBuilder_ == null) {
          oneofDeclBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  oneofDecl_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          oneofDecl_ = null;
        }
        return oneofDeclBuilder_;
      }

      private com.google.protobuf.DescriptorProtos.MessageOptions options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.MessageOptions, com.google.protobuf.DescriptorProtos.MessageOptions.Builder, com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      public boolean hasOptions() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      public com.google.protobuf.DescriptorProtos.MessageOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      public Builder setOptions(com.google.protobuf.DescriptorProtos.MessageOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      public Builder setOptions(
          com.google.protobuf.DescriptorProtos.MessageOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.MessageOptions value) {
        if (optionsBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              options_ != com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance()) {
            options_ =
              com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
          onChanged();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      public com.google.protobuf.DescriptorProtos.MessageOptions.Builder getOptionsBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      public com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_;
        }
      }
      /**
       * <code>optional .google.protobuf.MessageOptions options = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.MessageOptions, com.google.protobuf.DescriptorProtos.MessageOptions.Builder, com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto)
    }

    static {
      defaultInstance = new DescriptorProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto)
  }

  public interface FieldDescriptorProtoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.FieldDescriptorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional int32 number = 3;</code>
     */
    boolean hasNumber();
    /**
     * <code>optional int32 number = 3;</code>
     */
    int getNumber();

    /**
     * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
     */
    boolean hasLabel();
    /**
     * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel();

    /**
     * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
     *
     * <pre>
     * If type_name is set, this need not be set.  If both this and type_name
     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
     * </pre>
     */
    boolean hasType();
    /**
     * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
     *
     * <pre>
     * If type_name is set, this need not be set.  If both this and type_name
     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType();

    /**
     * <code>optional string type_name = 6;</code>
     *
     * <pre>
     * For message and enum types, this is the name of the type.  If the name
     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
     * rules are used to find the type (i.e. first the nested types within this
     * message are searched, then within the parent, on up to the root
     * namespace).
     * </pre>
     */
    boolean hasTypeName();
    /**
     * <code>optional string type_name = 6;</code>
     *
     * <pre>
     * For message and enum types, this is the name of the type.  If the name
     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
     * rules are used to find the type (i.e. first the nested types within this
     * message are searched, then within the parent, on up to the root
     * namespace).
     * </pre>
     */
    java.lang.String getTypeName();
    /**
     * <code>optional string type_name = 6;</code>
     *
     * <pre>
     * For message and enum types, this is the name of the type.  If the name
     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
     * rules are used to find the type (i.e. first the nested types within this
     * message are searched, then within the parent, on up to the root
     * namespace).
     * </pre>
     */
    com.google.protobuf.ByteString
        getTypeNameBytes();

    /**
     * <code>optional string extendee = 2;</code>
     *
     * <pre>
     * For extensions, this is the name of the type being extended.  It is
     * resolved in the same manner as type_name.
     * </pre>
     */
    boolean hasExtendee();
    /**
     * <code>optional string extendee = 2;</code>
     *
     * <pre>
     * For extensions, this is the name of the type being extended.  It is
     * resolved in the same manner as type_name.
     * </pre>
     */
    java.lang.String getExtendee();
    /**
     * <code>optional string extendee = 2;</code>
     *
     * <pre>
     * For extensions, this is the name of the type being extended.  It is
     * resolved in the same manner as type_name.
     * </pre>
     */
    com.google.protobuf.ByteString
        getExtendeeBytes();

    /**
     * <code>optional string default_value = 7;</code>
     *
     * <pre>
     * For numeric types, contains the original text representation of the value.
     * For booleans, "true" or "false".
     * For strings, contains the default text contents (not escaped in any way).
     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
     * TODO(kenton):  Base-64 encode?
     * </pre>
     */
    boolean hasDefaultValue();
    /**
     * <code>optional string default_value = 7;</code>
     *
     * <pre>
     * For numeric types, contains the original text representation of the value.
     * For booleans, "true" or "false".
     * For strings, contains the default text contents (not escaped in any way).
     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
     * TODO(kenton):  Base-64 encode?
     * </pre>
     */
    java.lang.String getDefaultValue();
    /**
     * <code>optional string default_value = 7;</code>
     *
     * <pre>
     * For numeric types, contains the original text representation of the value.
     * For booleans, "true" or "false".
     * For strings, contains the default text contents (not escaped in any way).
     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
     * TODO(kenton):  Base-64 encode?
     * </pre>
     */
    com.google.protobuf.ByteString
        getDefaultValueBytes();

    /**
     * <code>optional int32 oneof_index = 9;</code>
     *
     * <pre>
     * If set, gives the index of a oneof in the containing type's oneof_decl
     * list.  This field is a member of that oneof.  Extensions of a oneof should
     * not set this since the oneof to which they belong will be inferred based
     * on the extension range containing the extension's field number.
     * </pre>
     */
    boolean hasOneofIndex();
    /**
     * <code>optional int32 oneof_index = 9;</code>
     *
     * <pre>
     * If set, gives the index of a oneof in the containing type's oneof_decl
     * list.  This field is a member of that oneof.  Extensions of a oneof should
     * not set this since the oneof to which they belong will be inferred based
     * on the extension range containing the extension's field number.
     * </pre>
     */
    int getOneofIndex();

    /**
     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
     */
    boolean hasOptions();
    /**
     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldOptions getOptions();
    /**
     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
     */
    com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code google.protobuf.FieldDescriptorProto}
   *
   * <pre>
   * Describes a field within a message.
   * </pre>
   */
  public static final class FieldDescriptorProto extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.FieldDescriptorProto)
      FieldDescriptorProtoOrBuilder {
    // Use FieldDescriptorProto.newBuilder() to construct.
    private FieldDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FieldDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FieldDescriptorProto defaultInstance;
    public static FieldDescriptorProto getDefaultInstance() {
      return defaultInstance;
    }

    public FieldDescriptorProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FieldDescriptorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              extendee_ = bs;
              break;
            }
            case 24: {
              bitField0_ |= 0x00000002;
              number_ = input.readInt32();
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label value = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000004;
                label_ = value;
              }
              break;
            }
            case 40: {
              int rawValue = input.readEnum();
              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type value = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(5, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                type_ = value;
              }
              break;
            }
            case 50: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              typeName_ = bs;
              break;
            }
            case 58: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000040;
              defaultValue_ = bs;
              break;
            }
            case 66: {
              com.google.protobuf.DescriptorProtos.FieldOptions.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.FieldOptions.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 72: {
              bitField0_ |= 0x00000080;
              oneofIndex_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.class, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder.class);
    }

    public static com.google.protobuf.Parser<FieldDescriptorProto> PARSER =
        new com.google.protobuf.AbstractParser<FieldDescriptorProto>() {
      public FieldDescriptorProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FieldDescriptorProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<FieldDescriptorProto> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code google.protobuf.FieldDescriptorProto.Type}
     */
    public enum Type
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>TYPE_DOUBLE = 1;</code>
       *
       * <pre>
       * 0 is reserved for errors.
       * Order is weird for historical reasons.
       * </pre>
       */
      TYPE_DOUBLE(0, 1),
      /**
       * <code>TYPE_FLOAT = 2;</code>
       */
      TYPE_FLOAT(1, 2),
      /**
       * <code>TYPE_INT64 = 3;</code>
       *
       * <pre>
       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
       * negative values are likely.
       * </pre>
       */
      TYPE_INT64(2, 3),
      /**
       * <code>TYPE_UINT64 = 4;</code>
       */
      TYPE_UINT64(3, 4),
      /**
       * <code>TYPE_INT32 = 5;</code>
       *
       * <pre>
       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
       * negative values are likely.
       * </pre>
       */
      TYPE_INT32(4, 5),
      /**
       * <code>TYPE_FIXED64 = 6;</code>
       */
      TYPE_FIXED64(5, 6),
      /**
       * <code>TYPE_FIXED32 = 7;</code>
       */
      TYPE_FIXED32(6, 7),
      /**
       * <code>TYPE_BOOL = 8;</code>
       */
      TYPE_BOOL(7, 8),
      /**
       * <code>TYPE_STRING = 9;</code>
       */
      TYPE_STRING(8, 9),
      /**
       * <code>TYPE_GROUP = 10;</code>
       *
       * <pre>
       * Tag-delimited aggregate.
       * </pre>
       */
      TYPE_GROUP(9, 10),
      /**
       * <code>TYPE_MESSAGE = 11;</code>
       *
       * <pre>
       * Length-delimited aggregate.
       * </pre>
       */
      TYPE_MESSAGE(10, 11),
      /**
       * <code>TYPE_BYTES = 12;</code>
       *
       * <pre>
       * New in version 2.
       * </pre>
       */
      TYPE_BYTES(11, 12),
      /**
       * <code>TYPE_UINT32 = 13;</code>
       */
      TYPE_UINT32(12, 13),
      /**
       * <code>TYPE_ENUM = 14;</code>
       */
      TYPE_ENUM(13, 14),
      /**
       * <code>TYPE_SFIXED32 = 15;</code>
       */
      TYPE_SFIXED32(14, 15),
      /**
       * <code>TYPE_SFIXED64 = 16;</code>
       */
      TYPE_SFIXED64(15, 16),
      /**
       * <code>TYPE_SINT32 = 17;</code>
       *
       * <pre>
       * Uses ZigZag encoding.
       * </pre>
       */
      TYPE_SINT32(16, 17),
      /**
       * <code>TYPE_SINT64 = 18;</code>
       *
       * <pre>
       * Uses ZigZag encoding.
       * </pre>
       */
      TYPE_SINT64(17, 18),
      ;

      /**
       * <code>TYPE_DOUBLE = 1;</code>
       *
       * <pre>
       * 0 is reserved for errors.
       * Order is weird for historical reasons.
       * </pre>
       */
      public static final int TYPE_DOUBLE_VALUE = 1;
      /**
       * <code>TYPE_FLOAT = 2;</code>
       */
      public static final int TYPE_FLOAT_VALUE = 2;
      /**
       * <code>TYPE_INT64 = 3;</code>
       *
       * <pre>
       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
       * negative values are likely.
       * </pre>
       */
      public static final int TYPE_INT64_VALUE = 3;
      /**
       * <code>TYPE_UINT64 = 4;</code>
       */
      public static final int TYPE_UINT64_VALUE = 4;
      /**
       * <code>TYPE_INT32 = 5;</code>
       *
       * <pre>
       * Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
       * negative values are likely.
       * </pre>
       */
      public static final int TYPE_INT32_VALUE = 5;
      /**
       * <code>TYPE_FIXED64 = 6;</code>
       */
      public static final int TYPE_FIXED64_VALUE = 6;
      /**
       * <code>TYPE_FIXED32 = 7;</code>
       */
      public static final int TYPE_FIXED32_VALUE = 7;
      /**
       * <code>TYPE_BOOL = 8;</code>
       */
      public static final int TYPE_BOOL_VALUE = 8;
      /**
       * <code>TYPE_STRING = 9;</code>
       */
      public static final int TYPE_STRING_VALUE = 9;
      /**
       * <code>TYPE_GROUP = 10;</code>
       *
       * <pre>
       * Tag-delimited aggregate.
       * </pre>
       */
      public static final int TYPE_GROUP_VALUE = 10;
      /**
       * <code>TYPE_MESSAGE = 11;</code>
       *
       * <pre>
       * Length-delimited aggregate.
       * </pre>
       */
      public static final int TYPE_MESSAGE_VALUE = 11;
      /**
       * <code>TYPE_BYTES = 12;</code>
       *
       * <pre>
       * New in version 2.
       * </pre>
       */
      public static final int TYPE_BYTES_VALUE = 12;
      /**
       * <code>TYPE_UINT32 = 13;</code>
       */
      public static final int TYPE_UINT32_VALUE = 13;
      /**
       * <code>TYPE_ENUM = 14;</code>
       */
      public static final int TYPE_ENUM_VALUE = 14;
      /**
       * <code>TYPE_SFIXED32 = 15;</code>
       */
      public static final int TYPE_SFIXED32_VALUE = 15;
      /**
       * <code>TYPE_SFIXED64 = 16;</code>
       */
      public static final int TYPE_SFIXED64_VALUE = 16;
      /**
       * <code>TYPE_SINT32 = 17;</code>
       *
       * <pre>
       * Uses ZigZag encoding.
       * </pre>
       */
      public static final int TYPE_SINT32_VALUE = 17;
      /**
       * <code>TYPE_SINT64 = 18;</code>
       *
       * <pre>
       * Uses ZigZag encoding.
       * </pre>
       */
      public static final int TYPE_SINT64_VALUE = 18;


      public final int getNumber() { return value; }

      public static Type valueOf(int value) {
        switch (value) {
          case 1: return TYPE_DOUBLE;
          case 2: return TYPE_FLOAT;
          case 3: return TYPE_INT64;
          case 4: return TYPE_UINT64;
          case 5: return TYPE_INT32;
          case 6: return TYPE_FIXED64;
          case 7: return TYPE_FIXED32;
          case 8: return TYPE_BOOL;
          case 9: return TYPE_STRING;
          case 10: return TYPE_GROUP;
          case 11: return TYPE_MESSAGE;
          case 12: return TYPE_BYTES;
          case 13: return TYPE_UINT32;
          case 14: return TYPE_ENUM;
          case 15: return TYPE_SFIXED32;
          case 16: return TYPE_SFIXED64;
          case 17: return TYPE_SINT32;
          case 18: return TYPE_SINT64;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Type>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
              public Type findValueByNumber(int number) {
                return Type.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(0);
      }

      private static final Type[] VALUES = values();

      public static Type valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private Type(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Type)
    }

    /**
     * Protobuf enum {@code google.protobuf.FieldDescriptorProto.Label}
     */
    public enum Label
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>LABEL_OPTIONAL = 1;</code>
       *
       * <pre>
       * 0 is reserved for errors
       * </pre>
       */
      LABEL_OPTIONAL(0, 1),
      /**
       * <code>LABEL_REQUIRED = 2;</code>
       */
      LABEL_REQUIRED(1, 2),
      /**
       * <code>LABEL_REPEATED = 3;</code>
       *
       * <pre>
       * TODO(sanjay): Should we add LABEL_MAP?
       * </pre>
       */
      LABEL_REPEATED(2, 3),
      ;

      /**
       * <code>LABEL_OPTIONAL = 1;</code>
       *
       * <pre>
       * 0 is reserved for errors
       * </pre>
       */
      public static final int LABEL_OPTIONAL_VALUE = 1;
      /**
       * <code>LABEL_REQUIRED = 2;</code>
       */
      public static final int LABEL_REQUIRED_VALUE = 2;
      /**
       * <code>LABEL_REPEATED = 3;</code>
       *
       * <pre>
       * TODO(sanjay): Should we add LABEL_MAP?
       * </pre>
       */
      public static final int LABEL_REPEATED_VALUE = 3;


      public final int getNumber() { return value; }

      public static Label valueOf(int value) {
        switch (value) {
          case 1: return LABEL_OPTIONAL;
          case 2: return LABEL_REQUIRED;
          case 3: return LABEL_REPEATED;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<Label>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<Label>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<Label>() {
              public Label findValueByNumber(int number) {
                return Label.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(1);
      }

      private static final Label[] VALUES = values();

      public static Label valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private Label(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Label)
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int NUMBER_FIELD_NUMBER = 3;
    private int number_;
    /**
     * <code>optional int32 number = 3;</code>
     */
    public boolean hasNumber() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 number = 3;</code>
     */
    public int getNumber() {
      return number_;
    }

    public static final int LABEL_FIELD_NUMBER = 4;
    private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label label_;
    /**
     * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
     */
    public boolean hasLabel() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel() {
      return label_;
    }

    public static final int TYPE_FIELD_NUMBER = 5;
    private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type type_;
    /**
     * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
     *
     * <pre>
     * If type_name is set, this need not be set.  If both this and type_name
     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
     * </pre>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
     *
     * <pre>
     * If type_name is set, this need not be set.  If both this and type_name
     * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType() {
      return type_;
    }

    public static final int TYPE_NAME_FIELD_NUMBER = 6;
    private java.lang.Object typeName_;
    /**
     * <code>optional string type_name = 6;</code>
     *
     * <pre>
     * For message and enum types, this is the name of the type.  If the name
     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
     * rules are used to find the type (i.e. first the nested types within this
     * message are searched, then within the parent, on up to the root
     * namespace).
     * </pre>
     */
    public boolean hasTypeName() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string type_name = 6;</code>
     *
     * <pre>
     * For message and enum types, this is the name of the type.  If the name
     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
     * rules are used to find the type (i.e. first the nested types within this
     * message are searched, then within the parent, on up to the root
     * namespace).
     * </pre>
     */
    public java.lang.String getTypeName() {
      java.lang.Object ref = typeName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          typeName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string type_name = 6;</code>
     *
     * <pre>
     * For message and enum types, this is the name of the type.  If the name
     * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
     * rules are used to find the type (i.e. first the nested types within this
     * message are searched, then within the parent, on up to the root
     * namespace).
     * </pre>
     */
    public com.google.protobuf.ByteString
        getTypeNameBytes() {
      java.lang.Object ref = typeName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        typeName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXTENDEE_FIELD_NUMBER = 2;
    private java.lang.Object extendee_;
    /**
     * <code>optional string extendee = 2;</code>
     *
     * <pre>
     * For extensions, this is the name of the type being extended.  It is
     * resolved in the same manner as type_name.
     * </pre>
     */
    public boolean hasExtendee() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string extendee = 2;</code>
     *
     * <pre>
     * For extensions, this is the name of the type being extended.  It is
     * resolved in the same manner as type_name.
     * </pre>
     */
    public java.lang.String getExtendee() {
      java.lang.Object ref = extendee_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          extendee_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string extendee = 2;</code>
     *
     * <pre>
     * For extensions, this is the name of the type being extended.  It is
     * resolved in the same manner as type_name.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getExtendeeBytes() {
      java.lang.Object ref = extendee_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        extendee_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEFAULT_VALUE_FIELD_NUMBER = 7;
    private java.lang.Object defaultValue_;
    /**
     * <code>optional string default_value = 7;</code>
     *
     * <pre>
     * For numeric types, contains the original text representation of the value.
     * For booleans, "true" or "false".
     * For strings, contains the default text contents (not escaped in any way).
     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
     * TODO(kenton):  Base-64 encode?
     * </pre>
     */
    public boolean hasDefaultValue() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string default_value = 7;</code>
     *
     * <pre>
     * For numeric types, contains the original text representation of the value.
     * For booleans, "true" or "false".
     * For strings, contains the default text contents (not escaped in any way).
     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
     * TODO(kenton):  Base-64 encode?
     * </pre>
     */
    public java.lang.String getDefaultValue() {
      java.lang.Object ref = defaultValue_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          defaultValue_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string default_value = 7;</code>
     *
     * <pre>
     * For numeric types, contains the original text representation of the value.
     * For booleans, "true" or "false".
     * For strings, contains the default text contents (not escaped in any way).
     * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
     * TODO(kenton):  Base-64 encode?
     * </pre>
     */
    public com.google.protobuf.ByteString
        getDefaultValueBytes() {
      java.lang.Object ref = defaultValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        defaultValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ONEOF_INDEX_FIELD_NUMBER = 9;
    private int oneofIndex_;
    /**
     * <code>optional int32 oneof_index = 9;</code>
     *
     * <pre>
     * If set, gives the index of a oneof in the containing type's oneof_decl
     * list.  This field is a member of that oneof.  Extensions of a oneof should
     * not set this since the oneof to which they belong will be inferred based
     * on the extension range containing the extension's field number.
     * </pre>
     */
    public boolean hasOneofIndex() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int32 oneof_index = 9;</code>
     *
     * <pre>
     * If set, gives the index of a oneof in the containing type's oneof_decl
     * list.  This field is a member of that oneof.  Extensions of a oneof should
     * not set this since the oneof to which they belong will be inferred based
     * on the extension range containing the extension's field number.
     * </pre>
     */
    public int getOneofIndex() {
      return oneofIndex_;
    }

    public static final int OPTIONS_FIELD_NUMBER = 8;
    private com.google.protobuf.DescriptorProtos.FieldOptions options_;
    /**
     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
     */
    public boolean hasOptions() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldOptions getOptions() {
      return options_;
    }
    /**
     * <code>optional .google.protobuf.FieldOptions options = 8;</code>
     */
    public com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder() {
      return options_;
    }

    private void initFields() {
      name_ = "";
      number_ = 0;
      label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
      type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
      typeName_ = "";
      extendee_ = "";
      defaultValue_ = "";
      oneofIndex_ = 0;
      options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasOptions()) {
        if (!getOptions().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(2, getExtendeeBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(3, number_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeEnum(4, label_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(5, type_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(6, getTypeNameBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, getDefaultValueBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(8, options_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(9, oneofIndex_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getExtendeeBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, number_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, label_.getNumber());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, type_.getNumber());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getTypeNameBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getDefaultValueBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, options_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, oneofIndex_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldDescriptorProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.FieldDescriptorProto}
     *
     * <pre>
     * Describes a field within a message.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.FieldDescriptorProto)
        com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.FieldDescriptorProto.class, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOptionsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        number_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
        bitField0_ = (bitField0_ & ~0x00000004);
        type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
        bitField0_ = (bitField0_ & ~0x00000008);
        typeName_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        extendee_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        defaultValue_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        oneofIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto build() {
        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto buildPartial() {
        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = new com.google.protobuf.DescriptorProtos.FieldDescriptorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.number_ = number_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.label_ = label_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.typeName_ = typeName_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.extendee_ = extendee_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.defaultValue_ = defaultValue_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.oneofIndex_ = oneofIndex_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.FieldDescriptorProto) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldDescriptorProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldDescriptorProto other) {
        if (other == com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasNumber()) {
          setNumber(other.getNumber());
        }
        if (other.hasLabel()) {
          setLabel(other.getLabel());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasTypeName()) {
          bitField0_ |= 0x00000010;
          typeName_ = other.typeName_;
          onChanged();
        }
        if (other.hasExtendee()) {
          bitField0_ |= 0x00000020;
          extendee_ = other.extendee_;
          onChanged();
        }
        if (other.hasDefaultValue()) {
          bitField0_ |= 0x00000040;
          defaultValue_ = other.defaultValue_;
          onChanged();
        }
        if (other.hasOneofIndex()) {
          setOneofIndex(other.getOneofIndex());
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasOptions()) {
          if (!getOptions().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.FieldDescriptorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.FieldDescriptorProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private int number_ ;
      /**
       * <code>optional int32 number = 3;</code>
       */
      public boolean hasNumber() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 number = 3;</code>
       */
      public int getNumber() {
        return number_;
      }
      /**
       * <code>optional int32 number = 3;</code>
       */
      public Builder setNumber(int value) {
        bitField0_ |= 0x00000002;
        number_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 number = 3;</code>
       */
      public Builder clearNumber() {
        bitField0_ = (bitField0_ & ~0x00000002);
        number_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
      /**
       * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
       */
      public boolean hasLabel() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel() {
        return label_;
      }
      /**
       * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
       */
      public Builder setLabel(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        label_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .google.protobuf.FieldDescriptorProto.Label label = 4;</code>
       */
      public Builder clearLabel() {
        bitField0_ = (bitField0_ & ~0x00000004);
        label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
        onChanged();
        return this;
      }

      private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
      /**
       * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
       *
       * <pre>
       * If type_name is set, this need not be set.  If both this and type_name
       * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
       * </pre>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
       *
       * <pre>
       * If type_name is set, this need not be set.  If both this and type_name
       * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType() {
        return type_;
      }
      /**
       * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
       *
       * <pre>
       * If type_name is set, this need not be set.  If both this and type_name
       * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
       * </pre>
       */
      public Builder setType(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .google.protobuf.FieldDescriptorProto.Type type = 5;</code>
       *
       * <pre>
       * If type_name is set, this need not be set.  If both this and type_name
       * are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
       * </pre>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
        onChanged();
        return this;
      }

      private java.lang.Object typeName_ = "";
      /**
       * <code>optional string type_name = 6;</code>
       *
       * <pre>
       * For message and enum types, this is the name of the type.  If the name
       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
       * rules are used to find the type (i.e. first the nested types within this
       * message are searched, then within the parent, on up to the root
       * namespace).
       * </pre>
       */
      public boolean hasTypeName() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string type_name = 6;</code>
       *
       * <pre>
       * For message and enum types, this is the name of the type.  If the name
       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
       * rules are used to find the type (i.e. first the nested types within this
       * message are searched, then within the parent, on up to the root
       * namespace).
       * </pre>
       */
      public java.lang.String getTypeName() {
        java.lang.Object ref = typeName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            typeName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string type_name = 6;</code>
       *
       * <pre>
       * For message and enum types, this is the name of the type.  If the name
       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
       * rules are used to find the type (i.e. first the nested types within this
       * message are searched, then within the parent, on up to the root
       * namespace).
       * </pre>
       */
      public com.google.protobuf.ByteString
          getTypeNameBytes() {
        java.lang.Object ref = typeName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          typeName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string type_name = 6;</code>
       *
       * <pre>
       * For message and enum types, this is the name of the type.  If the name
       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
       * rules are used to find the type (i.e. first the nested types within this
       * message are searched, then within the parent, on up to the root
       * namespace).
       * </pre>
       */
      public Builder setTypeName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        typeName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string type_name = 6;</code>
       *
       * <pre>
       * For message and enum types, this is the name of the type.  If the name
       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
       * rules are used to find the type (i.e. first the nested types within this
       * message are searched, then within the parent, on up to the root
       * namespace).
       * </pre>
       */
      public Builder clearTypeName() {
        bitField0_ = (bitField0_ & ~0x00000010);
        typeName_ = getDefaultInstance().getTypeName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string type_name = 6;</code>
       *
       * <pre>
       * For message and enum types, this is the name of the type.  If the name
       * starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
       * rules are used to find the type (i.e. first the nested types within this
       * message are searched, then within the parent, on up to the root
       * namespace).
       * </pre>
       */
      public Builder setTypeNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        typeName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object extendee_ = "";
      /**
       * <code>optional string extendee = 2;</code>
       *
       * <pre>
       * For extensions, this is the name of the type being extended.  It is
       * resolved in the same manner as type_name.
       * </pre>
       */
      public boolean hasExtendee() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string extendee = 2;</code>
       *
       * <pre>
       * For extensions, this is the name of the type being extended.  It is
       * resolved in the same manner as type_name.
       * </pre>
       */
      public java.lang.String getExtendee() {
        java.lang.Object ref = extendee_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            extendee_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string extendee = 2;</code>
       *
       * <pre>
       * For extensions, this is the name of the type being extended.  It is
       * resolved in the same manner as type_name.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getExtendeeBytes() {
        java.lang.Object ref = extendee_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          extendee_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string extendee = 2;</code>
       *
       * <pre>
       * For extensions, this is the name of the type being extended.  It is
       * resolved in the same manner as type_name.
       * </pre>
       */
      public Builder setExtendee(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        extendee_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string extendee = 2;</code>
       *
       * <pre>
       * For extensions, this is the name of the type being extended.  It is
       * resolved in the same manner as type_name.
       * </pre>
       */
      public Builder clearExtendee() {
        bitField0_ = (bitField0_ & ~0x00000020);
        extendee_ = getDefaultInstance().getExtendee();
        onChanged();
        return this;
      }
      /**
       * <code>optional string extendee = 2;</code>
       *
       * <pre>
       * For extensions, this is the name of the type being extended.  It is
       * resolved in the same manner as type_name.
       * </pre>
       */
      public Builder setExtendeeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        extendee_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object defaultValue_ = "";
      /**
       * <code>optional string default_value = 7;</code>
       *
       * <pre>
       * For numeric types, contains the original text representation of the value.
       * For booleans, "true" or "false".
       * For strings, contains the default text contents (not escaped in any way).
       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
       * TODO(kenton):  Base-64 encode?
       * </pre>
       */
      public boolean hasDefaultValue() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string default_value = 7;</code>
       *
       * <pre>
       * For numeric types, contains the original text representation of the value.
       * For booleans, "true" or "false".
       * For strings, contains the default text contents (not escaped in any way).
       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
       * TODO(kenton):  Base-64 encode?
       * </pre>
       */
      public java.lang.String getDefaultValue() {
        java.lang.Object ref = defaultValue_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            defaultValue_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string default_value = 7;</code>
       *
       * <pre>
       * For numeric types, contains the original text representation of the value.
       * For booleans, "true" or "false".
       * For strings, contains the default text contents (not escaped in any way).
       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
       * TODO(kenton):  Base-64 encode?
       * </pre>
       */
      public com.google.protobuf.ByteString
          getDefaultValueBytes() {
        java.lang.Object ref = defaultValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          defaultValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string default_value = 7;</code>
       *
       * <pre>
       * For numeric types, contains the original text representation of the value.
       * For booleans, "true" or "false".
       * For strings, contains the default text contents (not escaped in any way).
       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
       * TODO(kenton):  Base-64 encode?
       * </pre>
       */
      public Builder setDefaultValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        defaultValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string default_value = 7;</code>
       *
       * <pre>
       * For numeric types, contains the original text representation of the value.
       * For booleans, "true" or "false".
       * For strings, contains the default text contents (not escaped in any way).
       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
       * TODO(kenton):  Base-64 encode?
       * </pre>
       */
      public Builder clearDefaultValue() {
        bitField0_ = (bitField0_ & ~0x00000040);
        defaultValue_ = getDefaultInstance().getDefaultValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string default_value = 7;</code>
       *
       * <pre>
       * For numeric types, contains the original text representation of the value.
       * For booleans, "true" or "false".
       * For strings, contains the default text contents (not escaped in any way).
       * For bytes, contains the C escaped value.  All bytes &gt;= 128 are escaped.
       * TODO(kenton):  Base-64 encode?
       * </pre>
       */
      public Builder setDefaultValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        defaultValue_ = value;
        onChanged();
        return this;
      }

      private int oneofIndex_ ;
      /**
       * <code>optional int32 oneof_index = 9;</code>
       *
       * <pre>
       * If set, gives the index of a oneof in the containing type's oneof_decl
       * list.  This field is a member of that oneof.  Extensions of a oneof should
       * not set this since the oneof to which they belong will be inferred based
       * on the extension range containing the extension's field number.
       * </pre>
       */
      public boolean hasOneofIndex() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int32 oneof_index = 9;</code>
       *
       * <pre>
       * If set, gives the index of a oneof in the containing type's oneof_decl
       * list.  This field is a member of that oneof.  Extensions of a oneof should
       * not set this since the oneof to which they belong will be inferred based
       * on the extension range containing the extension's field number.
       * </pre>
       */
      public int getOneofIndex() {
        return oneofIndex_;
      }
      /**
       * <code>optional int32 oneof_index = 9;</code>
       *
       * <pre>
       * If set, gives the index of a oneof in the containing type's oneof_decl
       * list.  This field is a member of that oneof.  Extensions of a oneof should
       * not set this since the oneof to which they belong will be inferred based
       * on the extension range containing the extension's field number.
       * </pre>
       */
      public Builder setOneofIndex(int value) {
        bitField0_ |= 0x00000080;
        oneofIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 oneof_index = 9;</code>
       *
       * <pre>
       * If set, gives the index of a oneof in the containing type's oneof_decl
       * list.  This field is a member of that oneof.  Extensions of a oneof should
       * not set this since the oneof to which they belong will be inferred based
       * on the extension range containing the extension's field number.
       * </pre>
       */
      public Builder clearOneofIndex() {
        bitField0_ = (bitField0_ & ~0x00000080);
        oneofIndex_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.DescriptorProtos.FieldOptions options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.FieldOptions, com.google.protobuf.DescriptorProtos.FieldOptions.Builder, com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      public boolean hasOptions() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      public Builder setOptions(com.google.protobuf.DescriptorProtos.FieldOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      public Builder setOptions(
          com.google.protobuf.DescriptorProtos.FieldOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.FieldOptions value) {
        if (optionsBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              options_ != com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance()) {
            options_ =
              com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
          onChanged();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldOptions.Builder getOptionsBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      public com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_;
        }
      }
      /**
       * <code>optional .google.protobuf.FieldOptions options = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.FieldOptions, com.google.protobuf.DescriptorProtos.FieldOptions.Builder, com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.FieldDescriptorProto)
    }

    static {
      defaultInstance = new FieldDescriptorProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.FieldDescriptorProto)
  }

  public interface OneofDescriptorProtoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.OneofDescriptorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();
  }
  /**
   * Protobuf type {@code google.protobuf.OneofDescriptorProto}
   *
   * <pre>
   * Describes a oneof.
   * </pre>
   */
  public static final class OneofDescriptorProto extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.OneofDescriptorProto)
      OneofDescriptorProtoOrBuilder {
    // Use OneofDescriptorProto.newBuilder() to construct.
    private OneofDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OneofDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final OneofDescriptorProto defaultInstance;
    public static OneofDescriptorProto getDefaultInstance() {
      return defaultInstance;
    }

    public OneofDescriptorProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OneofDescriptorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.OneofDescriptorProto.class, com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder.class);
    }

    public static com.google.protobuf.Parser<OneofDescriptorProto> PARSER =
        new com.google.protobuf.AbstractParser<OneofDescriptorProto>() {
      public OneofDescriptorProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new OneofDescriptorProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<OneofDescriptorProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      name_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.OneofDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.OneofDescriptorProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.OneofDescriptorProto}
     *
     * <pre>
     * Describes a oneof.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.OneofDescriptorProto)
        com.google.protobuf.DescriptorProtos.OneofDescriptorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.OneofDescriptorProto.class, com.google.protobuf.DescriptorProtos.OneofDescriptorProto.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.OneofDescriptorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_OneofDescriptorProto_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.OneofDescriptorProto getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.OneofDescriptorProto.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.OneofDescriptorProto build() {
        com.google.protobuf.DescriptorProtos.OneofDescriptorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.OneofDescriptorProto buildPartial() {
        com.google.protobuf.DescriptorProtos.OneofDescriptorProto result = new com.google.protobuf.DescriptorProtos.OneofDescriptorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.OneofDescriptorProto) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.OneofDescriptorProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.OneofDescriptorProto other) {
        if (other == com.google.protobuf.DescriptorProtos.OneofDescriptorProto.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.OneofDescriptorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.OneofDescriptorProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.OneofDescriptorProto)
    }

    static {
      defaultInstance = new OneofDescriptorProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.OneofDescriptorProto)
  }

  public interface EnumDescriptorProtoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.EnumDescriptorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> 
        getValueList();
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index);
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    int getValueCount();
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
        getValueOrBuilderList();
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
        int index);

    /**
     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
     */
    boolean hasOptions();
    /**
     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumOptions getOptions();
    /**
     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code google.protobuf.EnumDescriptorProto}
   *
   * <pre>
   * Describes an enum type.
   * </pre>
   */
  public static final class EnumDescriptorProto extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.EnumDescriptorProto)
      EnumDescriptorProtoOrBuilder {
    // Use EnumDescriptorProto.newBuilder() to construct.
    private EnumDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EnumDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EnumDescriptorProto defaultInstance;
    public static EnumDescriptorProto getDefaultInstance() {
      return defaultInstance;
    }

    public EnumDescriptorProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EnumDescriptorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                value_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              value_.add(input.readMessage(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              com.google.protobuf.DescriptorProtos.EnumOptions.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.EnumOptions.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          value_ = java.util.Collections.unmodifiableList(value_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.class, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder.class);
    }

    public static com.google.protobuf.Parser<EnumDescriptorProto> PARSER =
        new com.google.protobuf.AbstractParser<EnumDescriptorProto>() {
      public EnumDescriptorProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EnumDescriptorProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EnumDescriptorProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> value_;
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> getValueList() {
      return value_;
    }
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
        getValueOrBuilderList() {
      return value_;
    }
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    public int getValueCount() {
      return value_.size();
    }
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index) {
      return value_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
        int index) {
      return value_.get(index);
    }

    public static final int OPTIONS_FIELD_NUMBER = 3;
    private com.google.protobuf.DescriptorProtos.EnumOptions options_;
    /**
     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
     */
    public boolean hasOptions() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumOptions getOptions() {
      return options_;
    }
    /**
     * <code>optional .google.protobuf.EnumOptions options = 3;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder() {
      return options_;
    }

    private void initFields() {
      name_ = "";
      value_ = java.util.Collections.emptyList();
      options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getValueCount(); i++) {
        if (!getValue(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasOptions()) {
        if (!getOptions().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      for (int i = 0; i < value_.size(); i++) {
        output.writeMessage(2, value_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(3, options_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      for (int i = 0; i < value_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, value_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, options_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumDescriptorProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.EnumDescriptorProto}
     *
     * <pre>
     * Describes an enum type.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.EnumDescriptorProto)
        com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.EnumDescriptorProto.class, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getValueFieldBuilder();
          getOptionsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (valueBuilder_ == null) {
          value_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          valueBuilder_.clear();
        }
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto build() {
        com.google.protobuf.DescriptorProtos.EnumDescriptorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto buildPartial() {
        com.google.protobuf.DescriptorProtos.EnumDescriptorProto result = new com.google.protobuf.DescriptorProtos.EnumDescriptorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (valueBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            value_ = java.util.Collections.unmodifiableList(value_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.value_ = value_;
        } else {
          result.value_ = valueBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.EnumDescriptorProto) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumDescriptorProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumDescriptorProto other) {
        if (other == com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (valueBuilder_ == null) {
          if (!other.value_.isEmpty()) {
            if (value_.isEmpty()) {
              value_ = other.value_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureValueIsMutable();
              value_.addAll(other.value_);
            }
            onChanged();
          }
        } else {
          if (!other.value_.isEmpty()) {
            if (valueBuilder_.isEmpty()) {
              valueBuilder_.dispose();
              valueBuilder_ = null;
              value_ = other.value_;
              bitField0_ = (bitField0_ & ~0x00000002);
              valueBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getValueFieldBuilder() : null;
            } else {
              valueBuilder_.addAllMessages(other.value_);
            }
          }
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getValueCount(); i++) {
          if (!getValue(i).isInitialized()) {
            
            return false;
          }
        }
        if (hasOptions()) {
          if (!getOptions().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.EnumDescriptorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.EnumDescriptorProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> value_ =
        java.util.Collections.emptyList();
      private void ensureValueIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          value_ = new java.util.ArrayList<>(value_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> valueBuilder_;

      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> getValueList() {
        if (valueBuilder_ == null) {
          return java.util.Collections.unmodifiableList(value_);
        } else {
          return valueBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public int getValueCount() {
        if (valueBuilder_ == null) {
          return value_.size();
        } else {
          return valueBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index) {
        if (valueBuilder_ == null) {
          return value_.get(index);
        } else {
          return valueBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder setValue(
          int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
        if (valueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueIsMutable();
          value_.set(index, value);
          onChanged();
        } else {
          valueBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder setValue(
          int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          value_.set(index, builderForValue.build());
          onChanged();
        } else {
          valueBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder addValue(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
        if (valueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueIsMutable();
          value_.add(value);
          onChanged();
        } else {
          valueBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder addValue(
          int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
        if (valueBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureValueIsMutable();
          value_.add(index, value);
          onChanged();
        } else {
          valueBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder addValue(
          com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          value_.add(builderForValue.build());
          onChanged();
        } else {
          valueBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder addValue(
          int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          value_.add(index, builderForValue.build());
          onChanged();
        } else {
          valueBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder addAllValue(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> values) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, value_);
          onChanged();
        } else {
          valueBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder clearValue() {
        if (valueBuilder_ == null) {
          value_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          valueBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public Builder removeValue(int index) {
        if (valueBuilder_ == null) {
          ensureValueIsMutable();
          value_.remove(index);
          onChanged();
        } else {
          valueBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder getValueBuilder(
          int index) {
        return getValueFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
          int index) {
        if (valueBuilder_ == null) {
          return value_.get(index);  } else {
          return valueBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
           getValueOrBuilderList() {
        if (valueBuilder_ != null) {
          return valueBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(value_);
        }
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder addValueBuilder() {
        return getValueFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder addValueBuilder(
          int index) {
        return getValueFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.EnumValueDescriptorProto value = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder> 
           getValueBuilderList() {
        return getValueFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
          getValueFieldBuilder() {
        if (valueBuilder_ == null) {
          valueBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  value_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          value_ = null;
        }
        return valueBuilder_;
      }

      private com.google.protobuf.DescriptorProtos.EnumOptions options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumOptions, com.google.protobuf.DescriptorProtos.EnumOptions.Builder, com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      public boolean hasOptions() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      public Builder setOptions(com.google.protobuf.DescriptorProtos.EnumOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      public Builder setOptions(
          com.google.protobuf.DescriptorProtos.EnumOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.EnumOptions value) {
        if (optionsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              options_ != com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance()) {
            options_ =
              com.google.protobuf.DescriptorProtos.EnumOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
          onChanged();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumOptions.Builder getOptionsBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_;
        }
      }
      /**
       * <code>optional .google.protobuf.EnumOptions options = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumOptions, com.google.protobuf.DescriptorProtos.EnumOptions.Builder, com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumDescriptorProto)
    }

    static {
      defaultInstance = new EnumDescriptorProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto)
  }

  public interface EnumValueDescriptorProtoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.EnumValueDescriptorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional int32 number = 2;</code>
     */
    boolean hasNumber();
    /**
     * <code>optional int32 number = 2;</code>
     */
    int getNumber();

    /**
     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
     */
    boolean hasOptions();
    /**
     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions();
    /**
     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
     */
    com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code google.protobuf.EnumValueDescriptorProto}
   *
   * <pre>
   * Describes a value within an enum.
   * </pre>
   */
  public static final class EnumValueDescriptorProto extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.EnumValueDescriptorProto)
      EnumValueDescriptorProtoOrBuilder {
    // Use EnumValueDescriptorProto.newBuilder() to construct.
    private EnumValueDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EnumValueDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EnumValueDescriptorProto defaultInstance;
    public static EnumValueDescriptorProto getDefaultInstance() {
      return defaultInstance;
    }

    public EnumValueDescriptorProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EnumValueDescriptorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              number_ = input.readInt32();
              break;
            }
            case 26: {
              com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.EnumValueOptions.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.class, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder.class);
    }

    public static com.google.protobuf.Parser<EnumValueDescriptorProto> PARSER =
        new com.google.protobuf.AbstractParser<EnumValueDescriptorProto>() {
      public EnumValueDescriptorProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EnumValueDescriptorProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EnumValueDescriptorProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int NUMBER_FIELD_NUMBER = 2;
    private int number_;
    /**
     * <code>optional int32 number = 2;</code>
     */
    public boolean hasNumber() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 number = 2;</code>
     */
    public int getNumber() {
      return number_;
    }

    public static final int OPTIONS_FIELD_NUMBER = 3;
    private com.google.protobuf.DescriptorProtos.EnumValueOptions options_;
    /**
     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
     */
    public boolean hasOptions() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions() {
      return options_;
    }
    /**
     * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
     */
    public com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder() {
      return options_;
    }

    private void initFields() {
      name_ = "";
      number_ = 0;
      options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasOptions()) {
        if (!getOptions().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, number_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, options_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, number_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, options_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.EnumValueDescriptorProto}
     *
     * <pre>
     * Describes a value within an enum.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.EnumValueDescriptorProto)
        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.class, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOptionsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        number_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto build() {
        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto buildPartial() {
        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = new com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.number_ = number_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto other) {
        if (other == com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasNumber()) {
          setNumber(other.getNumber());
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasOptions()) {
          if (!getOptions().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private int number_ ;
      /**
       * <code>optional int32 number = 2;</code>
       */
      public boolean hasNumber() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 number = 2;</code>
       */
      public int getNumber() {
        return number_;
      }
      /**
       * <code>optional int32 number = 2;</code>
       */
      public Builder setNumber(int value) {
        bitField0_ |= 0x00000002;
        number_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 number = 2;</code>
       */
      public Builder clearNumber() {
        bitField0_ = (bitField0_ & ~0x00000002);
        number_ = 0;
        onChanged();
        return this;
      }

      private com.google.protobuf.DescriptorProtos.EnumValueOptions options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumValueOptions, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder, com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      public boolean hasOptions() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      public Builder setOptions(com.google.protobuf.DescriptorProtos.EnumValueOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      public Builder setOptions(
          com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.EnumValueOptions value) {
        if (optionsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              options_ != com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance()) {
            options_ =
              com.google.protobuf.DescriptorProtos.EnumValueOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
          onChanged();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder getOptionsBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_;
        }
      }
      /**
       * <code>optional .google.protobuf.EnumValueOptions options = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.EnumValueOptions, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder, com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumValueDescriptorProto)
    }

    static {
      defaultInstance = new EnumValueDescriptorProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueDescriptorProto)
  }

  public interface ServiceDescriptorProtoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.ServiceDescriptorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> 
        getMethodList();
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index);
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    int getMethodCount();
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
        getMethodOrBuilderList();
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
        int index);

    /**
     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
     */
    boolean hasOptions();
    /**
     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
     */
    com.google.protobuf.DescriptorProtos.ServiceOptions getOptions();
    /**
     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
     */
    com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code google.protobuf.ServiceDescriptorProto}
   *
   * <pre>
   * Describes a service.
   * </pre>
   */
  public static final class ServiceDescriptorProto extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.ServiceDescriptorProto)
      ServiceDescriptorProtoOrBuilder {
    // Use ServiceDescriptorProto.newBuilder() to construct.
    private ServiceDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ServiceDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ServiceDescriptorProto defaultInstance;
    public static ServiceDescriptorProto getDefaultInstance() {
      return defaultInstance;
    }

    public ServiceDescriptorProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ServiceDescriptorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                method_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              method_.add(input.readMessage(com.google.protobuf.DescriptorProtos.MethodDescriptorProto.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              com.google.protobuf.DescriptorProtos.ServiceOptions.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.ServiceOptions.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          method_ = java.util.Collections.unmodifiableList(method_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.class, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder.class);
    }

    public static com.google.protobuf.Parser<ServiceDescriptorProto> PARSER =
        new com.google.protobuf.AbstractParser<ServiceDescriptorProto>() {
      public ServiceDescriptorProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ServiceDescriptorProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ServiceDescriptorProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METHOD_FIELD_NUMBER = 2;
    private java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> method_;
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> getMethodList() {
      return method_;
    }
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
        getMethodOrBuilderList() {
      return method_;
    }
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    public int getMethodCount() {
      return method_.size();
    }
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index) {
      return method_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
        int index) {
      return method_.get(index);
    }

    public static final int OPTIONS_FIELD_NUMBER = 3;
    private com.google.protobuf.DescriptorProtos.ServiceOptions options_;
    /**
     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
     */
    public boolean hasOptions() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
     */
    public com.google.protobuf.DescriptorProtos.ServiceOptions getOptions() {
      return options_;
    }
    /**
     * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
     */
    public com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder() {
      return options_;
    }

    private void initFields() {
      name_ = "";
      method_ = java.util.Collections.emptyList();
      options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getMethodCount(); i++) {
        if (!getMethod(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (hasOptions()) {
        if (!getOptions().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      for (int i = 0; i < method_.size(); i++) {
        output.writeMessage(2, method_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(3, options_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      for (int i = 0; i < method_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, method_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, options_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.ServiceDescriptorProto}
     *
     * <pre>
     * Describes a service.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.ServiceDescriptorProto)
        com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.class, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getMethodFieldBuilder();
          getOptionsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (methodBuilder_ == null) {
          method_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          methodBuilder_.clear();
        }
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto build() {
        com.google.protobuf.DescriptorProtos.ServiceDescriptorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto buildPartial() {
        com.google.protobuf.DescriptorProtos.ServiceDescriptorProto result = new com.google.protobuf.DescriptorProtos.ServiceDescriptorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (methodBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            method_ = java.util.Collections.unmodifiableList(method_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.method_ = method_;
        } else {
          result.method_ = methodBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.ServiceDescriptorProto) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.ServiceDescriptorProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto other) {
        if (other == com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (methodBuilder_ == null) {
          if (!other.method_.isEmpty()) {
            if (method_.isEmpty()) {
              method_ = other.method_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureMethodIsMutable();
              method_.addAll(other.method_);
            }
            onChanged();
          }
        } else {
          if (!other.method_.isEmpty()) {
            if (methodBuilder_.isEmpty()) {
              methodBuilder_.dispose();
              methodBuilder_ = null;
              method_ = other.method_;
              bitField0_ = (bitField0_ & ~0x00000002);
              methodBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getMethodFieldBuilder() : null;
            } else {
              methodBuilder_.addAllMessages(other.method_);
            }
          }
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getMethodCount(); i++) {
          if (!getMethod(i).isInitialized()) {
            
            return false;
          }
        }
        if (hasOptions()) {
          if (!getOptions().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.ServiceDescriptorProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> method_ =
        java.util.Collections.emptyList();
      private void ensureMethodIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          method_ = new java.util.ArrayList<>(method_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.MethodDescriptorProto, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> methodBuilder_;

      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> getMethodList() {
        if (methodBuilder_ == null) {
          return java.util.Collections.unmodifiableList(method_);
        } else {
          return methodBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public int getMethodCount() {
        if (methodBuilder_ == null) {
          return method_.size();
        } else {
          return methodBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index) {
        if (methodBuilder_ == null) {
          return method_.get(index);
        } else {
          return methodBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder setMethod(
          int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
        if (methodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodIsMutable();
          method_.set(index, value);
          onChanged();
        } else {
          methodBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder setMethod(
          int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
        if (methodBuilder_ == null) {
          ensureMethodIsMutable();
          method_.set(index, builderForValue.build());
          onChanged();
        } else {
          methodBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder addMethod(com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
        if (methodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodIsMutable();
          method_.add(value);
          onChanged();
        } else {
          methodBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder addMethod(
          int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
        if (methodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMethodIsMutable();
          method_.add(index, value);
          onChanged();
        } else {
          methodBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder addMethod(
          com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
        if (methodBuilder_ == null) {
          ensureMethodIsMutable();
          method_.add(builderForValue.build());
          onChanged();
        } else {
          methodBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder addMethod(
          int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
        if (methodBuilder_ == null) {
          ensureMethodIsMutable();
          method_.add(index, builderForValue.build());
          onChanged();
        } else {
          methodBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder addAllMethod(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProto> values) {
        if (methodBuilder_ == null) {
          ensureMethodIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, method_);
          onChanged();
        } else {
          methodBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder clearMethod() {
        if (methodBuilder_ == null) {
          method_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          methodBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public Builder removeMethod(int index) {
        if (methodBuilder_ == null) {
          ensureMethodIsMutable();
          method_.remove(index);
          onChanged();
        } else {
          methodBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder getMethodBuilder(
          int index) {
        return getMethodFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
          int index) {
        if (methodBuilder_ == null) {
          return method_.get(index);  } else {
          return methodBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
           getMethodOrBuilderList() {
        if (methodBuilder_ != null) {
          return methodBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(method_);
        }
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder addMethodBuilder() {
        return getMethodFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder addMethodBuilder(
          int index) {
        return getMethodFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.MethodDescriptorProto method = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder> 
           getMethodBuilderList() {
        return getMethodFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.MethodDescriptorProto, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
          getMethodFieldBuilder() {
        if (methodBuilder_ == null) {
          methodBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  method_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          method_ = null;
        }
        return methodBuilder_;
      }

      private com.google.protobuf.DescriptorProtos.ServiceOptions options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.ServiceOptions, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder, com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      public boolean hasOptions() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.ServiceOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      public Builder setOptions(com.google.protobuf.DescriptorProtos.ServiceOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      public Builder setOptions(
          com.google.protobuf.DescriptorProtos.ServiceOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.ServiceOptions value) {
        if (optionsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              options_ != com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance()) {
            options_ =
              com.google.protobuf.DescriptorProtos.ServiceOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
          onChanged();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.ServiceOptions.Builder getOptionsBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      public com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_;
        }
      }
      /**
       * <code>optional .google.protobuf.ServiceOptions options = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.ServiceOptions, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder, com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.ServiceDescriptorProto)
    }

    static {
      defaultInstance = new ServiceDescriptorProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.ServiceDescriptorProto)
  }

  public interface MethodDescriptorProtoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.MethodDescriptorProto)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <code>optional string input_type = 2;</code>
     *
     * <pre>
     * Input and output type names.  These are resolved in the same way as
     * FieldDescriptorProto.type_name, but must refer to a message type.
     * </pre>
     */
    boolean hasInputType();
    /**
     * <code>optional string input_type = 2;</code>
     *
     * <pre>
     * Input and output type names.  These are resolved in the same way as
     * FieldDescriptorProto.type_name, but must refer to a message type.
     * </pre>
     */
    java.lang.String getInputType();
    /**
     * <code>optional string input_type = 2;</code>
     *
     * <pre>
     * Input and output type names.  These are resolved in the same way as
     * FieldDescriptorProto.type_name, but must refer to a message type.
     * </pre>
     */
    com.google.protobuf.ByteString
        getInputTypeBytes();

    /**
     * <code>optional string output_type = 3;</code>
     */
    boolean hasOutputType();
    /**
     * <code>optional string output_type = 3;</code>
     */
    java.lang.String getOutputType();
    /**
     * <code>optional string output_type = 3;</code>
     */
    com.google.protobuf.ByteString
        getOutputTypeBytes();

    /**
     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
     */
    boolean hasOptions();
    /**
     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
     */
    com.google.protobuf.DescriptorProtos.MethodOptions getOptions();
    /**
     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
     */
    com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code google.protobuf.MethodDescriptorProto}
   *
   * <pre>
   * Describes a method of a service.
   * </pre>
   */
  public static final class MethodDescriptorProto extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.MethodDescriptorProto)
      MethodDescriptorProtoOrBuilder {
    // Use MethodDescriptorProto.newBuilder() to construct.
    private MethodDescriptorProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MethodDescriptorProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MethodDescriptorProto defaultInstance;
    public static MethodDescriptorProto getDefaultInstance() {
      return defaultInstance;
    }

    public MethodDescriptorProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MethodDescriptorProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              inputType_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              outputType_ = bs;
              break;
            }
            case 34: {
              com.google.protobuf.DescriptorProtos.MethodOptions.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(com.google.protobuf.DescriptorProtos.MethodOptions.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.MethodDescriptorProto.class, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder.class);
    }

    public static com.google.protobuf.Parser<MethodDescriptorProto> PARSER =
        new com.google.protobuf.AbstractParser<MethodDescriptorProto>() {
      public MethodDescriptorProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MethodDescriptorProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MethodDescriptorProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int INPUT_TYPE_FIELD_NUMBER = 2;
    private java.lang.Object inputType_;
    /**
     * <code>optional string input_type = 2;</code>
     *
     * <pre>
     * Input and output type names.  These are resolved in the same way as
     * FieldDescriptorProto.type_name, but must refer to a message type.
     * </pre>
     */
    public boolean hasInputType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string input_type = 2;</code>
     *
     * <pre>
     * Input and output type names.  These are resolved in the same way as
     * FieldDescriptorProto.type_name, but must refer to a message type.
     * </pre>
     */
    public java.lang.String getInputType() {
      java.lang.Object ref = inputType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          inputType_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string input_type = 2;</code>
     *
     * <pre>
     * Input and output type names.  These are resolved in the same way as
     * FieldDescriptorProto.type_name, but must refer to a message type.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getInputTypeBytes() {
      java.lang.Object ref = inputType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        inputType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OUTPUT_TYPE_FIELD_NUMBER = 3;
    private java.lang.Object outputType_;
    /**
     * <code>optional string output_type = 3;</code>
     */
    public boolean hasOutputType() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string output_type = 3;</code>
     */
    public java.lang.String getOutputType() {
      java.lang.Object ref = outputType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          outputType_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string output_type = 3;</code>
     */
    public com.google.protobuf.ByteString
        getOutputTypeBytes() {
      java.lang.Object ref = outputType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        outputType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OPTIONS_FIELD_NUMBER = 4;
    private com.google.protobuf.DescriptorProtos.MethodOptions options_;
    /**
     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
     */
    public boolean hasOptions() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
     */
    public com.google.protobuf.DescriptorProtos.MethodOptions getOptions() {
      return options_;
    }
    /**
     * <code>optional .google.protobuf.MethodOptions options = 4;</code>
     */
    public com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder() {
      return options_;
    }

    private void initFields() {
      name_ = "";
      inputType_ = "";
      outputType_ = "";
      options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (hasOptions()) {
        if (!getOptions().isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getInputTypeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getOutputTypeBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, options_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getInputTypeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getOutputTypeBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, options_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MethodDescriptorProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.MethodDescriptorProto}
     *
     * <pre>
     * Describes a method of a service.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.MethodDescriptorProto)
        com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.MethodDescriptorProto.class, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.MethodDescriptorProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOptionsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        inputType_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        outputType_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto build() {
        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto buildPartial() {
        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = new com.google.protobuf.DescriptorProtos.MethodDescriptorProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.inputType_ = inputType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.outputType_ = outputType_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.MethodDescriptorProto) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.MethodDescriptorProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MethodDescriptorProto other) {
        if (other == com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasInputType()) {
          bitField0_ |= 0x00000002;
          inputType_ = other.inputType_;
          onChanged();
        }
        if (other.hasOutputType()) {
          bitField0_ |= 0x00000004;
          outputType_ = other.outputType_;
          onChanged();
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        if (hasOptions()) {
          if (!getOptions().isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.MethodDescriptorProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.MethodDescriptorProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object inputType_ = "";
      /**
       * <code>optional string input_type = 2;</code>
       *
       * <pre>
       * Input and output type names.  These are resolved in the same way as
       * FieldDescriptorProto.type_name, but must refer to a message type.
       * </pre>
       */
      public boolean hasInputType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string input_type = 2;</code>
       *
       * <pre>
       * Input and output type names.  These are resolved in the same way as
       * FieldDescriptorProto.type_name, but must refer to a message type.
       * </pre>
       */
      public java.lang.String getInputType() {
        java.lang.Object ref = inputType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            inputType_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string input_type = 2;</code>
       *
       * <pre>
       * Input and output type names.  These are resolved in the same way as
       * FieldDescriptorProto.type_name, but must refer to a message type.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getInputTypeBytes() {
        java.lang.Object ref = inputType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          inputType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string input_type = 2;</code>
       *
       * <pre>
       * Input and output type names.  These are resolved in the same way as
       * FieldDescriptorProto.type_name, but must refer to a message type.
       * </pre>
       */
      public Builder setInputType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        inputType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string input_type = 2;</code>
       *
       * <pre>
       * Input and output type names.  These are resolved in the same way as
       * FieldDescriptorProto.type_name, but must refer to a message type.
       * </pre>
       */
      public Builder clearInputType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        inputType_ = getDefaultInstance().getInputType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string input_type = 2;</code>
       *
       * <pre>
       * Input and output type names.  These are resolved in the same way as
       * FieldDescriptorProto.type_name, but must refer to a message type.
       * </pre>
       */
      public Builder setInputTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        inputType_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object outputType_ = "";
      /**
       * <code>optional string output_type = 3;</code>
       */
      public boolean hasOutputType() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string output_type = 3;</code>
       */
      public java.lang.String getOutputType() {
        java.lang.Object ref = outputType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            outputType_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string output_type = 3;</code>
       */
      public com.google.protobuf.ByteString
          getOutputTypeBytes() {
        java.lang.Object ref = outputType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          outputType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string output_type = 3;</code>
       */
      public Builder setOutputType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        outputType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string output_type = 3;</code>
       */
      public Builder clearOutputType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        outputType_ = getDefaultInstance().getOutputType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string output_type = 3;</code>
       */
      public Builder setOutputTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        outputType_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.DescriptorProtos.MethodOptions options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.MethodOptions, com.google.protobuf.DescriptorProtos.MethodOptions.Builder, com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      public boolean hasOptions() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.MethodOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      public Builder setOptions(com.google.protobuf.DescriptorProtos.MethodOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      public Builder setOptions(
          com.google.protobuf.DescriptorProtos.MethodOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.MethodOptions value) {
        if (optionsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              options_ != com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance()) {
            options_ =
              com.google.protobuf.DescriptorProtos.MethodOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
          onChanged();
        } else {
          optionsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.MethodOptions.Builder getOptionsBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      public com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_;
        }
      }
      /**
       * <code>optional .google.protobuf.MethodOptions options = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.google.protobuf.DescriptorProtos.MethodOptions, com.google.protobuf.DescriptorProtos.MethodOptions.Builder, com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.MethodDescriptorProto)
    }

    static {
      defaultInstance = new MethodDescriptorProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.MethodDescriptorProto)
  }

  public interface FileOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.FileOptions)
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<FileOptions> {

    /**
     * <code>optional string java_package = 1;</code>
     *
     * <pre>
     * Sets the Java package where classes generated from this .proto will be
     * placed.  By default, the proto package is used, but this is often
     * inappropriate because proto packages do not normally start with backwards
     * domain names.
     * </pre>
     */
    boolean hasJavaPackage();
    /**
     * <code>optional string java_package = 1;</code>
     *
     * <pre>
     * Sets the Java package where classes generated from this .proto will be
     * placed.  By default, the proto package is used, but this is often
     * inappropriate because proto packages do not normally start with backwards
     * domain names.
     * </pre>
     */
    java.lang.String getJavaPackage();
    /**
     * <code>optional string java_package = 1;</code>
     *
     * <pre>
     * Sets the Java package where classes generated from this .proto will be
     * placed.  By default, the proto package is used, but this is often
     * inappropriate because proto packages do not normally start with backwards
     * domain names.
     * </pre>
     */
    com.google.protobuf.ByteString
        getJavaPackageBytes();

    /**
     * <code>optional string java_outer_classname = 8;</code>
     *
     * <pre>
     * If set, all the classes from the .proto file are wrapped in a single
     * outer class with the given name.  This applies to both Proto1
     * (equivalent to the old "--one_java_file" option) and Proto2 (where
     * a .proto always translates to a single class, but you may want to
     * explicitly choose the class name).
     * </pre>
     */
    boolean hasJavaOuterClassname();
    /**
     * <code>optional string java_outer_classname = 8;</code>
     *
     * <pre>
     * If set, all the classes from the .proto file are wrapped in a single
     * outer class with the given name.  This applies to both Proto1
     * (equivalent to the old "--one_java_file" option) and Proto2 (where
     * a .proto always translates to a single class, but you may want to
     * explicitly choose the class name).
     * </pre>
     */
    java.lang.String getJavaOuterClassname();
    /**
     * <code>optional string java_outer_classname = 8;</code>
     *
     * <pre>
     * If set, all the classes from the .proto file are wrapped in a single
     * outer class with the given name.  This applies to both Proto1
     * (equivalent to the old "--one_java_file" option) and Proto2 (where
     * a .proto always translates to a single class, but you may want to
     * explicitly choose the class name).
     * </pre>
     */
    com.google.protobuf.ByteString
        getJavaOuterClassnameBytes();

    /**
     * <code>optional bool java_multiple_files = 10 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java code generator will generate a separate .java
     * file for each top-level message, enum, and service defined in the .proto
     * file.  Thus, these types will *not* be nested inside the outer class
     * named by java_outer_classname.  However, the outer class will still be
     * generated to contain the file's getDescriptor() method as well as any
     * top-level extensions defined in the file.
     * </pre>
     */
    boolean hasJavaMultipleFiles();
    /**
     * <code>optional bool java_multiple_files = 10 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java code generator will generate a separate .java
     * file for each top-level message, enum, and service defined in the .proto
     * file.  Thus, these types will *not* be nested inside the outer class
     * named by java_outer_classname.  However, the outer class will still be
     * generated to contain the file's getDescriptor() method as well as any
     * top-level extensions defined in the file.
     * </pre>
     */
    boolean getJavaMultipleFiles();

    /**
     * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java code generator will generate equals() and
     * hashCode() methods for all messages defined in the .proto file.
     * - In the full runtime, this is purely a speed optimization, as the
     * AbstractMessage base class includes reflection-based implementations of
     * these methods.
     *- In the lite runtime, setting this option changes the semantics of
     * equals() and hashCode() to more closely match those of the full runtime;
     * the generated methods compute their results based on field values rather
     * than object identity. (Implementations should not assume that hashcodes
     * will be consistent across runtimes or versions of the protocol compiler.)
     * </pre>
     */
    boolean hasJavaGenerateEqualsAndHash();
    /**
     * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java code generator will generate equals() and
     * hashCode() methods for all messages defined in the .proto file.
     * - In the full runtime, this is purely a speed optimization, as the
     * AbstractMessage base class includes reflection-based implementations of
     * these methods.
     *- In the lite runtime, setting this option changes the semantics of
     * equals() and hashCode() to more closely match those of the full runtime;
     * the generated methods compute their results based on field values rather
     * than object identity. (Implementations should not assume that hashcodes
     * will be consistent across runtimes or versions of the protocol compiler.)
     * </pre>
     */
    boolean getJavaGenerateEqualsAndHash();

    /**
     * <code>optional bool java_string_check_utf8 = 27 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java2 code generator will generate code that
     * throws an exception whenever an attempt is made to assign a non-UTF-8
     * byte sequence to a string field.
     * Message reflection will do the same.
     * However, an extension field still accepts non-UTF-8 byte sequences.
     * This option has no effect on when used with the lite runtime.
     * </pre>
     */
    boolean hasJavaStringCheckUtf8();
    /**
     * <code>optional bool java_string_check_utf8 = 27 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java2 code generator will generate code that
     * throws an exception whenever an attempt is made to assign a non-UTF-8
     * byte sequence to a string field.
     * Message reflection will do the same.
     * However, an extension field still accepts non-UTF-8 byte sequences.
     * This option has no effect on when used with the lite runtime.
     * </pre>
     */
    boolean getJavaStringCheckUtf8();

    /**
     * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
     */
    boolean hasOptimizeFor();
    /**
     * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
     */
    com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor();

    /**
     * <code>optional string go_package = 11;</code>
     *
     * <pre>
     * Sets the Go package where structs generated from this .proto will be
     * placed.  There is no default.
     * </pre>
     */
    boolean hasGoPackage();
    /**
     * <code>optional string go_package = 11;</code>
     *
     * <pre>
     * Sets the Go package where structs generated from this .proto will be
     * placed.  There is no default.
     * </pre>
     */
    java.lang.String getGoPackage();
    /**
     * <code>optional string go_package = 11;</code>
     *
     * <pre>
     * Sets the Go package where structs generated from this .proto will be
     * placed.  There is no default.
     * </pre>
     */
    com.google.protobuf.ByteString
        getGoPackageBytes();

    /**
     * <code>optional bool cc_generic_services = 16 [default = false];</code>
     *
     * <pre>
     * Should generic services be generated in each language?  "Generic" services
     * are not specific to any particular RPC system.  They are generated by the
     * main code generators in each language (without additional plugins).
     * Generic services were the only kind of service generation supported by
     * early versions of proto2.
     * Generic services are now considered deprecated in favor of using plugins
     * that generate code specific to your particular RPC system.  Therefore,
     * these default to false.  Old code which depends on generic services should
     * explicitly set them to true.
     * </pre>
     */
    boolean hasCcGenericServices();
    /**
     * <code>optional bool cc_generic_services = 16 [default = false];</code>
     *
     * <pre>
     * Should generic services be generated in each language?  "Generic" services
     * are not specific to any particular RPC system.  They are generated by the
     * main code generators in each language (without additional plugins).
     * Generic services were the only kind of service generation supported by
     * early versions of proto2.
     * Generic services are now considered deprecated in favor of using plugins
     * that generate code specific to your particular RPC system.  Therefore,
     * these default to false.  Old code which depends on generic services should
     * explicitly set them to true.
     * </pre>
     */
    boolean getCcGenericServices();

    /**
     * <code>optional bool java_generic_services = 17 [default = false];</code>
     */
    boolean hasJavaGenericServices();
    /**
     * <code>optional bool java_generic_services = 17 [default = false];</code>
     */
    boolean getJavaGenericServices();

    /**
     * <code>optional bool py_generic_services = 18 [default = false];</code>
     */
    boolean hasPyGenericServices();
    /**
     * <code>optional bool py_generic_services = 18 [default = false];</code>
     */
    boolean getPyGenericServices();

    /**
     * <code>optional bool deprecated = 23 [default = false];</code>
     *
     * <pre>
     * Is this file deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for everything in the file, or it will be completely ignored; in the very
     * least, this is a formalization for deprecating files.
     * </pre>
     */
    boolean hasDeprecated();
    /**
     * <code>optional bool deprecated = 23 [default = false];</code>
     *
     * <pre>
     * Is this file deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for everything in the file, or it will be completely ignored; in the very
     * least, this is a formalization for deprecating files.
     * </pre>
     */
    boolean getDeprecated();

    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.FileOptions}
   */
  public static final class FileOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        FileOptions> implements
      // @@protoc_insertion_point(message_implements:google.protobuf.FileOptions)
      FileOptionsOrBuilder {
    // Use FileOptions.newBuilder() to construct.
    private FileOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.FileOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FileOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FileOptions defaultInstance;
    public static FileOptions getDefaultInstance() {
      return defaultInstance;
    }

    public FileOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FileOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              javaPackage_ = bs;
              break;
            }
            case 66: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              javaOuterClassname_ = bs;
              break;
            }
            case 72: {
              int rawValue = input.readEnum();
              com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode value = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(9, rawValue);
              } else {
                bitField0_ |= 0x00000020;
                optimizeFor_ = value;
              }
              break;
            }
            case 80: {
              bitField0_ |= 0x00000004;
              javaMultipleFiles_ = input.readBool();
              break;
            }
            case 90: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000040;
              goPackage_ = bs;
              break;
            }
            case 128: {
              bitField0_ |= 0x00000080;
              ccGenericServices_ = input.readBool();
              break;
            }
            case 136: {
              bitField0_ |= 0x00000100;
              javaGenericServices_ = input.readBool();
              break;
            }
            case 144: {
              bitField0_ |= 0x00000200;
              pyGenericServices_ = input.readBool();
              break;
            }
            case 160: {
              bitField0_ |= 0x00000008;
              javaGenerateEqualsAndHash_ = input.readBool();
              break;
            }
            case 184: {
              bitField0_ |= 0x00000400;
              deprecated_ = input.readBool();
              break;
            }
            case 216: {
              bitField0_ |= 0x00000010;
              javaStringCheckUtf8_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                uninterpretedOption_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000800;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.FileOptions.class, com.google.protobuf.DescriptorProtos.FileOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<FileOptions> PARSER =
        new com.google.protobuf.AbstractParser<FileOptions>() {
      public FileOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FileOptions(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<FileOptions> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code google.protobuf.FileOptions.OptimizeMode}
     *
     * <pre>
     * Generated classes can be optimized for speed or code size.
     * </pre>
     */
    public enum OptimizeMode
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>SPEED = 1;</code>
       *
       * <pre>
       * Generate complete code for parsing, serialization,
       * </pre>
       */
      SPEED(0, 1),
      /**
       * <code>CODE_SIZE = 2;</code>
       *
       * <pre>
       * etc.
       * </pre>
       */
      CODE_SIZE(1, 2),
      /**
       * <code>LITE_RUNTIME = 3;</code>
       *
       * <pre>
       * Generate code using MessageLite and the lite runtime.
       * </pre>
       */
      LITE_RUNTIME(2, 3),
      ;

      /**
       * <code>SPEED = 1;</code>
       *
       * <pre>
       * Generate complete code for parsing, serialization,
       * </pre>
       */
      public static final int SPEED_VALUE = 1;
      /**
       * <code>CODE_SIZE = 2;</code>
       *
       * <pre>
       * etc.
       * </pre>
       */
      public static final int CODE_SIZE_VALUE = 2;
      /**
       * <code>LITE_RUNTIME = 3;</code>
       *
       * <pre>
       * Generate code using MessageLite and the lite runtime.
       * </pre>
       */
      public static final int LITE_RUNTIME_VALUE = 3;


      public final int getNumber() { return value; }

      public static OptimizeMode valueOf(int value) {
        switch (value) {
          case 1: return SPEED;
          case 2: return CODE_SIZE;
          case 3: return LITE_RUNTIME;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>() {
              public OptimizeMode findValueByNumber(int number) {
                return OptimizeMode.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.FileOptions.getDescriptor().getEnumTypes().get(0);
      }

      private static final OptimizeMode[] VALUES = values();

      public static OptimizeMode valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private OptimizeMode(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:google.protobuf.FileOptions.OptimizeMode)
    }

    private int bitField0_;
    public static final int JAVA_PACKAGE_FIELD_NUMBER = 1;
    private java.lang.Object javaPackage_;
    /**
     * <code>optional string java_package = 1;</code>
     *
     * <pre>
     * Sets the Java package where classes generated from this .proto will be
     * placed.  By default, the proto package is used, but this is often
     * inappropriate because proto packages do not normally start with backwards
     * domain names.
     * </pre>
     */
    public boolean hasJavaPackage() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string java_package = 1;</code>
     *
     * <pre>
     * Sets the Java package where classes generated from this .proto will be
     * placed.  By default, the proto package is used, but this is often
     * inappropriate because proto packages do not normally start with backwards
     * domain names.
     * </pre>
     */
    public java.lang.String getJavaPackage() {
      java.lang.Object ref = javaPackage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          javaPackage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string java_package = 1;</code>
     *
     * <pre>
     * Sets the Java package where classes generated from this .proto will be
     * placed.  By default, the proto package is used, but this is often
     * inappropriate because proto packages do not normally start with backwards
     * domain names.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getJavaPackageBytes() {
      java.lang.Object ref = javaPackage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        javaPackage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int JAVA_OUTER_CLASSNAME_FIELD_NUMBER = 8;
    private java.lang.Object javaOuterClassname_;
    /**
     * <code>optional string java_outer_classname = 8;</code>
     *
     * <pre>
     * If set, all the classes from the .proto file are wrapped in a single
     * outer class with the given name.  This applies to both Proto1
     * (equivalent to the old "--one_java_file" option) and Proto2 (where
     * a .proto always translates to a single class, but you may want to
     * explicitly choose the class name).
     * </pre>
     */
    public boolean hasJavaOuterClassname() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string java_outer_classname = 8;</code>
     *
     * <pre>
     * If set, all the classes from the .proto file are wrapped in a single
     * outer class with the given name.  This applies to both Proto1
     * (equivalent to the old "--one_java_file" option) and Proto2 (where
     * a .proto always translates to a single class, but you may want to
     * explicitly choose the class name).
     * </pre>
     */
    public java.lang.String getJavaOuterClassname() {
      java.lang.Object ref = javaOuterClassname_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          javaOuterClassname_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string java_outer_classname = 8;</code>
     *
     * <pre>
     * If set, all the classes from the .proto file are wrapped in a single
     * outer class with the given name.  This applies to both Proto1
     * (equivalent to the old "--one_java_file" option) and Proto2 (where
     * a .proto always translates to a single class, but you may want to
     * explicitly choose the class name).
     * </pre>
     */
    public com.google.protobuf.ByteString
        getJavaOuterClassnameBytes() {
      java.lang.Object ref = javaOuterClassname_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        javaOuterClassname_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int JAVA_MULTIPLE_FILES_FIELD_NUMBER = 10;
    private boolean javaMultipleFiles_;
    /**
     * <code>optional bool java_multiple_files = 10 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java code generator will generate a separate .java
     * file for each top-level message, enum, and service defined in the .proto
     * file.  Thus, these types will *not* be nested inside the outer class
     * named by java_outer_classname.  However, the outer class will still be
     * generated to contain the file's getDescriptor() method as well as any
     * top-level extensions defined in the file.
     * </pre>
     */
    public boolean hasJavaMultipleFiles() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool java_multiple_files = 10 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java code generator will generate a separate .java
     * file for each top-level message, enum, and service defined in the .proto
     * file.  Thus, these types will *not* be nested inside the outer class
     * named by java_outer_classname.  However, the outer class will still be
     * generated to contain the file's getDescriptor() method as well as any
     * top-level extensions defined in the file.
     * </pre>
     */
    public boolean getJavaMultipleFiles() {
      return javaMultipleFiles_;
    }

    public static final int JAVA_GENERATE_EQUALS_AND_HASH_FIELD_NUMBER = 20;
    private boolean javaGenerateEqualsAndHash_;
    /**
     * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java code generator will generate equals() and
     * hashCode() methods for all messages defined in the .proto file.
     * - In the full runtime, this is purely a speed optimization, as the
     * AbstractMessage base class includes reflection-based implementations of
     * these methods.
     *- In the lite runtime, setting this option changes the semantics of
     * equals() and hashCode() to more closely match those of the full runtime;
     * the generated methods compute their results based on field values rather
     * than object identity. (Implementations should not assume that hashcodes
     * will be consistent across runtimes or versions of the protocol compiler.)
     * </pre>
     */
    public boolean hasJavaGenerateEqualsAndHash() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java code generator will generate equals() and
     * hashCode() methods for all messages defined in the .proto file.
     * - In the full runtime, this is purely a speed optimization, as the
     * AbstractMessage base class includes reflection-based implementations of
     * these methods.
     *- In the lite runtime, setting this option changes the semantics of
     * equals() and hashCode() to more closely match those of the full runtime;
     * the generated methods compute their results based on field values rather
     * than object identity. (Implementations should not assume that hashcodes
     * will be consistent across runtimes or versions of the protocol compiler.)
     * </pre>
     */
    public boolean getJavaGenerateEqualsAndHash() {
      return javaGenerateEqualsAndHash_;
    }

    public static final int JAVA_STRING_CHECK_UTF8_FIELD_NUMBER = 27;
    private boolean javaStringCheckUtf8_;
    /**
     * <code>optional bool java_string_check_utf8 = 27 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java2 code generator will generate code that
     * throws an exception whenever an attempt is made to assign a non-UTF-8
     * byte sequence to a string field.
     * Message reflection will do the same.
     * However, an extension field still accepts non-UTF-8 byte sequences.
     * This option has no effect on when used with the lite runtime.
     * </pre>
     */
    public boolean hasJavaStringCheckUtf8() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bool java_string_check_utf8 = 27 [default = false];</code>
     *
     * <pre>
     * If set true, then the Java2 code generator will generate code that
     * throws an exception whenever an attempt is made to assign a non-UTF-8
     * byte sequence to a string field.
     * Message reflection will do the same.
     * However, an extension field still accepts non-UTF-8 byte sequences.
     * This option has no effect on when used with the lite runtime.
     * </pre>
     */
    public boolean getJavaStringCheckUtf8() {
      return javaStringCheckUtf8_;
    }

    public static final int OPTIMIZE_FOR_FIELD_NUMBER = 9;
    private com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode optimizeFor_;
    /**
     * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
     */
    public boolean hasOptimizeFor() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
     */
    public com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor() {
      return optimizeFor_;
    }

    public static final int GO_PACKAGE_FIELD_NUMBER = 11;
    private java.lang.Object goPackage_;
    /**
     * <code>optional string go_package = 11;</code>
     *
     * <pre>
     * Sets the Go package where structs generated from this .proto will be
     * placed.  There is no default.
     * </pre>
     */
    public boolean hasGoPackage() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string go_package = 11;</code>
     *
     * <pre>
     * Sets the Go package where structs generated from this .proto will be
     * placed.  There is no default.
     * </pre>
     */
    public java.lang.String getGoPackage() {
      java.lang.Object ref = goPackage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          goPackage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string go_package = 11;</code>
     *
     * <pre>
     * Sets the Go package where structs generated from this .proto will be
     * placed.  There is no default.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getGoPackageBytes() {
      java.lang.Object ref = goPackage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        goPackage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CC_GENERIC_SERVICES_FIELD_NUMBER = 16;
    private boolean ccGenericServices_;
    /**
     * <code>optional bool cc_generic_services = 16 [default = false];</code>
     *
     * <pre>
     * Should generic services be generated in each language?  "Generic" services
     * are not specific to any particular RPC system.  They are generated by the
     * main code generators in each language (without additional plugins).
     * Generic services were the only kind of service generation supported by
     * early versions of proto2.
     * Generic services are now considered deprecated in favor of using plugins
     * that generate code specific to your particular RPC system.  Therefore,
     * these default to false.  Old code which depends on generic services should
     * explicitly set them to true.
     * </pre>
     */
    public boolean hasCcGenericServices() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional bool cc_generic_services = 16 [default = false];</code>
     *
     * <pre>
     * Should generic services be generated in each language?  "Generic" services
     * are not specific to any particular RPC system.  They are generated by the
     * main code generators in each language (without additional plugins).
     * Generic services were the only kind of service generation supported by
     * early versions of proto2.
     * Generic services are now considered deprecated in favor of using plugins
     * that generate code specific to your particular RPC system.  Therefore,
     * these default to false.  Old code which depends on generic services should
     * explicitly set them to true.
     * </pre>
     */
    public boolean getCcGenericServices() {
      return ccGenericServices_;
    }

    public static final int JAVA_GENERIC_SERVICES_FIELD_NUMBER = 17;
    private boolean javaGenericServices_;
    /**
     * <code>optional bool java_generic_services = 17 [default = false];</code>
     */
    public boolean hasJavaGenericServices() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional bool java_generic_services = 17 [default = false];</code>
     */
    public boolean getJavaGenericServices() {
      return javaGenericServices_;
    }

    public static final int PY_GENERIC_SERVICES_FIELD_NUMBER = 18;
    private boolean pyGenericServices_;
    /**
     * <code>optional bool py_generic_services = 18 [default = false];</code>
     */
    public boolean hasPyGenericServices() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional bool py_generic_services = 18 [default = false];</code>
     */
    public boolean getPyGenericServices() {
      return pyGenericServices_;
    }

    public static final int DEPRECATED_FIELD_NUMBER = 23;
    private boolean deprecated_;
    /**
     * <code>optional bool deprecated = 23 [default = false];</code>
     *
     * <pre>
     * Is this file deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for everything in the file, or it will be completely ignored; in the very
     * least, this is a formalization for deprecating files.
     * </pre>
     */
    public boolean hasDeprecated() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional bool deprecated = 23 [default = false];</code>
     *
     * <pre>
     * Is this file deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for everything in the file, or it will be completely ignored; in the very
     * least, this is a formalization for deprecating files.
     * </pre>
     */
    public boolean getDeprecated() {
      return deprecated_;
    }

    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      javaPackage_ = "";
      javaOuterClassname_ = "";
      javaMultipleFiles_ = false;
      javaGenerateEqualsAndHash_ = false;
      javaStringCheckUtf8_ = false;
      optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
      goPackage_ = "";
      ccGenericServices_ = false;
      javaGenericServices_ = false;
      pyGenericServices_ = false;
      deprecated_ = false;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
        if (!getUninterpretedOption(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!extensionsAreInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FileOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getJavaPackageBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(8, getJavaOuterClassnameBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeEnum(9, optimizeFor_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(10, javaMultipleFiles_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(11, getGoPackageBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBool(16, ccGenericServices_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBool(17, javaGenericServices_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBool(18, pyGenericServices_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(20, javaGenerateEqualsAndHash_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBool(23, deprecated_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(27, javaStringCheckUtf8_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getJavaPackageBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getJavaOuterClassnameBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(9, optimizeFor_.getNumber());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, javaMultipleFiles_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getGoPackageBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, ccGenericServices_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(17, javaGenericServices_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(18, pyGenericServices_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(20, javaGenerateEqualsAndHash_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(23, deprecated_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(27, javaStringCheckUtf8_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.FileOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.FileOptions, Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.FileOptions)
        com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.FileOptions.class, com.google.protobuf.DescriptorProtos.FileOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.FileOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        javaPackage_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        javaOuterClassname_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        javaMultipleFiles_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        javaGenerateEqualsAndHash_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        javaStringCheckUtf8_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
        bitField0_ = (bitField0_ & ~0x00000020);
        goPackage_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        ccGenericServices_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        javaGenericServices_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        pyGenericServices_ = false;
        bitField0_ = (bitField0_ & ~0x00000200);
        deprecated_ = false;
        bitField0_ = (bitField0_ & ~0x00000400);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.FileOptions getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.FileOptions build() {
        com.google.protobuf.DescriptorProtos.FileOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.FileOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.FileOptions result = new com.google.protobuf.DescriptorProtos.FileOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.javaPackage_ = javaPackage_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.javaOuterClassname_ = javaOuterClassname_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.javaMultipleFiles_ = javaMultipleFiles_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.javaGenerateEqualsAndHash_ = javaGenerateEqualsAndHash_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.javaStringCheckUtf8_ = javaStringCheckUtf8_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.optimizeFor_ = optimizeFor_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.goPackage_ = goPackage_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.ccGenericServices_ = ccGenericServices_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.javaGenericServices_ = javaGenericServices_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.pyGenericServices_ = pyGenericServices_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.deprecated_ = deprecated_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.FileOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.FileOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileOptions other) {
        if (other == com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance()) return this;
        if (other.hasJavaPackage()) {
          bitField0_ |= 0x00000001;
          javaPackage_ = other.javaPackage_;
          onChanged();
        }
        if (other.hasJavaOuterClassname()) {
          bitField0_ |= 0x00000002;
          javaOuterClassname_ = other.javaOuterClassname_;
          onChanged();
        }
        if (other.hasJavaMultipleFiles()) {
          setJavaMultipleFiles(other.getJavaMultipleFiles());
        }
        if (other.hasJavaGenerateEqualsAndHash()) {
          setJavaGenerateEqualsAndHash(other.getJavaGenerateEqualsAndHash());
        }
        if (other.hasJavaStringCheckUtf8()) {
          setJavaStringCheckUtf8(other.getJavaStringCheckUtf8());
        }
        if (other.hasOptimizeFor()) {
          setOptimizeFor(other.getOptimizeFor());
        }
        if (other.hasGoPackage()) {
          bitField0_ |= 0x00000040;
          goPackage_ = other.goPackage_;
          onChanged();
        }
        if (other.hasCcGenericServices()) {
          setCcGenericServices(other.getCcGenericServices());
        }
        if (other.hasJavaGenericServices()) {
          setJavaGenericServices(other.getJavaGenericServices());
        }
        if (other.hasPyGenericServices()) {
          setPyGenericServices(other.getPyGenericServices());
        }
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000800);
              uninterpretedOptionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
          if (!getUninterpretedOption(i).isInitialized()) {
            
            return false;
          }
        }
        if (!extensionsAreInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.FileOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.FileOptions) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object javaPackage_ = "";
      /**
       * <code>optional string java_package = 1;</code>
       *
       * <pre>
       * Sets the Java package where classes generated from this .proto will be
       * placed.  By default, the proto package is used, but this is often
       * inappropriate because proto packages do not normally start with backwards
       * domain names.
       * </pre>
       */
      public boolean hasJavaPackage() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string java_package = 1;</code>
       *
       * <pre>
       * Sets the Java package where classes generated from this .proto will be
       * placed.  By default, the proto package is used, but this is often
       * inappropriate because proto packages do not normally start with backwards
       * domain names.
       * </pre>
       */
      public java.lang.String getJavaPackage() {
        java.lang.Object ref = javaPackage_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            javaPackage_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string java_package = 1;</code>
       *
       * <pre>
       * Sets the Java package where classes generated from this .proto will be
       * placed.  By default, the proto package is used, but this is often
       * inappropriate because proto packages do not normally start with backwards
       * domain names.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getJavaPackageBytes() {
        java.lang.Object ref = javaPackage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          javaPackage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string java_package = 1;</code>
       *
       * <pre>
       * Sets the Java package where classes generated from this .proto will be
       * placed.  By default, the proto package is used, but this is often
       * inappropriate because proto packages do not normally start with backwards
       * domain names.
       * </pre>
       */
      public Builder setJavaPackage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        javaPackage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string java_package = 1;</code>
       *
       * <pre>
       * Sets the Java package where classes generated from this .proto will be
       * placed.  By default, the proto package is used, but this is often
       * inappropriate because proto packages do not normally start with backwards
       * domain names.
       * </pre>
       */
      public Builder clearJavaPackage() {
        bitField0_ = (bitField0_ & ~0x00000001);
        javaPackage_ = getDefaultInstance().getJavaPackage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string java_package = 1;</code>
       *
       * <pre>
       * Sets the Java package where classes generated from this .proto will be
       * placed.  By default, the proto package is used, but this is often
       * inappropriate because proto packages do not normally start with backwards
       * domain names.
       * </pre>
       */
      public Builder setJavaPackageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        javaPackage_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object javaOuterClassname_ = "";
      /**
       * <code>optional string java_outer_classname = 8;</code>
       *
       * <pre>
       * If set, all the classes from the .proto file are wrapped in a single
       * outer class with the given name.  This applies to both Proto1
       * (equivalent to the old "--one_java_file" option) and Proto2 (where
       * a .proto always translates to a single class, but you may want to
       * explicitly choose the class name).
       * </pre>
       */
      public boolean hasJavaOuterClassname() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string java_outer_classname = 8;</code>
       *
       * <pre>
       * If set, all the classes from the .proto file are wrapped in a single
       * outer class with the given name.  This applies to both Proto1
       * (equivalent to the old "--one_java_file" option) and Proto2 (where
       * a .proto always translates to a single class, but you may want to
       * explicitly choose the class name).
       * </pre>
       */
      public java.lang.String getJavaOuterClassname() {
        java.lang.Object ref = javaOuterClassname_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            javaOuterClassname_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string java_outer_classname = 8;</code>
       *
       * <pre>
       * If set, all the classes from the .proto file are wrapped in a single
       * outer class with the given name.  This applies to both Proto1
       * (equivalent to the old "--one_java_file" option) and Proto2 (where
       * a .proto always translates to a single class, but you may want to
       * explicitly choose the class name).
       * </pre>
       */
      public com.google.protobuf.ByteString
          getJavaOuterClassnameBytes() {
        java.lang.Object ref = javaOuterClassname_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          javaOuterClassname_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string java_outer_classname = 8;</code>
       *
       * <pre>
       * If set, all the classes from the .proto file are wrapped in a single
       * outer class with the given name.  This applies to both Proto1
       * (equivalent to the old "--one_java_file" option) and Proto2 (where
       * a .proto always translates to a single class, but you may want to
       * explicitly choose the class name).
       * </pre>
       */
      public Builder setJavaOuterClassname(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        javaOuterClassname_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string java_outer_classname = 8;</code>
       *
       * <pre>
       * If set, all the classes from the .proto file are wrapped in a single
       * outer class with the given name.  This applies to both Proto1
       * (equivalent to the old "--one_java_file" option) and Proto2 (where
       * a .proto always translates to a single class, but you may want to
       * explicitly choose the class name).
       * </pre>
       */
      public Builder clearJavaOuterClassname() {
        bitField0_ = (bitField0_ & ~0x00000002);
        javaOuterClassname_ = getDefaultInstance().getJavaOuterClassname();
        onChanged();
        return this;
      }
      /**
       * <code>optional string java_outer_classname = 8;</code>
       *
       * <pre>
       * If set, all the classes from the .proto file are wrapped in a single
       * outer class with the given name.  This applies to both Proto1
       * (equivalent to the old "--one_java_file" option) and Proto2 (where
       * a .proto always translates to a single class, but you may want to
       * explicitly choose the class name).
       * </pre>
       */
      public Builder setJavaOuterClassnameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        javaOuterClassname_ = value;
        onChanged();
        return this;
      }

      private boolean javaMultipleFiles_ ;
      /**
       * <code>optional bool java_multiple_files = 10 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java code generator will generate a separate .java
       * file for each top-level message, enum, and service defined in the .proto
       * file.  Thus, these types will *not* be nested inside the outer class
       * named by java_outer_classname.  However, the outer class will still be
       * generated to contain the file's getDescriptor() method as well as any
       * top-level extensions defined in the file.
       * </pre>
       */
      public boolean hasJavaMultipleFiles() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool java_multiple_files = 10 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java code generator will generate a separate .java
       * file for each top-level message, enum, and service defined in the .proto
       * file.  Thus, these types will *not* be nested inside the outer class
       * named by java_outer_classname.  However, the outer class will still be
       * generated to contain the file's getDescriptor() method as well as any
       * top-level extensions defined in the file.
       * </pre>
       */
      public boolean getJavaMultipleFiles() {
        return javaMultipleFiles_;
      }
      /**
       * <code>optional bool java_multiple_files = 10 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java code generator will generate a separate .java
       * file for each top-level message, enum, and service defined in the .proto
       * file.  Thus, these types will *not* be nested inside the outer class
       * named by java_outer_classname.  However, the outer class will still be
       * generated to contain the file's getDescriptor() method as well as any
       * top-level extensions defined in the file.
       * </pre>
       */
      public Builder setJavaMultipleFiles(boolean value) {
        bitField0_ |= 0x00000004;
        javaMultipleFiles_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool java_multiple_files = 10 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java code generator will generate a separate .java
       * file for each top-level message, enum, and service defined in the .proto
       * file.  Thus, these types will *not* be nested inside the outer class
       * named by java_outer_classname.  However, the outer class will still be
       * generated to contain the file's getDescriptor() method as well as any
       * top-level extensions defined in the file.
       * </pre>
       */
      public Builder clearJavaMultipleFiles() {
        bitField0_ = (bitField0_ & ~0x00000004);
        javaMultipleFiles_ = false;
        onChanged();
        return this;
      }

      private boolean javaGenerateEqualsAndHash_ ;
      /**
       * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java code generator will generate equals() and
       * hashCode() methods for all messages defined in the .proto file.
       * - In the full runtime, this is purely a speed optimization, as the
       * AbstractMessage base class includes reflection-based implementations of
       * these methods.
       *- In the lite runtime, setting this option changes the semantics of
       * equals() and hashCode() to more closely match those of the full runtime;
       * the generated methods compute their results based on field values rather
       * than object identity. (Implementations should not assume that hashcodes
       * will be consistent across runtimes or versions of the protocol compiler.)
       * </pre>
       */
      public boolean hasJavaGenerateEqualsAndHash() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java code generator will generate equals() and
       * hashCode() methods for all messages defined in the .proto file.
       * - In the full runtime, this is purely a speed optimization, as the
       * AbstractMessage base class includes reflection-based implementations of
       * these methods.
       *- In the lite runtime, setting this option changes the semantics of
       * equals() and hashCode() to more closely match those of the full runtime;
       * the generated methods compute their results based on field values rather
       * than object identity. (Implementations should not assume that hashcodes
       * will be consistent across runtimes or versions of the protocol compiler.)
       * </pre>
       */
      public boolean getJavaGenerateEqualsAndHash() {
        return javaGenerateEqualsAndHash_;
      }
      /**
       * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java code generator will generate equals() and
       * hashCode() methods for all messages defined in the .proto file.
       * - In the full runtime, this is purely a speed optimization, as the
       * AbstractMessage base class includes reflection-based implementations of
       * these methods.
       *- In the lite runtime, setting this option changes the semantics of
       * equals() and hashCode() to more closely match those of the full runtime;
       * the generated methods compute their results based on field values rather
       * than object identity. (Implementations should not assume that hashcodes
       * will be consistent across runtimes or versions of the protocol compiler.)
       * </pre>
       */
      public Builder setJavaGenerateEqualsAndHash(boolean value) {
        bitField0_ |= 0x00000008;
        javaGenerateEqualsAndHash_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool java_generate_equals_and_hash = 20 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java code generator will generate equals() and
       * hashCode() methods for all messages defined in the .proto file.
       * - In the full runtime, this is purely a speed optimization, as the
       * AbstractMessage base class includes reflection-based implementations of
       * these methods.
       *- In the lite runtime, setting this option changes the semantics of
       * equals() and hashCode() to more closely match those of the full runtime;
       * the generated methods compute their results based on field values rather
       * than object identity. (Implementations should not assume that hashcodes
       * will be consistent across runtimes or versions of the protocol compiler.)
       * </pre>
       */
      public Builder clearJavaGenerateEqualsAndHash() {
        bitField0_ = (bitField0_ & ~0x00000008);
        javaGenerateEqualsAndHash_ = false;
        onChanged();
        return this;
      }

      private boolean javaStringCheckUtf8_ ;
      /**
       * <code>optional bool java_string_check_utf8 = 27 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java2 code generator will generate code that
       * throws an exception whenever an attempt is made to assign a non-UTF-8
       * byte sequence to a string field.
       * Message reflection will do the same.
       * However, an extension field still accepts non-UTF-8 byte sequences.
       * This option has no effect on when used with the lite runtime.
       * </pre>
       */
      public boolean hasJavaStringCheckUtf8() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool java_string_check_utf8 = 27 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java2 code generator will generate code that
       * throws an exception whenever an attempt is made to assign a non-UTF-8
       * byte sequence to a string field.
       * Message reflection will do the same.
       * However, an extension field still accepts non-UTF-8 byte sequences.
       * This option has no effect on when used with the lite runtime.
       * </pre>
       */
      public boolean getJavaStringCheckUtf8() {
        return javaStringCheckUtf8_;
      }
      /**
       * <code>optional bool java_string_check_utf8 = 27 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java2 code generator will generate code that
       * throws an exception whenever an attempt is made to assign a non-UTF-8
       * byte sequence to a string field.
       * Message reflection will do the same.
       * However, an extension field still accepts non-UTF-8 byte sequences.
       * This option has no effect on when used with the lite runtime.
       * </pre>
       */
      public Builder setJavaStringCheckUtf8(boolean value) {
        bitField0_ |= 0x00000010;
        javaStringCheckUtf8_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool java_string_check_utf8 = 27 [default = false];</code>
       *
       * <pre>
       * If set true, then the Java2 code generator will generate code that
       * throws an exception whenever an attempt is made to assign a non-UTF-8
       * byte sequence to a string field.
       * Message reflection will do the same.
       * However, an extension field still accepts non-UTF-8 byte sequences.
       * This option has no effect on when used with the lite runtime.
       * </pre>
       */
      public Builder clearJavaStringCheckUtf8() {
        bitField0_ = (bitField0_ & ~0x00000010);
        javaStringCheckUtf8_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
      /**
       * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
       */
      public boolean hasOptimizeFor() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
       */
      public com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor() {
        return optimizeFor_;
      }
      /**
       * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
       */
      public Builder setOptimizeFor(com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000020;
        optimizeFor_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];</code>
       */
      public Builder clearOptimizeFor() {
        bitField0_ = (bitField0_ & ~0x00000020);
        optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
        onChanged();
        return this;
      }

      private java.lang.Object goPackage_ = "";
      /**
       * <code>optional string go_package = 11;</code>
       *
       * <pre>
       * Sets the Go package where structs generated from this .proto will be
       * placed.  There is no default.
       * </pre>
       */
      public boolean hasGoPackage() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string go_package = 11;</code>
       *
       * <pre>
       * Sets the Go package where structs generated from this .proto will be
       * placed.  There is no default.
       * </pre>
       */
      public java.lang.String getGoPackage() {
        java.lang.Object ref = goPackage_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            goPackage_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string go_package = 11;</code>
       *
       * <pre>
       * Sets the Go package where structs generated from this .proto will be
       * placed.  There is no default.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getGoPackageBytes() {
        java.lang.Object ref = goPackage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          goPackage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string go_package = 11;</code>
       *
       * <pre>
       * Sets the Go package where structs generated from this .proto will be
       * placed.  There is no default.
       * </pre>
       */
      public Builder setGoPackage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        goPackage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string go_package = 11;</code>
       *
       * <pre>
       * Sets the Go package where structs generated from this .proto will be
       * placed.  There is no default.
       * </pre>
       */
      public Builder clearGoPackage() {
        bitField0_ = (bitField0_ & ~0x00000040);
        goPackage_ = getDefaultInstance().getGoPackage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string go_package = 11;</code>
       *
       * <pre>
       * Sets the Go package where structs generated from this .proto will be
       * placed.  There is no default.
       * </pre>
       */
      public Builder setGoPackageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        goPackage_ = value;
        onChanged();
        return this;
      }

      private boolean ccGenericServices_ ;
      /**
       * <code>optional bool cc_generic_services = 16 [default = false];</code>
       *
       * <pre>
       * Should generic services be generated in each language?  "Generic" services
       * are not specific to any particular RPC system.  They are generated by the
       * main code generators in each language (without additional plugins).
       * Generic services were the only kind of service generation supported by
       * early versions of proto2.
       * Generic services are now considered deprecated in favor of using plugins
       * that generate code specific to your particular RPC system.  Therefore,
       * these default to false.  Old code which depends on generic services should
       * explicitly set them to true.
       * </pre>
       */
      public boolean hasCcGenericServices() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional bool cc_generic_services = 16 [default = false];</code>
       *
       * <pre>
       * Should generic services be generated in each language?  "Generic" services
       * are not specific to any particular RPC system.  They are generated by the
       * main code generators in each language (without additional plugins).
       * Generic services were the only kind of service generation supported by
       * early versions of proto2.
       * Generic services are now considered deprecated in favor of using plugins
       * that generate code specific to your particular RPC system.  Therefore,
       * these default to false.  Old code which depends on generic services should
       * explicitly set them to true.
       * </pre>
       */
      public boolean getCcGenericServices() {
        return ccGenericServices_;
      }
      /**
       * <code>optional bool cc_generic_services = 16 [default = false];</code>
       *
       * <pre>
       * Should generic services be generated in each language?  "Generic" services
       * are not specific to any particular RPC system.  They are generated by the
       * main code generators in each language (without additional plugins).
       * Generic services were the only kind of service generation supported by
       * early versions of proto2.
       * Generic services are now considered deprecated in favor of using plugins
       * that generate code specific to your particular RPC system.  Therefore,
       * these default to false.  Old code which depends on generic services should
       * explicitly set them to true.
       * </pre>
       */
      public Builder setCcGenericServices(boolean value) {
        bitField0_ |= 0x00000080;
        ccGenericServices_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool cc_generic_services = 16 [default = false];</code>
       *
       * <pre>
       * Should generic services be generated in each language?  "Generic" services
       * are not specific to any particular RPC system.  They are generated by the
       * main code generators in each language (without additional plugins).
       * Generic services were the only kind of service generation supported by
       * early versions of proto2.
       * Generic services are now considered deprecated in favor of using plugins
       * that generate code specific to your particular RPC system.  Therefore,
       * these default to false.  Old code which depends on generic services should
       * explicitly set them to true.
       * </pre>
       */
      public Builder clearCcGenericServices() {
        bitField0_ = (bitField0_ & ~0x00000080);
        ccGenericServices_ = false;
        onChanged();
        return this;
      }

      private boolean javaGenericServices_ ;
      /**
       * <code>optional bool java_generic_services = 17 [default = false];</code>
       */
      public boolean hasJavaGenericServices() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional bool java_generic_services = 17 [default = false];</code>
       */
      public boolean getJavaGenericServices() {
        return javaGenericServices_;
      }
      /**
       * <code>optional bool java_generic_services = 17 [default = false];</code>
       */
      public Builder setJavaGenericServices(boolean value) {
        bitField0_ |= 0x00000100;
        javaGenericServices_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool java_generic_services = 17 [default = false];</code>
       */
      public Builder clearJavaGenericServices() {
        bitField0_ = (bitField0_ & ~0x00000100);
        javaGenericServices_ = false;
        onChanged();
        return this;
      }

      private boolean pyGenericServices_ ;
      /**
       * <code>optional bool py_generic_services = 18 [default = false];</code>
       */
      public boolean hasPyGenericServices() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional bool py_generic_services = 18 [default = false];</code>
       */
      public boolean getPyGenericServices() {
        return pyGenericServices_;
      }
      /**
       * <code>optional bool py_generic_services = 18 [default = false];</code>
       */
      public Builder setPyGenericServices(boolean value) {
        bitField0_ |= 0x00000200;
        pyGenericServices_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool py_generic_services = 18 [default = false];</code>
       */
      public Builder clearPyGenericServices() {
        bitField0_ = (bitField0_ & ~0x00000200);
        pyGenericServices_ = false;
        onChanged();
        return this;
      }

      private boolean deprecated_ ;
      /**
       * <code>optional bool deprecated = 23 [default = false];</code>
       *
       * <pre>
       * Is this file deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for everything in the file, or it will be completely ignored; in the very
       * least, this is a formalization for deprecating files.
       * </pre>
       */
      public boolean hasDeprecated() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional bool deprecated = 23 [default = false];</code>
       *
       * <pre>
       * Is this file deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for everything in the file, or it will be completely ignored; in the very
       * least, this is a formalization for deprecating files.
       * </pre>
       */
      public boolean getDeprecated() {
        return deprecated_;
      }
      /**
       * <code>optional bool deprecated = 23 [default = false];</code>
       *
       * <pre>
       * Is this file deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for everything in the file, or it will be completely ignored; in the very
       * least, this is a formalization for deprecating files.
       * </pre>
       */
      public Builder setDeprecated(boolean value) {
        bitField0_ |= 0x00000400;
        deprecated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deprecated = 23 [default = false];</code>
       *
       * <pre>
       * Is this file deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for everything in the file, or it will be completely ignored; in the very
       * least, this is a formalization for deprecating files.
       * </pre>
       */
      public Builder clearDeprecated() {
        bitField0_ = (bitField0_ & ~0x00000400);
        deprecated_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
          uninterpretedOption_ = new java.util.ArrayList<>(uninterpretedOption_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000800) == 0x00000800),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.FileOptions)
    }

    static {
      defaultInstance = new FileOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.FileOptions)
  }

  public interface MessageOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.MessageOptions)
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<MessageOptions> {

    /**
     * <code>optional bool message_set_wire_format = 1 [default = false];</code>
     *
     * <pre>
     * Set true to use the old proto1 MessageSet wire format for extensions.
     * This is provided for backwards-compatibility with the MessageSet wire
     * format.  You should not use this for any other reason:  It's less
     * efficient, has fewer features, and is more complicated.
     * The message must be defined exactly as follows:
     *   message Foo {
     *     option message_set_wire_format = true;
     *     extensions 4 to max;
     *   }
     * Note that the message cannot have any defined fields; MessageSets only
     * have extensions.
     * All extensions of your type must be singular messages; e.g. they cannot
     * be int32s, enums, or repeated messages.
     * Because this is an option, the above two restrictions are not enforced by
     * the protocol compiler.
     * </pre>
     */
    boolean hasMessageSetWireFormat();
    /**
     * <code>optional bool message_set_wire_format = 1 [default = false];</code>
     *
     * <pre>
     * Set true to use the old proto1 MessageSet wire format for extensions.
     * This is provided for backwards-compatibility with the MessageSet wire
     * format.  You should not use this for any other reason:  It's less
     * efficient, has fewer features, and is more complicated.
     * The message must be defined exactly as follows:
     *   message Foo {
     *     option message_set_wire_format = true;
     *     extensions 4 to max;
     *   }
     * Note that the message cannot have any defined fields; MessageSets only
     * have extensions.
     * All extensions of your type must be singular messages; e.g. they cannot
     * be int32s, enums, or repeated messages.
     * Because this is an option, the above two restrictions are not enforced by
     * the protocol compiler.
     * </pre>
     */
    boolean getMessageSetWireFormat();

    /**
     * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
     *
     * <pre>
     * Disables the generation of the standard "descriptor()" accessor, which can
     * conflict with a field of the same name.  This is meant to make migration
     * from proto1 easier; new code should avoid fields named "descriptor".
     * </pre>
     */
    boolean hasNoStandardDescriptorAccessor();
    /**
     * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
     *
     * <pre>
     * Disables the generation of the standard "descriptor()" accessor, which can
     * conflict with a field of the same name.  This is meant to make migration
     * from proto1 easier; new code should avoid fields named "descriptor".
     * </pre>
     */
    boolean getNoStandardDescriptorAccessor();

    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this message deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the message, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating messages.
     * </pre>
     */
    boolean hasDeprecated();
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this message deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the message, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating messages.
     * </pre>
     */
    boolean getDeprecated();

    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.MessageOptions}
   */
  public static final class MessageOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        MessageOptions> implements
      // @@protoc_insertion_point(message_implements:google.protobuf.MessageOptions)
      MessageOptionsOrBuilder {
    // Use MessageOptions.newBuilder() to construct.
    private MessageOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.MessageOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MessageOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MessageOptions defaultInstance;
    public static MessageOptions getDefaultInstance() {
      return defaultInstance;
    }

    public MessageOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MessageOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              messageSetWireFormat_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              noStandardDescriptorAccessor_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              deprecated_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                uninterpretedOption_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000008;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.MessageOptions.class, com.google.protobuf.DescriptorProtos.MessageOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<MessageOptions> PARSER =
        new com.google.protobuf.AbstractParser<MessageOptions>() {
      public MessageOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MessageOptions(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MessageOptions> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int MESSAGE_SET_WIRE_FORMAT_FIELD_NUMBER = 1;
    private boolean messageSetWireFormat_;
    /**
     * <code>optional bool message_set_wire_format = 1 [default = false];</code>
     *
     * <pre>
     * Set true to use the old proto1 MessageSet wire format for extensions.
     * This is provided for backwards-compatibility with the MessageSet wire
     * format.  You should not use this for any other reason:  It's less
     * efficient, has fewer features, and is more complicated.
     * The message must be defined exactly as follows:
     *   message Foo {
     *     option message_set_wire_format = true;
     *     extensions 4 to max;
     *   }
     * Note that the message cannot have any defined fields; MessageSets only
     * have extensions.
     * All extensions of your type must be singular messages; e.g. they cannot
     * be int32s, enums, or repeated messages.
     * Because this is an option, the above two restrictions are not enforced by
     * the protocol compiler.
     * </pre>
     */
    public boolean hasMessageSetWireFormat() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool message_set_wire_format = 1 [default = false];</code>
     *
     * <pre>
     * Set true to use the old proto1 MessageSet wire format for extensions.
     * This is provided for backwards-compatibility with the MessageSet wire
     * format.  You should not use this for any other reason:  It's less
     * efficient, has fewer features, and is more complicated.
     * The message must be defined exactly as follows:
     *   message Foo {
     *     option message_set_wire_format = true;
     *     extensions 4 to max;
     *   }
     * Note that the message cannot have any defined fields; MessageSets only
     * have extensions.
     * All extensions of your type must be singular messages; e.g. they cannot
     * be int32s, enums, or repeated messages.
     * Because this is an option, the above two restrictions are not enforced by
     * the protocol compiler.
     * </pre>
     */
    public boolean getMessageSetWireFormat() {
      return messageSetWireFormat_;
    }

    public static final int NO_STANDARD_DESCRIPTOR_ACCESSOR_FIELD_NUMBER = 2;
    private boolean noStandardDescriptorAccessor_;
    /**
     * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
     *
     * <pre>
     * Disables the generation of the standard "descriptor()" accessor, which can
     * conflict with a field of the same name.  This is meant to make migration
     * from proto1 easier; new code should avoid fields named "descriptor".
     * </pre>
     */
    public boolean hasNoStandardDescriptorAccessor() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
     *
     * <pre>
     * Disables the generation of the standard "descriptor()" accessor, which can
     * conflict with a field of the same name.  This is meant to make migration
     * from proto1 easier; new code should avoid fields named "descriptor".
     * </pre>
     */
    public boolean getNoStandardDescriptorAccessor() {
      return noStandardDescriptorAccessor_;
    }

    public static final int DEPRECATED_FIELD_NUMBER = 3;
    private boolean deprecated_;
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this message deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the message, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating messages.
     * </pre>
     */
    public boolean hasDeprecated() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this message deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the message, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating messages.
     * </pre>
     */
    public boolean getDeprecated() {
      return deprecated_;
    }

    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      messageSetWireFormat_ = false;
      noStandardDescriptorAccessor_ = false;
      deprecated_ = false;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
        if (!getUninterpretedOption(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!extensionsAreInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.MessageOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, messageSetWireFormat_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, noStandardDescriptorAccessor_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, messageSetWireFormat_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, noStandardDescriptorAccessor_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MessageOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.MessageOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.MessageOptions, Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.MessageOptions)
        com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.MessageOptions.class, com.google.protobuf.DescriptorProtos.MessageOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        messageSetWireFormat_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        noStandardDescriptorAccessor_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        deprecated_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.MessageOptions getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.MessageOptions build() {
        com.google.protobuf.DescriptorProtos.MessageOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.MessageOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.MessageOptions result = new com.google.protobuf.DescriptorProtos.MessageOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.messageSetWireFormat_ = messageSetWireFormat_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.noStandardDescriptorAccessor_ = noStandardDescriptorAccessor_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.deprecated_ = deprecated_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.MessageOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.MessageOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MessageOptions other) {
        if (other == com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance()) return this;
        if (other.hasMessageSetWireFormat()) {
          setMessageSetWireFormat(other.getMessageSetWireFormat());
        }
        if (other.hasNoStandardDescriptorAccessor()) {
          setNoStandardDescriptorAccessor(other.getNoStandardDescriptorAccessor());
        }
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000008);
              uninterpretedOptionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
          if (!getUninterpretedOption(i).isInitialized()) {
            
            return false;
          }
        }
        if (!extensionsAreInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.MessageOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.MessageOptions) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean messageSetWireFormat_ ;
      /**
       * <code>optional bool message_set_wire_format = 1 [default = false];</code>
       *
       * <pre>
       * Set true to use the old proto1 MessageSet wire format for extensions.
       * This is provided for backwards-compatibility with the MessageSet wire
       * format.  You should not use this for any other reason:  It's less
       * efficient, has fewer features, and is more complicated.
       * The message must be defined exactly as follows:
       *   message Foo {
       *     option message_set_wire_format = true;
       *     extensions 4 to max;
       *   }
       * Note that the message cannot have any defined fields; MessageSets only
       * have extensions.
       * All extensions of your type must be singular messages; e.g. they cannot
       * be int32s, enums, or repeated messages.
       * Because this is an option, the above two restrictions are not enforced by
       * the protocol compiler.
       * </pre>
       */
      public boolean hasMessageSetWireFormat() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool message_set_wire_format = 1 [default = false];</code>
       *
       * <pre>
       * Set true to use the old proto1 MessageSet wire format for extensions.
       * This is provided for backwards-compatibility with the MessageSet wire
       * format.  You should not use this for any other reason:  It's less
       * efficient, has fewer features, and is more complicated.
       * The message must be defined exactly as follows:
       *   message Foo {
       *     option message_set_wire_format = true;
       *     extensions 4 to max;
       *   }
       * Note that the message cannot have any defined fields; MessageSets only
       * have extensions.
       * All extensions of your type must be singular messages; e.g. they cannot
       * be int32s, enums, or repeated messages.
       * Because this is an option, the above two restrictions are not enforced by
       * the protocol compiler.
       * </pre>
       */
      public boolean getMessageSetWireFormat() {
        return messageSetWireFormat_;
      }
      /**
       * <code>optional bool message_set_wire_format = 1 [default = false];</code>
       *
       * <pre>
       * Set true to use the old proto1 MessageSet wire format for extensions.
       * This is provided for backwards-compatibility with the MessageSet wire
       * format.  You should not use this for any other reason:  It's less
       * efficient, has fewer features, and is more complicated.
       * The message must be defined exactly as follows:
       *   message Foo {
       *     option message_set_wire_format = true;
       *     extensions 4 to max;
       *   }
       * Note that the message cannot have any defined fields; MessageSets only
       * have extensions.
       * All extensions of your type must be singular messages; e.g. they cannot
       * be int32s, enums, or repeated messages.
       * Because this is an option, the above two restrictions are not enforced by
       * the protocol compiler.
       * </pre>
       */
      public Builder setMessageSetWireFormat(boolean value) {
        bitField0_ |= 0x00000001;
        messageSetWireFormat_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool message_set_wire_format = 1 [default = false];</code>
       *
       * <pre>
       * Set true to use the old proto1 MessageSet wire format for extensions.
       * This is provided for backwards-compatibility with the MessageSet wire
       * format.  You should not use this for any other reason:  It's less
       * efficient, has fewer features, and is more complicated.
       * The message must be defined exactly as follows:
       *   message Foo {
       *     option message_set_wire_format = true;
       *     extensions 4 to max;
       *   }
       * Note that the message cannot have any defined fields; MessageSets only
       * have extensions.
       * All extensions of your type must be singular messages; e.g. they cannot
       * be int32s, enums, or repeated messages.
       * Because this is an option, the above two restrictions are not enforced by
       * the protocol compiler.
       * </pre>
       */
      public Builder clearMessageSetWireFormat() {
        bitField0_ = (bitField0_ & ~0x00000001);
        messageSetWireFormat_ = false;
        onChanged();
        return this;
      }

      private boolean noStandardDescriptorAccessor_ ;
      /**
       * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
       *
       * <pre>
       * Disables the generation of the standard "descriptor()" accessor, which can
       * conflict with a field of the same name.  This is meant to make migration
       * from proto1 easier; new code should avoid fields named "descriptor".
       * </pre>
       */
      public boolean hasNoStandardDescriptorAccessor() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
       *
       * <pre>
       * Disables the generation of the standard "descriptor()" accessor, which can
       * conflict with a field of the same name.  This is meant to make migration
       * from proto1 easier; new code should avoid fields named "descriptor".
       * </pre>
       */
      public boolean getNoStandardDescriptorAccessor() {
        return noStandardDescriptorAccessor_;
      }
      /**
       * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
       *
       * <pre>
       * Disables the generation of the standard "descriptor()" accessor, which can
       * conflict with a field of the same name.  This is meant to make migration
       * from proto1 easier; new code should avoid fields named "descriptor".
       * </pre>
       */
      public Builder setNoStandardDescriptorAccessor(boolean value) {
        bitField0_ |= 0x00000002;
        noStandardDescriptorAccessor_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool no_standard_descriptor_accessor = 2 [default = false];</code>
       *
       * <pre>
       * Disables the generation of the standard "descriptor()" accessor, which can
       * conflict with a field of the same name.  This is meant to make migration
       * from proto1 easier; new code should avoid fields named "descriptor".
       * </pre>
       */
      public Builder clearNoStandardDescriptorAccessor() {
        bitField0_ = (bitField0_ & ~0x00000002);
        noStandardDescriptorAccessor_ = false;
        onChanged();
        return this;
      }

      private boolean deprecated_ ;
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this message deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the message, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating messages.
       * </pre>
       */
      public boolean hasDeprecated() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this message deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the message, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating messages.
       * </pre>
       */
      public boolean getDeprecated() {
        return deprecated_;
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this message deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the message, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating messages.
       * </pre>
       */
      public Builder setDeprecated(boolean value) {
        bitField0_ |= 0x00000004;
        deprecated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this message deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the message, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating messages.
       * </pre>
       */
      public Builder clearDeprecated() {
        bitField0_ = (bitField0_ & ~0x00000004);
        deprecated_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          uninterpretedOption_ = new java.util.ArrayList<>(uninterpretedOption_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.MessageOptions)
    }

    static {
      defaultInstance = new MessageOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.MessageOptions)
  }

  public interface FieldOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.FieldOptions)
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<FieldOptions> {

    /**
     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
     *
     * <pre>
     * The ctype option instructs the C++ code generator to use a different
     * representation of the field than it normally would.  See the specific
     * options below.  This option is not yet implemented in the open source
     * release -- sorry, we'll try to include it in a future version!
     * </pre>
     */
    boolean hasCtype();
    /**
     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
     *
     * <pre>
     * The ctype option instructs the C++ code generator to use a different
     * representation of the field than it normally would.  See the specific
     * options below.  This option is not yet implemented in the open source
     * release -- sorry, we'll try to include it in a future version!
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype();

    /**
     * <code>optional bool packed = 2;</code>
     *
     * <pre>
     * The packed option can be enabled for repeated primitive fields to enable
     * a more efficient representation on the wire. Rather than repeatedly
     * writing the tag and type for each element, the entire array is encoded as
     * a single length-delimited blob.
     * </pre>
     */
    boolean hasPacked();
    /**
     * <code>optional bool packed = 2;</code>
     *
     * <pre>
     * The packed option can be enabled for repeated primitive fields to enable
     * a more efficient representation on the wire. Rather than repeatedly
     * writing the tag and type for each element, the entire array is encoded as
     * a single length-delimited blob.
     * </pre>
     */
    boolean getPacked();

    /**
     * <code>optional bool lazy = 5 [default = false];</code>
     *
     * <pre>
     * Should this field be parsed lazily?  Lazy applies only to message-type
     * fields.  It means that when the outer message is initially parsed, the
     * inner message's contents will not be parsed but instead stored in encoded
     * form.  The inner message will actually be parsed when it is first accessed.
     * This is only a hint.  Implementations are free to choose whether to use
     * eager or lazy parsing regardless of the value of this option.  However,
     * setting this option true suggests that the protocol author believes that
     * using lazy parsing on this field is worth the additional bookkeeping
     * overhead typically needed to implement it.
     * This option does not affect the public interface of any generated code;
     * all method signatures remain the same.  Furthermore, thread-safety of the
     * interface is not affected by this option; const methods remain safe to
     * call from multiple threads concurrently, while non-const methods continue
     * to require exclusive access.
     * Note that implementations may choose not to check required fields within
     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
     * may return true even if the inner message has missing required fields.
     * This is necessary because otherwise the inner message would have to be
     * parsed in order to perform the check, defeating the purpose of lazy
     * parsing.  An implementation which chooses not to check required fields
     * must be consistent about it.  That is, for any particular sub-message, the
     * implementation must either *always* check its required fields, or *never*
     * check its required fields, regardless of whether or not the message has
     * been parsed.
     * </pre>
     */
    boolean hasLazy();
    /**
     * <code>optional bool lazy = 5 [default = false];</code>
     *
     * <pre>
     * Should this field be parsed lazily?  Lazy applies only to message-type
     * fields.  It means that when the outer message is initially parsed, the
     * inner message's contents will not be parsed but instead stored in encoded
     * form.  The inner message will actually be parsed when it is first accessed.
     * This is only a hint.  Implementations are free to choose whether to use
     * eager or lazy parsing regardless of the value of this option.  However,
     * setting this option true suggests that the protocol author believes that
     * using lazy parsing on this field is worth the additional bookkeeping
     * overhead typically needed to implement it.
     * This option does not affect the public interface of any generated code;
     * all method signatures remain the same.  Furthermore, thread-safety of the
     * interface is not affected by this option; const methods remain safe to
     * call from multiple threads concurrently, while non-const methods continue
     * to require exclusive access.
     * Note that implementations may choose not to check required fields within
     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
     * may return true even if the inner message has missing required fields.
     * This is necessary because otherwise the inner message would have to be
     * parsed in order to perform the check, defeating the purpose of lazy
     * parsing.  An implementation which chooses not to check required fields
     * must be consistent about it.  That is, for any particular sub-message, the
     * implementation must either *always* check its required fields, or *never*
     * check its required fields, regardless of whether or not the message has
     * been parsed.
     * </pre>
     */
    boolean getLazy();

    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this field deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for accessors, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating fields.
     * </pre>
     */
    boolean hasDeprecated();
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this field deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for accessors, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating fields.
     * </pre>
     */
    boolean getDeprecated();

    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    boolean hasExperimentalMapKey();
    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    java.lang.String getExperimentalMapKey();
    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    com.google.protobuf.ByteString
        getExperimentalMapKeyBytes();

    /**
     * <code>optional bool weak = 10 [default = false];</code>
     *
     * <pre>
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    boolean hasWeak();
    /**
     * <code>optional bool weak = 10 [default = false];</code>
     *
     * <pre>
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    boolean getWeak();

    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.FieldOptions}
   */
  public static final class FieldOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        FieldOptions> implements
      // @@protoc_insertion_point(message_implements:google.protobuf.FieldOptions)
      FieldOptionsOrBuilder {
    // Use FieldOptions.newBuilder() to construct.
    private FieldOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.FieldOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FieldOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FieldOptions defaultInstance;
    public static FieldOptions getDefaultInstance() {
      return defaultInstance;
    }

    public FieldOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FieldOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.protobuf.DescriptorProtos.FieldOptions.CType value = com.google.protobuf.DescriptorProtos.FieldOptions.CType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                ctype_ = value;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              packed_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000008;
              deprecated_ = input.readBool();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000004;
              lazy_ = input.readBool();
              break;
            }
            case 74: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              experimentalMapKey_ = bs;
              break;
            }
            case 80: {
              bitField0_ |= 0x00000020;
              weak_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                uninterpretedOption_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000040;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.FieldOptions.class, com.google.protobuf.DescriptorProtos.FieldOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<FieldOptions> PARSER =
        new com.google.protobuf.AbstractParser<FieldOptions>() {
      public FieldOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FieldOptions(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<FieldOptions> getParserForType() {
      return PARSER;
    }

    /**
     * Protobuf enum {@code google.protobuf.FieldOptions.CType}
     */
    public enum CType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>STRING = 0;</code>
       *
       * <pre>
       * Default mode.
       * </pre>
       */
      STRING(0, 0),
      /**
       * <code>CORD = 1;</code>
       */
      CORD(1, 1),
      /**
       * <code>STRING_PIECE = 2;</code>
       */
      STRING_PIECE(2, 2),
      ;

      /**
       * <code>STRING = 0;</code>
       *
       * <pre>
       * Default mode.
       * </pre>
       */
      public static final int STRING_VALUE = 0;
      /**
       * <code>CORD = 1;</code>
       */
      public static final int CORD_VALUE = 1;
      /**
       * <code>STRING_PIECE = 2;</code>
       */
      public static final int STRING_PIECE_VALUE = 2;


      public final int getNumber() { return value; }

      public static CType valueOf(int value) {
        switch (value) {
          case 0: return STRING;
          case 1: return CORD;
          case 2: return STRING_PIECE;
          default: return null;
        }
      }

      public static com.google.protobuf.Internal.EnumLiteMap<CType>
          internalGetValueMap() {
        return internalValueMap;
      }
      private static com.google.protobuf.Internal.EnumLiteMap<CType>
          internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap<CType>() {
              public CType findValueByNumber(int number) {
                return CType.valueOf(number);
              }
            };

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        return getDescriptor().getValues().get(index);
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.FieldOptions.getDescriptor().getEnumTypes().get(0);
      }

      private static final CType[] VALUES = values();

      public static CType valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        return VALUES[desc.getIndex()];
      }

      private final int index;
      private final int value;

      private CType(int index, int value) {
        this.index = index;
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldOptions.CType)
    }

    private int bitField0_;
    public static final int CTYPE_FIELD_NUMBER = 1;
    private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_;
    /**
     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
     *
     * <pre>
     * The ctype option instructs the C++ code generator to use a different
     * representation of the field than it normally would.  See the specific
     * options below.  This option is not yet implemented in the open source
     * release -- sorry, we'll try to include it in a future version!
     * </pre>
     */
    public boolean hasCtype() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
     *
     * <pre>
     * The ctype option instructs the C++ code generator to use a different
     * representation of the field than it normally would.  See the specific
     * options below.  This option is not yet implemented in the open source
     * release -- sorry, we'll try to include it in a future version!
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
      return ctype_;
    }

    public static final int PACKED_FIELD_NUMBER = 2;
    private boolean packed_;
    /**
     * <code>optional bool packed = 2;</code>
     *
     * <pre>
     * The packed option can be enabled for repeated primitive fields to enable
     * a more efficient representation on the wire. Rather than repeatedly
     * writing the tag and type for each element, the entire array is encoded as
     * a single length-delimited blob.
     * </pre>
     */
    public boolean hasPacked() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool packed = 2;</code>
     *
     * <pre>
     * The packed option can be enabled for repeated primitive fields to enable
     * a more efficient representation on the wire. Rather than repeatedly
     * writing the tag and type for each element, the entire array is encoded as
     * a single length-delimited blob.
     * </pre>
     */
    public boolean getPacked() {
      return packed_;
    }

    public static final int LAZY_FIELD_NUMBER = 5;
    private boolean lazy_;
    /**
     * <code>optional bool lazy = 5 [default = false];</code>
     *
     * <pre>
     * Should this field be parsed lazily?  Lazy applies only to message-type
     * fields.  It means that when the outer message is initially parsed, the
     * inner message's contents will not be parsed but instead stored in encoded
     * form.  The inner message will actually be parsed when it is first accessed.
     * This is only a hint.  Implementations are free to choose whether to use
     * eager or lazy parsing regardless of the value of this option.  However,
     * setting this option true suggests that the protocol author believes that
     * using lazy parsing on this field is worth the additional bookkeeping
     * overhead typically needed to implement it.
     * This option does not affect the public interface of any generated code;
     * all method signatures remain the same.  Furthermore, thread-safety of the
     * interface is not affected by this option; const methods remain safe to
     * call from multiple threads concurrently, while non-const methods continue
     * to require exclusive access.
     * Note that implementations may choose not to check required fields within
     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
     * may return true even if the inner message has missing required fields.
     * This is necessary because otherwise the inner message would have to be
     * parsed in order to perform the check, defeating the purpose of lazy
     * parsing.  An implementation which chooses not to check required fields
     * must be consistent about it.  That is, for any particular sub-message, the
     * implementation must either *always* check its required fields, or *never*
     * check its required fields, regardless of whether or not the message has
     * been parsed.
     * </pre>
     */
    public boolean hasLazy() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool lazy = 5 [default = false];</code>
     *
     * <pre>
     * Should this field be parsed lazily?  Lazy applies only to message-type
     * fields.  It means that when the outer message is initially parsed, the
     * inner message's contents will not be parsed but instead stored in encoded
     * form.  The inner message will actually be parsed when it is first accessed.
     * This is only a hint.  Implementations are free to choose whether to use
     * eager or lazy parsing regardless of the value of this option.  However,
     * setting this option true suggests that the protocol author believes that
     * using lazy parsing on this field is worth the additional bookkeeping
     * overhead typically needed to implement it.
     * This option does not affect the public interface of any generated code;
     * all method signatures remain the same.  Furthermore, thread-safety of the
     * interface is not affected by this option; const methods remain safe to
     * call from multiple threads concurrently, while non-const methods continue
     * to require exclusive access.
     * Note that implementations may choose not to check required fields within
     * a lazy sub-message.  That is, calling IsInitialized() on the outher message
     * may return true even if the inner message has missing required fields.
     * This is necessary because otherwise the inner message would have to be
     * parsed in order to perform the check, defeating the purpose of lazy
     * parsing.  An implementation which chooses not to check required fields
     * must be consistent about it.  That is, for any particular sub-message, the
     * implementation must either *always* check its required fields, or *never*
     * check its required fields, regardless of whether or not the message has
     * been parsed.
     * </pre>
     */
    public boolean getLazy() {
      return lazy_;
    }

    public static final int DEPRECATED_FIELD_NUMBER = 3;
    private boolean deprecated_;
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this field deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for accessors, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating fields.
     * </pre>
     */
    public boolean hasDeprecated() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this field deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for accessors, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating fields.
     * </pre>
     */
    public boolean getDeprecated() {
      return deprecated_;
    }

    public static final int EXPERIMENTAL_MAP_KEY_FIELD_NUMBER = 9;
    private java.lang.Object experimentalMapKey_;
    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    public boolean hasExperimentalMapKey() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    public java.lang.String getExperimentalMapKey() {
      java.lang.Object ref = experimentalMapKey_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          experimentalMapKey_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string experimental_map_key = 9;</code>
     *
     * <pre>
     * EXPERIMENTAL.  DO NOT USE.
     * For "map" fields, the name of the field in the enclosed type that
     * is the key for this map.  For example, suppose we have:
     *   message Item {
     *     required string name = 1;
     *     required string value = 2;
     *   }
     *   message Config {
     *     repeated Item items = 1 [experimental_map_key="name"];
     *   }
     * In this situation, the map key for Item will be set to "name".
     * TODO: Fully-implement this, then remove the "experimental_" prefix.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getExperimentalMapKeyBytes() {
      java.lang.Object ref = experimentalMapKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        experimentalMapKey_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int WEAK_FIELD_NUMBER = 10;
    private boolean weak_;
    /**
     * <code>optional bool weak = 10 [default = false];</code>
     *
     * <pre>
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    public boolean hasWeak() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool weak = 10 [default = false];</code>
     *
     * <pre>
     * For Google-internal migration only. Do not use.
     * </pre>
     */
    public boolean getWeak() {
      return weak_;
    }

    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
      packed_ = false;
      lazy_ = false;
      deprecated_ = false;
      experimentalMapKey_ = "";
      weak_ = false;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
        if (!getUninterpretedOption(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!extensionsAreInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FieldOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, ctype_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, packed_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(3, deprecated_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(5, lazy_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(9, getExperimentalMapKeyBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(10, weak_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, ctype_.getNumber());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, packed_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, deprecated_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, lazy_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getExperimentalMapKeyBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, weak_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.FieldOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.FieldOptions, Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.FieldOptions)
        com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.FieldOptions.class, com.google.protobuf.DescriptorProtos.FieldOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
        bitField0_ = (bitField0_ & ~0x00000001);
        packed_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        lazy_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        deprecated_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        experimentalMapKey_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        weak_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.FieldOptions getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.FieldOptions build() {
        com.google.protobuf.DescriptorProtos.FieldOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.FieldOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.FieldOptions result = new com.google.protobuf.DescriptorProtos.FieldOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.ctype_ = ctype_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.packed_ = packed_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.lazy_ = lazy_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.deprecated_ = deprecated_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.experimentalMapKey_ = experimentalMapKey_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.weak_ = weak_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.FieldOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldOptions other) {
        if (other == com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance()) return this;
        if (other.hasCtype()) {
          setCtype(other.getCtype());
        }
        if (other.hasPacked()) {
          setPacked(other.getPacked());
        }
        if (other.hasLazy()) {
          setLazy(other.getLazy());
        }
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (other.hasExperimentalMapKey()) {
          bitField0_ |= 0x00000010;
          experimentalMapKey_ = other.experimentalMapKey_;
          onChanged();
        }
        if (other.hasWeak()) {
          setWeak(other.getWeak());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000040);
              uninterpretedOptionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
          if (!getUninterpretedOption(i).isInitialized()) {
            
            return false;
          }
        }
        if (!extensionsAreInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.FieldOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.FieldOptions) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
      /**
       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
       *
       * <pre>
       * The ctype option instructs the C++ code generator to use a different
       * representation of the field than it normally would.  See the specific
       * options below.  This option is not yet implemented in the open source
       * release -- sorry, we'll try to include it in a future version!
       * </pre>
       */
      public boolean hasCtype() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
       *
       * <pre>
       * The ctype option instructs the C++ code generator to use a different
       * representation of the field than it normally would.  See the specific
       * options below.  This option is not yet implemented in the open source
       * release -- sorry, we'll try to include it in a future version!
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
        return ctype_;
      }
      /**
       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
       *
       * <pre>
       * The ctype option instructs the C++ code generator to use a different
       * representation of the field than it normally would.  See the specific
       * options below.  This option is not yet implemented in the open source
       * release -- sorry, we'll try to include it in a future version!
       * </pre>
       */
      public Builder setCtype(com.google.protobuf.DescriptorProtos.FieldOptions.CType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        ctype_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];</code>
       *
       * <pre>
       * The ctype option instructs the C++ code generator to use a different
       * representation of the field than it normally would.  See the specific
       * options below.  This option is not yet implemented in the open source
       * release -- sorry, we'll try to include it in a future version!
       * </pre>
       */
      public Builder clearCtype() {
        bitField0_ = (bitField0_ & ~0x00000001);
        ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
        onChanged();
        return this;
      }

      private boolean packed_ ;
      /**
       * <code>optional bool packed = 2;</code>
       *
       * <pre>
       * The packed option can be enabled for repeated primitive fields to enable
       * a more efficient representation on the wire. Rather than repeatedly
       * writing the tag and type for each element, the entire array is encoded as
       * a single length-delimited blob.
       * </pre>
       */
      public boolean hasPacked() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool packed = 2;</code>
       *
       * <pre>
       * The packed option can be enabled for repeated primitive fields to enable
       * a more efficient representation on the wire. Rather than repeatedly
       * writing the tag and type for each element, the entire array is encoded as
       * a single length-delimited blob.
       * </pre>
       */
      public boolean getPacked() {
        return packed_;
      }
      /**
       * <code>optional bool packed = 2;</code>
       *
       * <pre>
       * The packed option can be enabled for repeated primitive fields to enable
       * a more efficient representation on the wire. Rather than repeatedly
       * writing the tag and type for each element, the entire array is encoded as
       * a single length-delimited blob.
       * </pre>
       */
      public Builder setPacked(boolean value) {
        bitField0_ |= 0x00000002;
        packed_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool packed = 2;</code>
       *
       * <pre>
       * The packed option can be enabled for repeated primitive fields to enable
       * a more efficient representation on the wire. Rather than repeatedly
       * writing the tag and type for each element, the entire array is encoded as
       * a single length-delimited blob.
       * </pre>
       */
      public Builder clearPacked() {
        bitField0_ = (bitField0_ & ~0x00000002);
        packed_ = false;
        onChanged();
        return this;
      }

      private boolean lazy_ ;
      /**
       * <code>optional bool lazy = 5 [default = false];</code>
       *
       * <pre>
       * Should this field be parsed lazily?  Lazy applies only to message-type
       * fields.  It means that when the outer message is initially parsed, the
       * inner message's contents will not be parsed but instead stored in encoded
       * form.  The inner message will actually be parsed when it is first accessed.
       * This is only a hint.  Implementations are free to choose whether to use
       * eager or lazy parsing regardless of the value of this option.  However,
       * setting this option true suggests that the protocol author believes that
       * using lazy parsing on this field is worth the additional bookkeeping
       * overhead typically needed to implement it.
       * This option does not affect the public interface of any generated code;
       * all method signatures remain the same.  Furthermore, thread-safety of the
       * interface is not affected by this option; const methods remain safe to
       * call from multiple threads concurrently, while non-const methods continue
       * to require exclusive access.
       * Note that implementations may choose not to check required fields within
       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
       * may return true even if the inner message has missing required fields.
       * This is necessary because otherwise the inner message would have to be
       * parsed in order to perform the check, defeating the purpose of lazy
       * parsing.  An implementation which chooses not to check required fields
       * must be consistent about it.  That is, for any particular sub-message, the
       * implementation must either *always* check its required fields, or *never*
       * check its required fields, regardless of whether or not the message has
       * been parsed.
       * </pre>
       */
      public boolean hasLazy() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool lazy = 5 [default = false];</code>
       *
       * <pre>
       * Should this field be parsed lazily?  Lazy applies only to message-type
       * fields.  It means that when the outer message is initially parsed, the
       * inner message's contents will not be parsed but instead stored in encoded
       * form.  The inner message will actually be parsed when it is first accessed.
       * This is only a hint.  Implementations are free to choose whether to use
       * eager or lazy parsing regardless of the value of this option.  However,
       * setting this option true suggests that the protocol author believes that
       * using lazy parsing on this field is worth the additional bookkeeping
       * overhead typically needed to implement it.
       * This option does not affect the public interface of any generated code;
       * all method signatures remain the same.  Furthermore, thread-safety of the
       * interface is not affected by this option; const methods remain safe to
       * call from multiple threads concurrently, while non-const methods continue
       * to require exclusive access.
       * Note that implementations may choose not to check required fields within
       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
       * may return true even if the inner message has missing required fields.
       * This is necessary because otherwise the inner message would have to be
       * parsed in order to perform the check, defeating the purpose of lazy
       * parsing.  An implementation which chooses not to check required fields
       * must be consistent about it.  That is, for any particular sub-message, the
       * implementation must either *always* check its required fields, or *never*
       * check its required fields, regardless of whether or not the message has
       * been parsed.
       * </pre>
       */
      public boolean getLazy() {
        return lazy_;
      }
      /**
       * <code>optional bool lazy = 5 [default = false];</code>
       *
       * <pre>
       * Should this field be parsed lazily?  Lazy applies only to message-type
       * fields.  It means that when the outer message is initially parsed, the
       * inner message's contents will not be parsed but instead stored in encoded
       * form.  The inner message will actually be parsed when it is first accessed.
       * This is only a hint.  Implementations are free to choose whether to use
       * eager or lazy parsing regardless of the value of this option.  However,
       * setting this option true suggests that the protocol author believes that
       * using lazy parsing on this field is worth the additional bookkeeping
       * overhead typically needed to implement it.
       * This option does not affect the public interface of any generated code;
       * all method signatures remain the same.  Furthermore, thread-safety of the
       * interface is not affected by this option; const methods remain safe to
       * call from multiple threads concurrently, while non-const methods continue
       * to require exclusive access.
       * Note that implementations may choose not to check required fields within
       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
       * may return true even if the inner message has missing required fields.
       * This is necessary because otherwise the inner message would have to be
       * parsed in order to perform the check, defeating the purpose of lazy
       * parsing.  An implementation which chooses not to check required fields
       * must be consistent about it.  That is, for any particular sub-message, the
       * implementation must either *always* check its required fields, or *never*
       * check its required fields, regardless of whether or not the message has
       * been parsed.
       * </pre>
       */
      public Builder setLazy(boolean value) {
        bitField0_ |= 0x00000004;
        lazy_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool lazy = 5 [default = false];</code>
       *
       * <pre>
       * Should this field be parsed lazily?  Lazy applies only to message-type
       * fields.  It means that when the outer message is initially parsed, the
       * inner message's contents will not be parsed but instead stored in encoded
       * form.  The inner message will actually be parsed when it is first accessed.
       * This is only a hint.  Implementations are free to choose whether to use
       * eager or lazy parsing regardless of the value of this option.  However,
       * setting this option true suggests that the protocol author believes that
       * using lazy parsing on this field is worth the additional bookkeeping
       * overhead typically needed to implement it.
       * This option does not affect the public interface of any generated code;
       * all method signatures remain the same.  Furthermore, thread-safety of the
       * interface is not affected by this option; const methods remain safe to
       * call from multiple threads concurrently, while non-const methods continue
       * to require exclusive access.
       * Note that implementations may choose not to check required fields within
       * a lazy sub-message.  That is, calling IsInitialized() on the outher message
       * may return true even if the inner message has missing required fields.
       * This is necessary because otherwise the inner message would have to be
       * parsed in order to perform the check, defeating the purpose of lazy
       * parsing.  An implementation which chooses not to check required fields
       * must be consistent about it.  That is, for any particular sub-message, the
       * implementation must either *always* check its required fields, or *never*
       * check its required fields, regardless of whether or not the message has
       * been parsed.
       * </pre>
       */
      public Builder clearLazy() {
        bitField0_ = (bitField0_ & ~0x00000004);
        lazy_ = false;
        onChanged();
        return this;
      }

      private boolean deprecated_ ;
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this field deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for accessors, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating fields.
       * </pre>
       */
      public boolean hasDeprecated() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this field deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for accessors, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating fields.
       * </pre>
       */
      public boolean getDeprecated() {
        return deprecated_;
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this field deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for accessors, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating fields.
       * </pre>
       */
      public Builder setDeprecated(boolean value) {
        bitField0_ |= 0x00000008;
        deprecated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this field deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for accessors, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating fields.
       * </pre>
       */
      public Builder clearDeprecated() {
        bitField0_ = (bitField0_ & ~0x00000008);
        deprecated_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object experimentalMapKey_ = "";
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public boolean hasExperimentalMapKey() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public java.lang.String getExperimentalMapKey() {
        java.lang.Object ref = experimentalMapKey_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            experimentalMapKey_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getExperimentalMapKeyBytes() {
        java.lang.Object ref = experimentalMapKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          experimentalMapKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public Builder setExperimentalMapKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        experimentalMapKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public Builder clearExperimentalMapKey() {
        bitField0_ = (bitField0_ & ~0x00000010);
        experimentalMapKey_ = getDefaultInstance().getExperimentalMapKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string experimental_map_key = 9;</code>
       *
       * <pre>
       * EXPERIMENTAL.  DO NOT USE.
       * For "map" fields, the name of the field in the enclosed type that
       * is the key for this map.  For example, suppose we have:
       *   message Item {
       *     required string name = 1;
       *     required string value = 2;
       *   }
       *   message Config {
       *     repeated Item items = 1 [experimental_map_key="name"];
       *   }
       * In this situation, the map key for Item will be set to "name".
       * TODO: Fully-implement this, then remove the "experimental_" prefix.
       * </pre>
       */
      public Builder setExperimentalMapKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        experimentalMapKey_ = value;
        onChanged();
        return this;
      }

      private boolean weak_ ;
      /**
       * <code>optional bool weak = 10 [default = false];</code>
       *
       * <pre>
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public boolean hasWeak() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool weak = 10 [default = false];</code>
       *
       * <pre>
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public boolean getWeak() {
        return weak_;
      }
      /**
       * <code>optional bool weak = 10 [default = false];</code>
       *
       * <pre>
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public Builder setWeak(boolean value) {
        bitField0_ |= 0x00000020;
        weak_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool weak = 10 [default = false];</code>
       *
       * <pre>
       * For Google-internal migration only. Do not use.
       * </pre>
       */
      public Builder clearWeak() {
        bitField0_ = (bitField0_ & ~0x00000020);
        weak_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          uninterpretedOption_ = new java.util.ArrayList<>(uninterpretedOption_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.FieldOptions)
    }

    static {
      defaultInstance = new FieldOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions)
  }

  public interface EnumOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.EnumOptions)
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<EnumOptions> {

    /**
     * <code>optional bool allow_alias = 2;</code>
     *
     * <pre>
     * Set this option to true to allow mapping different tag names to the same
     * value.
     * </pre>
     */
    boolean hasAllowAlias();
    /**
     * <code>optional bool allow_alias = 2;</code>
     *
     * <pre>
     * Set this option to true to allow mapping different tag names to the same
     * value.
     * </pre>
     */
    boolean getAllowAlias();

    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this enum deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the enum, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating enums.
     * </pre>
     */
    boolean hasDeprecated();
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this enum deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the enum, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating enums.
     * </pre>
     */
    boolean getDeprecated();

    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.EnumOptions}
   */
  public static final class EnumOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        EnumOptions> implements
      // @@protoc_insertion_point(message_implements:google.protobuf.EnumOptions)
      EnumOptionsOrBuilder {
    // Use EnumOptions.newBuilder() to construct.
    private EnumOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.EnumOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EnumOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EnumOptions defaultInstance;
    public static EnumOptions getDefaultInstance() {
      return defaultInstance;
    }

    public EnumOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EnumOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 16: {
              bitField0_ |= 0x00000001;
              allowAlias_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000002;
              deprecated_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                uninterpretedOption_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000004;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.EnumOptions.class, com.google.protobuf.DescriptorProtos.EnumOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<EnumOptions> PARSER =
        new com.google.protobuf.AbstractParser<EnumOptions>() {
      public EnumOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EnumOptions(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EnumOptions> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int ALLOW_ALIAS_FIELD_NUMBER = 2;
    private boolean allowAlias_;
    /**
     * <code>optional bool allow_alias = 2;</code>
     *
     * <pre>
     * Set this option to true to allow mapping different tag names to the same
     * value.
     * </pre>
     */
    public boolean hasAllowAlias() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool allow_alias = 2;</code>
     *
     * <pre>
     * Set this option to true to allow mapping different tag names to the same
     * value.
     * </pre>
     */
    public boolean getAllowAlias() {
      return allowAlias_;
    }

    public static final int DEPRECATED_FIELD_NUMBER = 3;
    private boolean deprecated_;
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this enum deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the enum, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating enums.
     * </pre>
     */
    public boolean hasDeprecated() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool deprecated = 3 [default = false];</code>
     *
     * <pre>
     * Is this enum deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the enum, or it will be completely ignored; in the very least, this
     * is a formalization for deprecating enums.
     * </pre>
     */
    public boolean getDeprecated() {
      return deprecated_;
    }

    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      allowAlias_ = false;
      deprecated_ = false;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
        if (!getUninterpretedOption(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!extensionsAreInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.EnumOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(2, allowAlias_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(3, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, allowAlias_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.EnumOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.EnumOptions, Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.EnumOptions)
        com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.EnumOptions.class, com.google.protobuf.DescriptorProtos.EnumOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.EnumOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        allowAlias_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        deprecated_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.EnumOptions getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.EnumOptions build() {
        com.google.protobuf.DescriptorProtos.EnumOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.EnumOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.EnumOptions result = new com.google.protobuf.DescriptorProtos.EnumOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.allowAlias_ = allowAlias_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.deprecated_ = deprecated_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.EnumOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumOptions other) {
        if (other == com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance()) return this;
        if (other.hasAllowAlias()) {
          setAllowAlias(other.getAllowAlias());
        }
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000004);
              uninterpretedOptionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
          if (!getUninterpretedOption(i).isInitialized()) {
            
            return false;
          }
        }
        if (!extensionsAreInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.EnumOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.EnumOptions) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean allowAlias_ ;
      /**
       * <code>optional bool allow_alias = 2;</code>
       *
       * <pre>
       * Set this option to true to allow mapping different tag names to the same
       * value.
       * </pre>
       */
      public boolean hasAllowAlias() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool allow_alias = 2;</code>
       *
       * <pre>
       * Set this option to true to allow mapping different tag names to the same
       * value.
       * </pre>
       */
      public boolean getAllowAlias() {
        return allowAlias_;
      }
      /**
       * <code>optional bool allow_alias = 2;</code>
       *
       * <pre>
       * Set this option to true to allow mapping different tag names to the same
       * value.
       * </pre>
       */
      public Builder setAllowAlias(boolean value) {
        bitField0_ |= 0x00000001;
        allowAlias_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool allow_alias = 2;</code>
       *
       * <pre>
       * Set this option to true to allow mapping different tag names to the same
       * value.
       * </pre>
       */
      public Builder clearAllowAlias() {
        bitField0_ = (bitField0_ & ~0x00000001);
        allowAlias_ = false;
        onChanged();
        return this;
      }

      private boolean deprecated_ ;
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this enum deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the enum, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating enums.
       * </pre>
       */
      public boolean hasDeprecated() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this enum deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the enum, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating enums.
       * </pre>
       */
      public boolean getDeprecated() {
        return deprecated_;
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this enum deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the enum, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating enums.
       * </pre>
       */
      public Builder setDeprecated(boolean value) {
        bitField0_ |= 0x00000002;
        deprecated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deprecated = 3 [default = false];</code>
       *
       * <pre>
       * Is this enum deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the enum, or it will be completely ignored; in the very least, this
       * is a formalization for deprecating enums.
       * </pre>
       */
      public Builder clearDeprecated() {
        bitField0_ = (bitField0_ & ~0x00000002);
        deprecated_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          uninterpretedOption_ = new java.util.ArrayList<>(uninterpretedOption_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumOptions)
    }

    static {
      defaultInstance = new EnumOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.EnumOptions)
  }

  public interface EnumValueOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.EnumValueOptions)
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<EnumValueOptions> {

    /**
     * <code>optional bool deprecated = 1 [default = false];</code>
     *
     * <pre>
     * Is this enum value deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the enum value, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating enum values.
     * </pre>
     */
    boolean hasDeprecated();
    /**
     * <code>optional bool deprecated = 1 [default = false];</code>
     *
     * <pre>
     * Is this enum value deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the enum value, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating enum values.
     * </pre>
     */
    boolean getDeprecated();

    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.EnumValueOptions}
   */
  public static final class EnumValueOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        EnumValueOptions> implements
      // @@protoc_insertion_point(message_implements:google.protobuf.EnumValueOptions)
      EnumValueOptionsOrBuilder {
    // Use EnumValueOptions.newBuilder() to construct.
    private EnumValueOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.EnumValueOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EnumValueOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EnumValueOptions defaultInstance;
    public static EnumValueOptions getDefaultInstance() {
      return defaultInstance;
    }

    public EnumValueOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EnumValueOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              deprecated_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                uninterpretedOption_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.EnumValueOptions.class, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<EnumValueOptions> PARSER =
        new com.google.protobuf.AbstractParser<EnumValueOptions>() {
      public EnumValueOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EnumValueOptions(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EnumValueOptions> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int DEPRECATED_FIELD_NUMBER = 1;
    private boolean deprecated_;
    /**
     * <code>optional bool deprecated = 1 [default = false];</code>
     *
     * <pre>
     * Is this enum value deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the enum value, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating enum values.
     * </pre>
     */
    public boolean hasDeprecated() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool deprecated = 1 [default = false];</code>
     *
     * <pre>
     * Is this enum value deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the enum value, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating enum values.
     * </pre>
     */
    public boolean getDeprecated() {
      return deprecated_;
    }

    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      deprecated_ = false;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
        if (!getUninterpretedOption(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!extensionsAreInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.EnumValueOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumValueOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.EnumValueOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.EnumValueOptions, Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.EnumValueOptions)
        com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.EnumValueOptions.class, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.EnumValueOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        deprecated_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.EnumValueOptions getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.EnumValueOptions build() {
        com.google.protobuf.DescriptorProtos.EnumValueOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.EnumValueOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.EnumValueOptions result = new com.google.protobuf.DescriptorProtos.EnumValueOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.deprecated_ = deprecated_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.EnumValueOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumValueOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumValueOptions other) {
        if (other == com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance()) return this;
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000002);
              uninterpretedOptionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
          if (!getUninterpretedOption(i).isInitialized()) {
            
            return false;
          }
        }
        if (!extensionsAreInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.EnumValueOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.EnumValueOptions) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean deprecated_ ;
      /**
       * <code>optional bool deprecated = 1 [default = false];</code>
       *
       * <pre>
       * Is this enum value deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the enum value, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating enum values.
       * </pre>
       */
      public boolean hasDeprecated() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool deprecated = 1 [default = false];</code>
       *
       * <pre>
       * Is this enum value deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the enum value, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating enum values.
       * </pre>
       */
      public boolean getDeprecated() {
        return deprecated_;
      }
      /**
       * <code>optional bool deprecated = 1 [default = false];</code>
       *
       * <pre>
       * Is this enum value deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the enum value, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating enum values.
       * </pre>
       */
      public Builder setDeprecated(boolean value) {
        bitField0_ |= 0x00000001;
        deprecated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deprecated = 1 [default = false];</code>
       *
       * <pre>
       * Is this enum value deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the enum value, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating enum values.
       * </pre>
       */
      public Builder clearDeprecated() {
        bitField0_ = (bitField0_ & ~0x00000001);
        deprecated_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          uninterpretedOption_ = new java.util.ArrayList<>(uninterpretedOption_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumValueOptions)
    }

    static {
      defaultInstance = new EnumValueOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueOptions)
  }

  public interface ServiceOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.ServiceOptions)
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<ServiceOptions> {

    /**
     * <code>optional bool deprecated = 33 [default = false];</code>
     *
     * <pre>
     * Is this service deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the service, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating services.
     * </pre>
     */
    boolean hasDeprecated();
    /**
     * <code>optional bool deprecated = 33 [default = false];</code>
     *
     * <pre>
     * Is this service deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the service, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating services.
     * </pre>
     */
    boolean getDeprecated();

    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.ServiceOptions}
   */
  public static final class ServiceOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        ServiceOptions> implements
      // @@protoc_insertion_point(message_implements:google.protobuf.ServiceOptions)
      ServiceOptionsOrBuilder {
    // Use ServiceOptions.newBuilder() to construct.
    private ServiceOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.ServiceOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ServiceOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ServiceOptions defaultInstance;
    public static ServiceOptions getDefaultInstance() {
      return defaultInstance;
    }

    public ServiceOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ServiceOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 264: {
              bitField0_ |= 0x00000001;
              deprecated_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                uninterpretedOption_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.ServiceOptions.class, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<ServiceOptions> PARSER =
        new com.google.protobuf.AbstractParser<ServiceOptions>() {
      public ServiceOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ServiceOptions(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ServiceOptions> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int DEPRECATED_FIELD_NUMBER = 33;
    private boolean deprecated_;
    /**
     * <code>optional bool deprecated = 33 [default = false];</code>
     *
     * <pre>
     * Is this service deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the service, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating services.
     * </pre>
     */
    public boolean hasDeprecated() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool deprecated = 33 [default = false];</code>
     *
     * <pre>
     * Is this service deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the service, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating services.
     * </pre>
     */
    public boolean getDeprecated() {
      return deprecated_;
    }

    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      deprecated_ = false;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
        if (!getUninterpretedOption(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!extensionsAreInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.ServiceOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(33, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(33, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.ServiceOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.ServiceOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.ServiceOptions, Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.ServiceOptions)
        com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.ServiceOptions.class, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.ServiceOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        deprecated_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.ServiceOptions getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.ServiceOptions build() {
        com.google.protobuf.DescriptorProtos.ServiceOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.ServiceOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.ServiceOptions result = new com.google.protobuf.DescriptorProtos.ServiceOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.deprecated_ = deprecated_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.ServiceOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.ServiceOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.ServiceOptions other) {
        if (other == com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance()) return this;
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000002);
              uninterpretedOptionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
          if (!getUninterpretedOption(i).isInitialized()) {
            
            return false;
          }
        }
        if (!extensionsAreInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.ServiceOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.ServiceOptions) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean deprecated_ ;
      /**
       * <code>optional bool deprecated = 33 [default = false];</code>
       *
       * <pre>
       * Is this service deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the service, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating services.
       * </pre>
       */
      public boolean hasDeprecated() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool deprecated = 33 [default = false];</code>
       *
       * <pre>
       * Is this service deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the service, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating services.
       * </pre>
       */
      public boolean getDeprecated() {
        return deprecated_;
      }
      /**
       * <code>optional bool deprecated = 33 [default = false];</code>
       *
       * <pre>
       * Is this service deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the service, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating services.
       * </pre>
       */
      public Builder setDeprecated(boolean value) {
        bitField0_ |= 0x00000001;
        deprecated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deprecated = 33 [default = false];</code>
       *
       * <pre>
       * Is this service deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the service, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating services.
       * </pre>
       */
      public Builder clearDeprecated() {
        bitField0_ = (bitField0_ & ~0x00000001);
        deprecated_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          uninterpretedOption_ = new java.util.ArrayList<>(uninterpretedOption_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.ServiceOptions)
    }

    static {
      defaultInstance = new ServiceOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.ServiceOptions)
  }

  public interface MethodOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.MethodOptions)
      com.google.protobuf.GeneratedMessage.
          ExtendableMessageOrBuilder<MethodOptions> {

    /**
     * <code>optional bool deprecated = 33 [default = false];</code>
     *
     * <pre>
     * Is this method deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the method, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating methods.
     * </pre>
     */
    boolean hasDeprecated();
    /**
     * <code>optional bool deprecated = 33 [default = false];</code>
     *
     * <pre>
     * Is this method deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the method, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating methods.
     * </pre>
     */
    boolean getDeprecated();

    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
        getUninterpretedOptionList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    int getUninterpretedOptionCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.MethodOptions}
   */
  public static final class MethodOptions extends
      com.google.protobuf.GeneratedMessage.ExtendableMessage<
        MethodOptions> implements
      // @@protoc_insertion_point(message_implements:google.protobuf.MethodOptions)
      MethodOptionsOrBuilder {
    // Use MethodOptions.newBuilder() to construct.
    private MethodOptions(com.google.protobuf.GeneratedMessage.ExtendableBuilder<com.google.protobuf.DescriptorProtos.MethodOptions, ?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MethodOptions(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final MethodOptions defaultInstance;
    public static MethodOptions getDefaultInstance() {
      return defaultInstance;
    }

    public MethodOptions getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MethodOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 264: {
              bitField0_ |= 0x00000001;
              deprecated_ = input.readBool();
              break;
            }
            case 7994: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                uninterpretedOption_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000002;
              }
              uninterpretedOption_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.MethodOptions.class, com.google.protobuf.DescriptorProtos.MethodOptions.Builder.class);
    }

    public static com.google.protobuf.Parser<MethodOptions> PARSER =
        new com.google.protobuf.AbstractParser<MethodOptions>() {
      public MethodOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MethodOptions(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<MethodOptions> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    public static final int DEPRECATED_FIELD_NUMBER = 33;
    private boolean deprecated_;
    /**
     * <code>optional bool deprecated = 33 [default = false];</code>
     *
     * <pre>
     * Is this method deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the method, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating methods.
     * </pre>
     */
    public boolean hasDeprecated() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool deprecated = 33 [default = false];</code>
     *
     * <pre>
     * Is this method deprecated?
     * Depending on the target platform, this can emit Deprecated annotations
     * for the method, or it will be completely ignored; in the very least,
     * this is a formalization for deprecating methods.
     * </pre>
     */
    public boolean getDeprecated() {
      return deprecated_;
    }

    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
        getUninterpretedOptionOrBuilderList() {
      return uninterpretedOption_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public int getUninterpretedOptionCount() {
      return uninterpretedOption_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
      return uninterpretedOption_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
     *
     * <pre>
     * The parser stores options it doesn't recognize here. See above.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
        int index) {
      return uninterpretedOption_.get(index);
    }

    private void initFields() {
      deprecated_ = false;
      uninterpretedOption_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
        if (!getUninterpretedOption(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      if (!extensionsAreInitialized()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      com.google.protobuf.GeneratedMessage
        .ExtendableMessage<com.google.protobuf.DescriptorProtos.MethodOptions>.ExtensionWriter extensionWriter =
          newExtensionWriter();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(33, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        output.writeMessage(999, uninterpretedOption_.get(i));
      }
      extensionWriter.writeUntil(536870912, output);
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(33, deprecated_);
      }
      for (int i = 0; i < uninterpretedOption_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(999, uninterpretedOption_.get(i));
      }
      size += extensionsSerializedSize();
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MethodOptions prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.MethodOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
          com.google.protobuf.DescriptorProtos.MethodOptions, Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.MethodOptions)
        com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.MethodOptions.class, com.google.protobuf.DescriptorProtos.MethodOptions.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.MethodOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUninterpretedOptionFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        deprecated_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.MethodOptions getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.MethodOptions build() {
        com.google.protobuf.DescriptorProtos.MethodOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.MethodOptions buildPartial() {
        com.google.protobuf.DescriptorProtos.MethodOptions result = new com.google.protobuf.DescriptorProtos.MethodOptions(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.deprecated_ = deprecated_;
        if (uninterpretedOptionBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.uninterpretedOption_ = uninterpretedOption_;
        } else {
          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.MethodOptions) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.MethodOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MethodOptions other) {
        if (other == com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance()) return this;
        if (other.hasDeprecated()) {
          setDeprecated(other.getDeprecated());
        }
        if (uninterpretedOptionBuilder_ == null) {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOption_.isEmpty()) {
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureUninterpretedOptionIsMutable();
              uninterpretedOption_.addAll(other.uninterpretedOption_);
            }
            onChanged();
          }
        } else {
          if (!other.uninterpretedOption_.isEmpty()) {
            if (uninterpretedOptionBuilder_.isEmpty()) {
              uninterpretedOptionBuilder_.dispose();
              uninterpretedOptionBuilder_ = null;
              uninterpretedOption_ = other.uninterpretedOption_;
              bitField0_ = (bitField0_ & ~0x00000002);
              uninterpretedOptionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUninterpretedOptionFieldBuilder() : null;
            } else {
              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
            }
          }
        }
        this.mergeExtensionFields(other);
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
          if (!getUninterpretedOption(i).isInitialized()) {
            
            return false;
          }
        }
        if (!extensionsAreInitialized()) {
          
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.MethodOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.MethodOptions) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private boolean deprecated_ ;
      /**
       * <code>optional bool deprecated = 33 [default = false];</code>
       *
       * <pre>
       * Is this method deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the method, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating methods.
       * </pre>
       */
      public boolean hasDeprecated() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool deprecated = 33 [default = false];</code>
       *
       * <pre>
       * Is this method deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the method, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating methods.
       * </pre>
       */
      public boolean getDeprecated() {
        return deprecated_;
      }
      /**
       * <code>optional bool deprecated = 33 [default = false];</code>
       *
       * <pre>
       * Is this method deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the method, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating methods.
       * </pre>
       */
      public Builder setDeprecated(boolean value) {
        bitField0_ |= 0x00000001;
        deprecated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deprecated = 33 [default = false];</code>
       *
       * <pre>
       * Is this method deprecated?
       * Depending on the target platform, this can emit Deprecated annotations
       * for the method, or it will be completely ignored; in the very least,
       * this is a formalization for deprecating methods.
       * </pre>
       */
      public Builder clearDeprecated() {
        bitField0_ = (bitField0_ & ~0x00000001);
        deprecated_ = false;
        onChanged();
        return this;
      }

      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
        java.util.Collections.emptyList();
      private void ensureUninterpretedOptionIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          uninterpretedOption_ = new java.util.ArrayList<>(uninterpretedOption_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
        if (uninterpretedOptionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        } else {
          return uninterpretedOptionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public int getUninterpretedOptionCount() {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.size();
        } else {
          return uninterpretedOptionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);
        } else {
          return uninterpretedOptionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder setUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.set(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
        if (uninterpretedOptionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, value);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addUninterpretedOption(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.add(index, builderForValue.build());
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder addAllUninterpretedOption(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, uninterpretedOption_);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder clearUninterpretedOption() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOption_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public Builder removeUninterpretedOption(int index) {
        if (uninterpretedOptionBuilder_ == null) {
          ensureUninterpretedOptionIsMutable();
          uninterpretedOption_.remove(index);
          onChanged();
        } else {
          uninterpretedOptionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
          int index) {
        if (uninterpretedOptionBuilder_ == null) {
          return uninterpretedOption_.get(index);  } else {
          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
           getUninterpretedOptionOrBuilderList() {
        if (uninterpretedOptionBuilder_ != null) {
          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(uninterpretedOption_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
          int index) {
        return getUninterpretedOptionFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;</code>
       *
       * <pre>
       * The parser stores options it doesn't recognize here. See above.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
           getUninterpretedOptionBuilderList() {
        return getUninterpretedOptionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
          getUninterpretedOptionFieldBuilder() {
        if (uninterpretedOptionBuilder_ == null) {
          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  uninterpretedOption_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          uninterpretedOption_ = null;
        }
        return uninterpretedOptionBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.MethodOptions)
    }

    static {
      defaultInstance = new MethodOptions(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.MethodOptions)
  }

  public interface UninterpretedOptionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.UninterpretedOption)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> 
        getNameList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index);
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    int getNameCount();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
        getNameOrBuilderList();
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
        int index);

    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    boolean hasIdentifierValue();
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    java.lang.String getIdentifierValue();
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    com.google.protobuf.ByteString
        getIdentifierValueBytes();

    /**
     * <code>optional uint64 positive_int_value = 4;</code>
     */
    boolean hasPositiveIntValue();
    /**
     * <code>optional uint64 positive_int_value = 4;</code>
     */
    long getPositiveIntValue();

    /**
     * <code>optional int64 negative_int_value = 5;</code>
     */
    boolean hasNegativeIntValue();
    /**
     * <code>optional int64 negative_int_value = 5;</code>
     */
    long getNegativeIntValue();

    /**
     * <code>optional double double_value = 6;</code>
     */
    boolean hasDoubleValue();
    /**
     * <code>optional double double_value = 6;</code>
     */
    double getDoubleValue();

    /**
     * <code>optional bytes string_value = 7;</code>
     */
    boolean hasStringValue();
    /**
     * <code>optional bytes string_value = 7;</code>
     */
    com.google.protobuf.ByteString getStringValue();

    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    boolean hasAggregateValue();
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    java.lang.String getAggregateValue();
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    com.google.protobuf.ByteString
        getAggregateValueBytes();
  }
  /**
   * Protobuf type {@code google.protobuf.UninterpretedOption}
   *
   * <pre>
   * A message representing a option the parser does not recognize. This only
   * appears in options protos created by the compiler::Parser class.
   * DescriptorPool resolves these when building Descriptor objects. Therefore,
   * options protos in descriptor objects (e.g. returned by Descriptor::options(),
   * or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
   * in them.
   * </pre>
   */
  public static final class UninterpretedOption extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.UninterpretedOption)
      UninterpretedOptionOrBuilder {
    // Use UninterpretedOption.newBuilder() to construct.
    private UninterpretedOption(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UninterpretedOption(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UninterpretedOption defaultInstance;
    public static UninterpretedOption getDefaultInstance() {
      return defaultInstance;
    }

    public UninterpretedOption getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UninterpretedOption(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                name_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              name_.add(input.readMessage(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              identifierValue_ = bs;
              break;
            }
            case 32: {
              bitField0_ |= 0x00000002;
              positiveIntValue_ = input.readUInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000004;
              negativeIntValue_ = input.readInt64();
              break;
            }
            case 49: {
              bitField0_ |= 0x00000008;
              doubleValue_ = input.readDouble();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000010;
              stringValue_ = input.readBytes();
              break;
            }
            case 66: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              aggregateValue_ = bs;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          name_ = java.util.Collections.unmodifiableList(name_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.UninterpretedOption.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder.class);
    }

    public static com.google.protobuf.Parser<UninterpretedOption> PARSER =
        new com.google.protobuf.AbstractParser<UninterpretedOption>() {
      public UninterpretedOption parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UninterpretedOption(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<UninterpretedOption> getParserForType() {
      return PARSER;
    }

    public interface NamePartOrBuilder extends
        // @@protoc_insertion_point(interface_extends:google.protobuf.UninterpretedOption.NamePart)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>required string name_part = 1;</code>
       */
      boolean hasNamePart();
      /**
       * <code>required string name_part = 1;</code>
       */
      java.lang.String getNamePart();
      /**
       * <code>required string name_part = 1;</code>
       */
      com.google.protobuf.ByteString
          getNamePartBytes();

      /**
       * <code>required bool is_extension = 2;</code>
       */
      boolean hasIsExtension();
      /**
       * <code>required bool is_extension = 2;</code>
       */
      boolean getIsExtension();
    }
    /**
     * Protobuf type {@code google.protobuf.UninterpretedOption.NamePart}
     *
     * <pre>
     * The name of the uninterpreted option.  Each string represents a segment in
     * a dot-separated name.  is_extension is true iff a segment represents an
     * extension (denoted with parentheses in options specs in .proto files).
     * E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
     * "foo.(bar.baz).qux".
     * </pre>
     */
    public static final class NamePart extends
        com.google.protobuf.GeneratedMessage implements
        // @@protoc_insertion_point(message_implements:google.protobuf.UninterpretedOption.NamePart)
        NamePartOrBuilder {
      // Use NamePart.newBuilder() to construct.
      private NamePart(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private NamePart(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final NamePart defaultInstance;
      public static NamePart getDefaultInstance() {
        return defaultInstance;
      }

      public NamePart getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private NamePart(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                namePart_ = bs;
                break;
              }
              case 16: {
                bitField0_ |= 0x00000002;
                isExtension_ = input.readBool();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder.class);
      }

      public static com.google.protobuf.Parser<NamePart> PARSER =
          new com.google.protobuf.AbstractParser<NamePart>() {
        public NamePart parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new NamePart(input, extensionRegistry);
        }
      };

      @java.lang.Override
      public com.google.protobuf.Parser<NamePart> getParserForType() {
        return PARSER;
      }

      private int bitField0_;
      public static final int NAME_PART_FIELD_NUMBER = 1;
      private java.lang.Object namePart_;
      /**
       * <code>required string name_part = 1;</code>
       */
      public boolean hasNamePart() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string name_part = 1;</code>
       */
      public java.lang.String getNamePart() {
        java.lang.Object ref = namePart_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            namePart_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string name_part = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNamePartBytes() {
        java.lang.Object ref = namePart_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          namePart_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int IS_EXTENSION_FIELD_NUMBER = 2;
      private boolean isExtension_;
      /**
       * <code>required bool is_extension = 2;</code>
       */
      public boolean hasIsExtension() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required bool is_extension = 2;</code>
       */
      public boolean getIsExtension() {
        return isExtension_;
      }

      private void initFields() {
        namePart_ = "";
        isExtension_ = false;
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        if (!hasNamePart()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasIsExtension()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(1, getNamePartBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBool(2, isExtension_);
        }
        getUnknownFields().writeTo(output);
      }

      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(1, getNamePartBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(2, isExtension_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code google.protobuf.UninterpretedOption.NamePart}
       *
       * <pre>
       * The name of the uninterpreted option.  Each string represents a segment in
       * a dot-separated name.  is_extension is true iff a segment represents an
       * extension (denoted with parentheses in options specs in .proto files).
       * E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
       * "foo.(bar.baz).qux".
       * </pre>
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:google.protobuf.UninterpretedOption.NamePart)
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder.class);
        }

        // Construct using com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          namePart_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          isExtension_ = false;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
        }

        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getDefaultInstanceForType() {
          return com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance();
        }

        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart build() {
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart buildPartial() {
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = new com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.namePart_ = namePart_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.isExtension_ = isExtension_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart) {
            return mergeFrom((com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart other) {
          if (other == com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance()) return this;
          if (other.hasNamePart()) {
            bitField0_ |= 0x00000001;
            namePart_ = other.namePart_;
            onChanged();
          }
          if (other.hasIsExtension()) {
            setIsExtension(other.getIsExtension());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          if (!hasNamePart()) {
            
            return false;
          }
          if (!hasIsExtension()) {
            
            return false;
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.lang.Object namePart_ = "";
        /**
         * <code>required string name_part = 1;</code>
         */
        public boolean hasNamePart() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public java.lang.String getNamePart() {
          java.lang.Object ref = namePart_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              namePart_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public com.google.protobuf.ByteString
            getNamePartBytes() {
          java.lang.Object ref = namePart_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            namePart_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public Builder setNamePart(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          namePart_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public Builder clearNamePart() {
          bitField0_ = (bitField0_ & ~0x00000001);
          namePart_ = getDefaultInstance().getNamePart();
          onChanged();
          return this;
        }
        /**
         * <code>required string name_part = 1;</code>
         */
        public Builder setNamePartBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          namePart_ = value;
          onChanged();
          return this;
        }

        private boolean isExtension_ ;
        /**
         * <code>required bool is_extension = 2;</code>
         */
        public boolean hasIsExtension() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>required bool is_extension = 2;</code>
         */
        public boolean getIsExtension() {
          return isExtension_;
        }
        /**
         * <code>required bool is_extension = 2;</code>
         */
        public Builder setIsExtension(boolean value) {
          bitField0_ |= 0x00000002;
          isExtension_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required bool is_extension = 2;</code>
         */
        public Builder clearIsExtension() {
          bitField0_ = (bitField0_ & ~0x00000002);
          isExtension_ = false;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:google.protobuf.UninterpretedOption.NamePart)
      }

      static {
        defaultInstance = new NamePart(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption.NamePart)
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 2;
    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> name_;
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> getNameList() {
      return name_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
        getNameOrBuilderList() {
      return name_;
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public int getNameCount() {
      return name_.size();
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index) {
      return name_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
     */
    public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
        int index) {
      return name_.get(index);
    }

    public static final int IDENTIFIER_VALUE_FIELD_NUMBER = 3;
    private java.lang.Object identifierValue_;
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    public boolean hasIdentifierValue() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    public java.lang.String getIdentifierValue() {
      java.lang.Object ref = identifierValue_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          identifierValue_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string identifier_value = 3;</code>
     *
     * <pre>
     * The value of the uninterpreted option, in whatever type the tokenizer
     * identified it as during parsing. Exactly one of these should be set.
     * </pre>
     */
    public com.google.protobuf.ByteString
        getIdentifierValueBytes() {
      java.lang.Object ref = identifierValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        identifierValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int POSITIVE_INT_VALUE_FIELD_NUMBER = 4;
    private long positiveIntValue_;
    /**
     * <code>optional uint64 positive_int_value = 4;</code>
     */
    public boolean hasPositiveIntValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional uint64 positive_int_value = 4;</code>
     */
    public long getPositiveIntValue() {
      return positiveIntValue_;
    }

    public static final int NEGATIVE_INT_VALUE_FIELD_NUMBER = 5;
    private long negativeIntValue_;
    /**
     * <code>optional int64 negative_int_value = 5;</code>
     */
    public boolean hasNegativeIntValue() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 negative_int_value = 5;</code>
     */
    public long getNegativeIntValue() {
      return negativeIntValue_;
    }

    public static final int DOUBLE_VALUE_FIELD_NUMBER = 6;
    private double doubleValue_;
    /**
     * <code>optional double double_value = 6;</code>
     */
    public boolean hasDoubleValue() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional double double_value = 6;</code>
     */
    public double getDoubleValue() {
      return doubleValue_;
    }

    public static final int STRING_VALUE_FIELD_NUMBER = 7;
    private com.google.protobuf.ByteString stringValue_;
    /**
     * <code>optional bytes string_value = 7;</code>
     */
    public boolean hasStringValue() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bytes string_value = 7;</code>
     */
    public com.google.protobuf.ByteString getStringValue() {
      return stringValue_;
    }

    public static final int AGGREGATE_VALUE_FIELD_NUMBER = 8;
    private java.lang.Object aggregateValue_;
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    public boolean hasAggregateValue() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    public java.lang.String getAggregateValue() {
      java.lang.Object ref = aggregateValue_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          aggregateValue_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string aggregate_value = 8;</code>
     */
    public com.google.protobuf.ByteString
        getAggregateValueBytes() {
      java.lang.Object ref = aggregateValue_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        aggregateValue_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      name_ = java.util.Collections.emptyList();
      identifierValue_ = "";
      positiveIntValue_ = 0L;
      negativeIntValue_ = 0L;
      doubleValue_ = 0D;
      stringValue_ = com.google.protobuf.ByteString.EMPTY;
      aggregateValue_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      for (int i = 0; i < getNameCount(); i++) {
        if (!getName(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < name_.size(); i++) {
        output.writeMessage(2, name_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(3, getIdentifierValueBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeUInt64(4, positiveIntValue_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(5, negativeIntValue_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeDouble(6, doubleValue_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(7, stringValue_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(8, getAggregateValueBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < name_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, name_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getIdentifierValueBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, positiveIntValue_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, negativeIntValue_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, doubleValue_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, stringValue_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getAggregateValueBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.UninterpretedOption prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.UninterpretedOption}
     *
     * <pre>
     * A message representing a option the parser does not recognize. This only
     * appears in options protos created by the compiler::Parser class.
     * DescriptorPool resolves these when building Descriptor objects. Therefore,
     * options protos in descriptor objects (e.g. returned by Descriptor::options(),
     * or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
     * in them.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.UninterpretedOption)
        com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.UninterpretedOption.class, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getNameFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (nameBuilder_ == null) {
          name_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          nameBuilder_.clear();
        }
        identifierValue_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        positiveIntValue_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        negativeIntValue_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        doubleValue_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000010);
        stringValue_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        aggregateValue_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.UninterpretedOption getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.UninterpretedOption build() {
        com.google.protobuf.DescriptorProtos.UninterpretedOption result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.UninterpretedOption buildPartial() {
        com.google.protobuf.DescriptorProtos.UninterpretedOption result = new com.google.protobuf.DescriptorProtos.UninterpretedOption(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (nameBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            name_ = java.util.Collections.unmodifiableList(name_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.name_ = name_;
        } else {
          result.name_ = nameBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.identifierValue_ = identifierValue_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.positiveIntValue_ = positiveIntValue_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.negativeIntValue_ = negativeIntValue_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.doubleValue_ = doubleValue_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.stringValue_ = stringValue_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.aggregateValue_ = aggregateValue_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.UninterpretedOption) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.UninterpretedOption)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.UninterpretedOption other) {
        if (other == com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance()) return this;
        if (nameBuilder_ == null) {
          if (!other.name_.isEmpty()) {
            if (name_.isEmpty()) {
              name_ = other.name_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureNameIsMutable();
              name_.addAll(other.name_);
            }
            onChanged();
          }
        } else {
          if (!other.name_.isEmpty()) {
            if (nameBuilder_.isEmpty()) {
              nameBuilder_.dispose();
              nameBuilder_ = null;
              name_ = other.name_;
              bitField0_ = (bitField0_ & ~0x00000001);
              nameBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getNameFieldBuilder() : null;
            } else {
              nameBuilder_.addAllMessages(other.name_);
            }
          }
        }
        if (other.hasIdentifierValue()) {
          bitField0_ |= 0x00000002;
          identifierValue_ = other.identifierValue_;
          onChanged();
        }
        if (other.hasPositiveIntValue()) {
          setPositiveIntValue(other.getPositiveIntValue());
        }
        if (other.hasNegativeIntValue()) {
          setNegativeIntValue(other.getNegativeIntValue());
        }
        if (other.hasDoubleValue()) {
          setDoubleValue(other.getDoubleValue());
        }
        if (other.hasStringValue()) {
          setStringValue(other.getStringValue());
        }
        if (other.hasAggregateValue()) {
          bitField0_ |= 0x00000040;
          aggregateValue_ = other.aggregateValue_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        for (int i = 0; i < getNameCount(); i++) {
          if (!getName(i).isInitialized()) {
            
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.UninterpretedOption parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.UninterpretedOption) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> name_ =
        java.util.Collections.emptyList();
      private void ensureNameIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          name_ = new java.util.ArrayList<>(name_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> nameBuilder_;

      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> getNameList() {
        if (nameBuilder_ == null) {
          return java.util.Collections.unmodifiableList(name_);
        } else {
          return nameBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public int getNameCount() {
        if (nameBuilder_ == null) {
          return name_.size();
        } else {
          return nameBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index) {
        if (nameBuilder_ == null) {
          return name_.get(index);
        } else {
          return nameBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder setName(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
        if (nameBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNameIsMutable();
          name_.set(index, value);
          onChanged();
        } else {
          nameBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder setName(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          name_.set(index, builderForValue.build());
          onChanged();
        } else {
          nameBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addName(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
        if (nameBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNameIsMutable();
          name_.add(value);
          onChanged();
        } else {
          nameBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addName(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
        if (nameBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNameIsMutable();
          name_.add(index, value);
          onChanged();
        } else {
          nameBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addName(
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          name_.add(builderForValue.build());
          onChanged();
        } else {
          nameBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addName(
          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          name_.add(index, builderForValue.build());
          onChanged();
        } else {
          nameBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder addAllName(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> values) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, name_);
          onChanged();
        } else {
          nameBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder clearName() {
        if (nameBuilder_ == null) {
          name_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          nameBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public Builder removeName(int index) {
        if (nameBuilder_ == null) {
          ensureNameIsMutable();
          name_.remove(index);
          onChanged();
        } else {
          nameBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder getNameBuilder(
          int index) {
        return getNameFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
          int index) {
        if (nameBuilder_ == null) {
          return name_.get(index);  } else {
          return nameBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
           getNameOrBuilderList() {
        if (nameBuilder_ != null) {
          return nameBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(name_);
        }
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder addNameBuilder() {
        return getNameFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder addNameBuilder(
          int index) {
        return getNameFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.UninterpretedOption.NamePart name = 2;</code>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder> 
           getNameBuilderList() {
        return getNameFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
          getNameFieldBuilder() {
        if (nameBuilder_ == null) {
          nameBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  name_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          name_ = null;
        }
        return nameBuilder_;
      }

      private java.lang.Object identifierValue_ = "";
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public boolean hasIdentifierValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public java.lang.String getIdentifierValue() {
        java.lang.Object ref = identifierValue_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            identifierValue_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public com.google.protobuf.ByteString
          getIdentifierValueBytes() {
        java.lang.Object ref = identifierValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          identifierValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public Builder setIdentifierValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        identifierValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public Builder clearIdentifierValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        identifierValue_ = getDefaultInstance().getIdentifierValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string identifier_value = 3;</code>
       *
       * <pre>
       * The value of the uninterpreted option, in whatever type the tokenizer
       * identified it as during parsing. Exactly one of these should be set.
       * </pre>
       */
      public Builder setIdentifierValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        identifierValue_ = value;
        onChanged();
        return this;
      }

      private long positiveIntValue_ ;
      /**
       * <code>optional uint64 positive_int_value = 4;</code>
       */
      public boolean hasPositiveIntValue() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional uint64 positive_int_value = 4;</code>
       */
      public long getPositiveIntValue() {
        return positiveIntValue_;
      }
      /**
       * <code>optional uint64 positive_int_value = 4;</code>
       */
      public Builder setPositiveIntValue(long value) {
        bitField0_ |= 0x00000004;
        positiveIntValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 positive_int_value = 4;</code>
       */
      public Builder clearPositiveIntValue() {
        bitField0_ = (bitField0_ & ~0x00000004);
        positiveIntValue_ = 0L;
        onChanged();
        return this;
      }

      private long negativeIntValue_ ;
      /**
       * <code>optional int64 negative_int_value = 5;</code>
       */
      public boolean hasNegativeIntValue() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 negative_int_value = 5;</code>
       */
      public long getNegativeIntValue() {
        return negativeIntValue_;
      }
      /**
       * <code>optional int64 negative_int_value = 5;</code>
       */
      public Builder setNegativeIntValue(long value) {
        bitField0_ |= 0x00000008;
        negativeIntValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 negative_int_value = 5;</code>
       */
      public Builder clearNegativeIntValue() {
        bitField0_ = (bitField0_ & ~0x00000008);
        negativeIntValue_ = 0L;
        onChanged();
        return this;
      }

      private double doubleValue_ ;
      /**
       * <code>optional double double_value = 6;</code>
       */
      public boolean hasDoubleValue() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional double double_value = 6;</code>
       */
      public double getDoubleValue() {
        return doubleValue_;
      }
      /**
       * <code>optional double double_value = 6;</code>
       */
      public Builder setDoubleValue(double value) {
        bitField0_ |= 0x00000010;
        doubleValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional double double_value = 6;</code>
       */
      public Builder clearDoubleValue() {
        bitField0_ = (bitField0_ & ~0x00000010);
        doubleValue_ = 0D;
        onChanged();
        return this;
      }

      private com.google.protobuf.ByteString stringValue_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes string_value = 7;</code>
       */
      public boolean hasStringValue() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bytes string_value = 7;</code>
       */
      public com.google.protobuf.ByteString getStringValue() {
        return stringValue_;
      }
      /**
       * <code>optional bytes string_value = 7;</code>
       */
      public Builder setStringValue(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        stringValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes string_value = 7;</code>
       */
      public Builder clearStringValue() {
        bitField0_ = (bitField0_ & ~0x00000020);
        stringValue_ = getDefaultInstance().getStringValue();
        onChanged();
        return this;
      }

      private java.lang.Object aggregateValue_ = "";
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public boolean hasAggregateValue() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public java.lang.String getAggregateValue() {
        java.lang.Object ref = aggregateValue_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            aggregateValue_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public com.google.protobuf.ByteString
          getAggregateValueBytes() {
        java.lang.Object ref = aggregateValue_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          aggregateValue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public Builder setAggregateValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        aggregateValue_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public Builder clearAggregateValue() {
        bitField0_ = (bitField0_ & ~0x00000040);
        aggregateValue_ = getDefaultInstance().getAggregateValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string aggregate_value = 8;</code>
       */
      public Builder setAggregateValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        aggregateValue_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.UninterpretedOption)
    }

    static {
      defaultInstance = new UninterpretedOption(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption)
  }

  public interface SourceCodeInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:google.protobuf.SourceCodeInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> 
        getLocationList();
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index);
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    int getLocationCount();
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
        getLocationOrBuilderList();
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code google.protobuf.SourceCodeInfo}
   *
   * <pre>
   * Encapsulates information about the original source file from which a
   * FileDescriptorProto was generated.
   * </pre>
   */
  public static final class SourceCodeInfo extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:google.protobuf.SourceCodeInfo)
      SourceCodeInfoOrBuilder {
    // Use SourceCodeInfo.newBuilder() to construct.
    private SourceCodeInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SourceCodeInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SourceCodeInfo defaultInstance;
    public static SourceCodeInfo getDefaultInstance() {
      return defaultInstance;
    }

    public SourceCodeInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SourceCodeInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                location_ = new java.util.ArrayList<>();
                mutable_bitField0_ |= 0x00000001;
              }
              location_.add(input.readMessage(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          location_ = java.util.Collections.unmodifiableList(location_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.protobuf.DescriptorProtos.SourceCodeInfo.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<SourceCodeInfo> PARSER =
        new com.google.protobuf.AbstractParser<SourceCodeInfo>() {
      public SourceCodeInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SourceCodeInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SourceCodeInfo> getParserForType() {
      return PARSER;
    }

    public interface LocationOrBuilder extends
        // @@protoc_insertion_point(interface_extends:google.protobuf.SourceCodeInfo.Location)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      java.util.List<java.lang.Integer> getPathList();
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      int getPathCount();
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      int getPath(int index);

      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      java.util.List<java.lang.Integer> getSpanList();
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      int getSpanCount();
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      int getSpan(int index);

      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       * Examples:
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      boolean hasLeadingComments();
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       * Examples:
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      java.lang.String getLeadingComments();
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       * Examples:
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      com.google.protobuf.ByteString
          getLeadingCommentsBytes();

      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      boolean hasTrailingComments();
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      java.lang.String getTrailingComments();
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      com.google.protobuf.ByteString
          getTrailingCommentsBytes();
    }
    /**
     * Protobuf type {@code google.protobuf.SourceCodeInfo.Location}
     */
    public static final class Location extends
        com.google.protobuf.GeneratedMessage implements
        // @@protoc_insertion_point(message_implements:google.protobuf.SourceCodeInfo.Location)
        LocationOrBuilder {
      // Use Location.newBuilder() to construct.
      private Location(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Location(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Location defaultInstance;
      public static Location getDefaultInstance() {
        return defaultInstance;
      }

      public Location getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Location(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 8: {
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  path_ = new java.util.ArrayList<>();
                  mutable_bitField0_ |= 0x00000001;
                }
                path_.add(input.readInt32());
                break;
              }
              case 10: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
                  path_ = new java.util.ArrayList<>();
                  mutable_bitField0_ |= 0x00000001;
                }
                while (input.getBytesUntilLimit() > 0) {
                  path_.add(input.readInt32());
                }
                input.popLimit(limit);
                break;
              }
              case 16: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  span_ = new java.util.ArrayList<>();
                  mutable_bitField0_ |= 0x00000002;
                }
                span_.add(input.readInt32());
                break;
              }
              case 18: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                  span_ = new java.util.ArrayList<>();
                  mutable_bitField0_ |= 0x00000002;
                }
                while (input.getBytesUntilLimit() > 0) {
                  span_.add(input.readInt32());
                }
                input.popLimit(limit);
                break;
              }
              case 26: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                leadingComments_ = bs;
                break;
              }
              case 34: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000002;
                trailingComments_ = bs;
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
            path_ = java.util.Collections.unmodifiableList(path_);
          }
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            span_ = java.util.Collections.unmodifiableList(span_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder.class);
      }

      public static com.google.protobuf.Parser<Location> PARSER =
          new com.google.protobuf.AbstractParser<Location>() {
        public Location parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Location(input, extensionRegistry);
        }
      };

      @java.lang.Override
      public com.google.protobuf.Parser<Location> getParserForType() {
        return PARSER;
      }

      private int bitField0_;
      public static final int PATH_FIELD_NUMBER = 1;
      private java.util.List<java.lang.Integer> path_;
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getPathList() {
        return path_;
      }
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      public int getPathCount() {
        return path_.size();
      }
      /**
       * <code>repeated int32 path = 1 [packed = true];</code>
       *
       * <pre>
       * Identifies which part of the FileDescriptorProto was defined at this
       * location.
       * Each element is a field number or an index.  They form a path from
       * the root FileDescriptorProto to the place where the definition.  For
       * example, this path:
       *   [ 4, 3, 2, 7, 1 ]
       * refers to:
       *   file.message_type(3)  // 4, 3
       *       .field(7)         // 2, 7
       *       .name()           // 1
       * This is because FileDescriptorProto.message_type has field number 4:
       *   repeated DescriptorProto message_type = 4;
       * and DescriptorProto.field has field number 2:
       *   repeated FieldDescriptorProto field = 2;
       * and FieldDescriptorProto.name has field number 1:
       *   optional string name = 1;
       * Thus, the above path gives the location of a field name.  If we removed
       * the last element:
       *   [ 4, 3, 2, 7 ]
       * this path refers to the whole field declaration (from the beginning
       * of the label to the terminating semicolon).
       * </pre>
       */
      public int getPath(int index) {
        return path_.get(index);
      }
      private int pathMemoizedSerializedSize = -1;

      public static final int SPAN_FIELD_NUMBER = 2;
      private java.util.List<java.lang.Integer> span_;
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      public java.util.List<java.lang.Integer>
          getSpanList() {
        return span_;
      }
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      public int getSpanCount() {
        return span_.size();
      }
      /**
       * <code>repeated int32 span = 2 [packed = true];</code>
       *
       * <pre>
       * Always has exactly three or four elements: start line, start column,
       * end line (optional, otherwise assumed same as start line), end column.
       * These are packed into a single field for efficiency.  Note that line
       * and column numbers are zero-based -- typically you will want to add
       * 1 to each before displaying to a user.
       * </pre>
       */
      public int getSpan(int index) {
        return span_.get(index);
      }
      private int spanMemoizedSerializedSize = -1;

      public static final int LEADING_COMMENTS_FIELD_NUMBER = 3;
      private java.lang.Object leadingComments_;
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       * Examples:
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      public boolean hasLeadingComments() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       * Examples:
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      public java.lang.String getLeadingComments() {
        java.lang.Object ref = leadingComments_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            leadingComments_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string leading_comments = 3;</code>
       *
       * <pre>
       * If this SourceCodeInfo represents a complete declaration, these are any
       * comments appearing before and after the declaration which appear to be
       * attached to the declaration.
       * A series of line comments appearing on consecutive lines, with no other
       * tokens appearing on those lines, will be treated as a single comment.
       * Only the comment content is provided; comment markers (e.g. //) are
       * stripped out.  For block comments, leading whitespace and an asterisk
       * will be stripped from the beginning of each line other than the first.
       * Newlines are included in the output.
       * Examples:
       *   optional int32 foo = 1;  // Comment attached to foo.
       *   // Comment attached to bar.
       *   optional int32 bar = 2;
       *   optional string baz = 3;
       *   // Comment attached to baz.
       *   // Another line attached to baz.
       *   // Comment attached to qux.
       *   //
       *   // Another line attached to qux.
       *   optional double qux = 4;
       *   optional string corge = 5;
       *   /&#42; Block comment attached
       *    * to corge.  Leading asterisks
       *    * will be removed. *&#47;
       *   /&#42; Block comment attached to
       *    * grault. *&#47;
       *   optional int32 grault = 6;
       * </pre>
       */
      public com.google.protobuf.ByteString
          getLeadingCommentsBytes() {
        java.lang.Object ref = leadingComments_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          leadingComments_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int TRAILING_COMMENTS_FIELD_NUMBER = 4;
      private java.lang.Object trailingComments_;
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      public boolean hasTrailingComments() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      public java.lang.String getTrailingComments() {
        java.lang.Object ref = trailingComments_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            trailingComments_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string trailing_comments = 4;</code>
       */
      public com.google.protobuf.ByteString
          getTrailingCommentsBytes() {
        java.lang.Object ref = trailingComments_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          trailingComments_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private void initFields() {
        path_ = java.util.Collections.emptyList();
        span_ = java.util.Collections.emptyList();
        leadingComments_ = "";
        trailingComments_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (getPathList().size() > 0) {
          output.writeRawVarint32(10);
          output.writeRawVarint32(pathMemoizedSerializedSize);
        }
        for (int i = 0; i < path_.size(); i++) {
          output.writeInt32NoTag(path_.get(i));
        }
        if (getSpanList().size() > 0) {
          output.writeRawVarint32(18);
          output.writeRawVarint32(spanMemoizedSerializedSize);
        }
        for (int i = 0; i < span_.size(); i++) {
          output.writeInt32NoTag(span_.get(i));
        }
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(3, getLeadingCommentsBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(4, getTrailingCommentsBytes());
        }
        getUnknownFields().writeTo(output);
      }

      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;

        size = 0;
        {
          int dataSize = 0;
          for (int i = 0; i < path_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(path_.get(i));
          }
          size += dataSize;
          if (!getPathList().isEmpty()) {
            size += 1;
            size += com.google.protobuf.CodedOutputStream
                .computeInt32SizeNoTag(dataSize);
          }
          pathMemoizedSerializedSize = dataSize;
        }
        {
          int dataSize = 0;
          for (int i = 0; i < span_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(span_.get(i));
          }
          size += dataSize;
          if (!getSpanList().isEmpty()) {
            size += 1;
            size += com.google.protobuf.CodedOutputStream
                .computeInt32SizeNoTag(dataSize);
          }
          spanMemoizedSerializedSize = dataSize;
        }
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getLeadingCommentsBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(4, getTrailingCommentsBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code google.protobuf.SourceCodeInfo.Location}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:google.protobuf.SourceCodeInfo.Location)
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder.class);
        }

        // Construct using com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          path_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          span_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          leadingComments_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          trailingComments_ = "";
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
        }

        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getDefaultInstanceForType() {
          return com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance();
        }

        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location build() {
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location buildPartial() {
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = new com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            path_ = java.util.Collections.unmodifiableList(path_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.path_ = path_;
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            span_ = java.util.Collections.unmodifiableList(span_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.span_ = span_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000001;
          }
          result.leadingComments_ = leadingComments_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000002;
          }
          result.trailingComments_ = trailingComments_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location) {
            return mergeFrom((com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location other) {
          if (other == com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance()) return this;
          if (!other.path_.isEmpty()) {
            if (path_.isEmpty()) {
              path_ = other.path_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensurePathIsMutable();
              path_.addAll(other.path_);
            }
            onChanged();
          }
          if (!other.span_.isEmpty()) {
            if (span_.isEmpty()) {
              span_ = other.span_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureSpanIsMutable();
              span_.addAll(other.span_);
            }
            onChanged();
          }
          if (other.hasLeadingComments()) {
            bitField0_ |= 0x00000004;
            leadingComments_ = other.leadingComments_;
            onChanged();
          }
          if (other.hasTrailingComments()) {
            bitField0_ |= 0x00000008;
            trailingComments_ = other.trailingComments_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.util.List<java.lang.Integer> path_ = java.util.Collections.emptyList();
        private void ensurePathIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            path_ = new java.util.ArrayList<>(path_);
            bitField0_ |= 0x00000001;
           }
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public java.util.List<java.lang.Integer>
            getPathList() {
          return java.util.Collections.unmodifiableList(path_);
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public int getPathCount() {
          return path_.size();
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public int getPath(int index) {
          return path_.get(index);
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public Builder setPath(
            int index, int value) {
          ensurePathIsMutable();
          path_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public Builder addPath(int value) {
          ensurePathIsMutable();
          path_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public Builder addAllPath(
            java.lang.Iterable<? extends java.lang.Integer> values) {
          ensurePathIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, path_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 path = 1 [packed = true];</code>
         *
         * <pre>
         * Identifies which part of the FileDescriptorProto was defined at this
         * location.
         * Each element is a field number or an index.  They form a path from
         * the root FileDescriptorProto to the place where the definition.  For
         * example, this path:
         *   [ 4, 3, 2, 7, 1 ]
         * refers to:
         *   file.message_type(3)  // 4, 3
         *       .field(7)         // 2, 7
         *       .name()           // 1
         * This is because FileDescriptorProto.message_type has field number 4:
         *   repeated DescriptorProto message_type = 4;
         * and DescriptorProto.field has field number 2:
         *   repeated FieldDescriptorProto field = 2;
         * and FieldDescriptorProto.name has field number 1:
         *   optional string name = 1;
         * Thus, the above path gives the location of a field name.  If we removed
         * the last element:
         *   [ 4, 3, 2, 7 ]
         * this path refers to the whole field declaration (from the beginning
         * of the label to the terminating semicolon).
         * </pre>
         */
        public Builder clearPath() {
          path_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }

        private java.util.List<java.lang.Integer> span_ = java.util.Collections.emptyList();
        private void ensureSpanIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            span_ = new java.util.ArrayList<>(span_);
            bitField0_ |= 0x00000002;
           }
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public java.util.List<java.lang.Integer>
            getSpanList() {
          return java.util.Collections.unmodifiableList(span_);
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public int getSpanCount() {
          return span_.size();
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public int getSpan(int index) {
          return span_.get(index);
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public Builder setSpan(
            int index, int value) {
          ensureSpanIsMutable();
          span_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public Builder addSpan(int value) {
          ensureSpanIsMutable();
          span_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public Builder addAllSpan(
            java.lang.Iterable<? extends java.lang.Integer> values) {
          ensureSpanIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, span_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 span = 2 [packed = true];</code>
         *
         * <pre>
         * Always has exactly three or four elements: start line, start column,
         * end line (optional, otherwise assumed same as start line), end column.
         * These are packed into a single field for efficiency.  Note that line
         * and column numbers are zero-based -- typically you will want to add
         * 1 to each before displaying to a user.
         * </pre>
         */
        public Builder clearSpan() {
          span_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
          return this;
        }

        private java.lang.Object leadingComments_ = "";
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         * Examples:
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public boolean hasLeadingComments() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         * Examples:
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public java.lang.String getLeadingComments() {
          java.lang.Object ref = leadingComments_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              leadingComments_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         * Examples:
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public com.google.protobuf.ByteString
            getLeadingCommentsBytes() {
          java.lang.Object ref = leadingComments_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            leadingComments_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         * Examples:
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public Builder setLeadingComments(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          leadingComments_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         * Examples:
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public Builder clearLeadingComments() {
          bitField0_ = (bitField0_ & ~0x00000004);
          leadingComments_ = getDefaultInstance().getLeadingComments();
          onChanged();
          return this;
        }
        /**
         * <code>optional string leading_comments = 3;</code>
         *
         * <pre>
         * If this SourceCodeInfo represents a complete declaration, these are any
         * comments appearing before and after the declaration which appear to be
         * attached to the declaration.
         * A series of line comments appearing on consecutive lines, with no other
         * tokens appearing on those lines, will be treated as a single comment.
         * Only the comment content is provided; comment markers (e.g. //) are
         * stripped out.  For block comments, leading whitespace and an asterisk
         * will be stripped from the beginning of each line other than the first.
         * Newlines are included in the output.
         * Examples:
         *   optional int32 foo = 1;  // Comment attached to foo.
         *   // Comment attached to bar.
         *   optional int32 bar = 2;
         *   optional string baz = 3;
         *   // Comment attached to baz.
         *   // Another line attached to baz.
         *   // Comment attached to qux.
         *   //
         *   // Another line attached to qux.
         *   optional double qux = 4;
         *   optional string corge = 5;
         *   /&#42; Block comment attached
         *    * to corge.  Leading asterisks
         *    * will be removed. *&#47;
         *   /&#42; Block comment attached to
         *    * grault. *&#47;
         *   optional int32 grault = 6;
         * </pre>
         */
        public Builder setLeadingCommentsBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          leadingComments_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object trailingComments_ = "";
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public boolean hasTrailingComments() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public java.lang.String getTrailingComments() {
          java.lang.Object ref = trailingComments_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              trailingComments_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public com.google.protobuf.ByteString
            getTrailingCommentsBytes() {
          java.lang.Object ref = trailingComments_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            trailingComments_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public Builder setTrailingComments(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
          trailingComments_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public Builder clearTrailingComments() {
          bitField0_ = (bitField0_ & ~0x00000008);
          trailingComments_ = getDefaultInstance().getTrailingComments();
          onChanged();
          return this;
        }
        /**
         * <code>optional string trailing_comments = 4;</code>
         */
        public Builder setTrailingCommentsBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
          trailingComments_ = value;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:google.protobuf.SourceCodeInfo.Location)
      }

      static {
        defaultInstance = new Location(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo.Location)
    }

    public static final int LOCATION_FIELD_NUMBER = 1;
    private java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> location_;
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> getLocationList() {
      return location_;
    }
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
        getLocationOrBuilderList() {
      return location_;
    }
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public int getLocationCount() {
      return location_.size();
    }
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index) {
      return location_.get(index);
    }
    /**
     * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
     *
     * <pre>
     * A Location identifies a piece of source code in a .proto file which
     * corresponds to a particular definition.  This information is intended
     * to be useful to IDEs, code indexers, documentation generators, and similar
     * tools.
     * For example, say we have a file like:
     *   message Foo {
     *     optional string foo = 1;
     *   }
     * Let's look at just the field definition:
     *   optional string foo = 1;
     *   ^       ^^     ^^  ^  ^^^
     *   a       bc     de  f  ghi
     * We have the following locations:
     *   span   path               represents
     *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
     *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
     *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
     *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
     *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
     * Notes:
     * - A location may refer to a repeated field itself (i.e. not to any
     *   particular index within it).  This is used whenever a set of elements are
     *   logically enclosed in a single code segment.  For example, an entire
     *   extend block (possibly containing multiple extension definitions) will
     *   have an outer location whose path refers to the "extensions" repeated
     *   field without an index.
     * - Multiple locations may have the same path.  This happens when a single
     *   logical declaration is spread out across multiple places.  The most
     *   obvious example is the "extend" block again -- there may be multiple
     *   extend blocks in the same scope, each of which will have the same path.
     * - A location's span is not always a subset of its parent's span.  For
     *   example, the "extendee" of an extension declaration appears at the
     *   beginning of the "extend" block and is shared by all extensions within
     *   the block.
     * - Just because a location's span is a subset of some other location's span
     *   does not mean that it is a descendent.  For example, a "group" defines
     *   both a type and a field in a single declaration.  Thus, the locations
     *   corresponding to the type and field and their components will overlap.
     * - Code which tries to interpret locations should probably be designed to
     *   ignore those that it doesn't understand, as more types of locations could
     *   be recorded in the future.
     * </pre>
     */
    public com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
        int index) {
      return location_.get(index);
    }

    private void initFields() {
      location_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < location_.size(); i++) {
        output.writeMessage(1, location_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < location_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, location_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.SourceCodeInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code google.protobuf.SourceCodeInfo}
     *
     * <pre>
     * Encapsulates information about the original source file from which a
     * FileDescriptorProto was generated.
     * </pre>
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:google.protobuf.SourceCodeInfo)
        com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.protobuf.DescriptorProtos.SourceCodeInfo.class, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder.class);
      }

      // Construct using com.google.protobuf.DescriptorProtos.SourceCodeInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getLocationFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (locationBuilder_ == null) {
          location_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          locationBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
      }

      public com.google.protobuf.DescriptorProtos.SourceCodeInfo getDefaultInstanceForType() {
        return com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
      }

      public com.google.protobuf.DescriptorProtos.SourceCodeInfo build() {
        com.google.protobuf.DescriptorProtos.SourceCodeInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.protobuf.DescriptorProtos.SourceCodeInfo buildPartial() {
        com.google.protobuf.DescriptorProtos.SourceCodeInfo result = new com.google.protobuf.DescriptorProtos.SourceCodeInfo(this);
        int from_bitField0_ = bitField0_;
        if (locationBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            location_ = java.util.Collections.unmodifiableList(location_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.location_ = location_;
        } else {
          result.location_ = locationBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.protobuf.DescriptorProtos.SourceCodeInfo) {
          return mergeFrom((com.google.protobuf.DescriptorProtos.SourceCodeInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.SourceCodeInfo other) {
        if (other == com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance()) return this;
        if (locationBuilder_ == null) {
          if (!other.location_.isEmpty()) {
            if (location_.isEmpty()) {
              location_ = other.location_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureLocationIsMutable();
              location_.addAll(other.location_);
            }
            onChanged();
          }
        } else {
          if (!other.location_.isEmpty()) {
            if (locationBuilder_.isEmpty()) {
              locationBuilder_.dispose();
              locationBuilder_ = null;
              location_ = other.location_;
              bitField0_ = (bitField0_ & ~0x00000001);
              locationBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getLocationFieldBuilder() : null;
            } else {
              locationBuilder_.addAllMessages(other.location_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.DescriptorProtos.SourceCodeInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.protobuf.DescriptorProtos.SourceCodeInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> location_ =
        java.util.Collections.emptyList();
      private void ensureLocationIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          location_ = new java.util.ArrayList<>(location_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> locationBuilder_;

      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> getLocationList() {
        if (locationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(location_);
        } else {
          return locationBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public int getLocationCount() {
        if (locationBuilder_ == null) {
          return location_.size();
        } else {
          return locationBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index) {
        if (locationBuilder_ == null) {
          return location_.get(index);
        } else {
          return locationBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder setLocation(
          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
        if (locationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLocationIsMutable();
          location_.set(index, value);
          onChanged();
        } else {
          locationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder setLocation(
          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          location_.set(index, builderForValue.build());
          onChanged();
        } else {
          locationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addLocation(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
        if (locationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLocationIsMutable();
          location_.add(value);
          onChanged();
        } else {
          locationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addLocation(
          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
        if (locationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLocationIsMutable();
          location_.add(index, value);
          onChanged();
        } else {
          locationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addLocation(
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          location_.add(builderForValue.build());
          onChanged();
        } else {
          locationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addLocation(
          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          location_.add(index, builderForValue.build());
          onChanged();
        } else {
          locationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder addAllLocation(
          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> values) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, location_);
          onChanged();
        } else {
          locationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder clearLocation() {
        if (locationBuilder_ == null) {
          location_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          locationBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public Builder removeLocation(int index) {
        if (locationBuilder_ == null) {
          ensureLocationIsMutable();
          location_.remove(index);
          onChanged();
        } else {
          locationBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder getLocationBuilder(
          int index) {
        return getLocationFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
          int index) {
        if (locationBuilder_ == null) {
          return location_.get(index);  } else {
          return locationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
           getLocationOrBuilderList() {
        if (locationBuilder_ != null) {
          return locationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(location_);
        }
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder addLocationBuilder() {
        return getLocationFieldBuilder().addBuilder(
            com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder addLocationBuilder(
          int index) {
        return getLocationFieldBuilder().addBuilder(
            index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance());
      }
      /**
       * <code>repeated .google.protobuf.SourceCodeInfo.Location location = 1;</code>
       *
       * <pre>
       * A Location identifies a piece of source code in a .proto file which
       * corresponds to a particular definition.  This information is intended
       * to be useful to IDEs, code indexers, documentation generators, and similar
       * tools.
       * For example, say we have a file like:
       *   message Foo {
       *     optional string foo = 1;
       *   }
       * Let's look at just the field definition:
       *   optional string foo = 1;
       *   ^       ^^     ^^  ^  ^^^
       *   a       bc     de  f  ghi
       * We have the following locations:
       *   span   path               represents
       *   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
       *   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
       *   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
       *   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
       *   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
       * Notes:
       * - A location may refer to a repeated field itself (i.e. not to any
       *   particular index within it).  This is used whenever a set of elements are
       *   logically enclosed in a single code segment.  For example, an entire
       *   extend block (possibly containing multiple extension definitions) will
       *   have an outer location whose path refers to the "extensions" repeated
       *   field without an index.
       * - Multiple locations may have the same path.  This happens when a single
       *   logical declaration is spread out across multiple places.  The most
       *   obvious example is the "extend" block again -- there may be multiple
       *   extend blocks in the same scope, each of which will have the same path.
       * - A location's span is not always a subset of its parent's span.  For
       *   example, the "extendee" of an extension declaration appears at the
       *   beginning of the "extend" block and is shared by all extensions within
       *   the block.
       * - Just because a location's span is a subset of some other location's span
       *   does not mean that it is a descendent.  For example, a "group" defines
       *   both a type and a field in a single declaration.  Thus, the locations
       *   corresponding to the type and field and their components will overlap.
       * - Code which tries to interpret locations should probably be designed to
       *   ignore those that it doesn't understand, as more types of locations could
       *   be recorded in the future.
       * </pre>
       */
      public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder> 
           getLocationBuilderList() {
        return getLocationFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
          getLocationFieldBuilder() {
        if (locationBuilder_ == null) {
          locationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<>(
                  location_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          location_ = null;
        }
        return locationBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:google.protobuf.SourceCodeInfo)
    }

    static {
      defaultInstance = new SourceCodeInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo)
  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FileDescriptorSet_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FileDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_DescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_DescriptorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FieldDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_OneofDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_OneofDescriptorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_EnumDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_MethodDescriptorProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FileOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FileOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_MessageOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_MessageOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_FieldOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_FieldOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_EnumOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_EnumOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_EnumValueOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_ServiceOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_ServiceOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_MethodOptions_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_MethodOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_UninterpretedOption_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_SourceCodeInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\020descriptor.proto\022\017google.protobuf\"G\n\021F" +
      "ileDescriptorSet\0222\n\004file\030\001 \003(\0132$.google." +
      "protobuf.FileDescriptorProto\"\313\003\n\023FileDes" +
      "criptorProto\022\014\n\004name\030\001 \001(\t\022\017\n\007package\030\002 " +
      "\001(\t\022\022\n\ndependency\030\003 \003(\t\022\031\n\021public_depend" +
      "ency\030\n \003(\005\022\027\n\017weak_dependency\030\013 \003(\005\0226\n\014m" +
      "essage_type\030\004 \003(\0132 .google.protobuf.Desc" +
      "riptorProto\0227\n\tenum_type\030\005 \003(\0132$.google." +
      "protobuf.EnumDescriptorProto\0228\n\007service\030" +
      "\006 \003(\0132\'.google.protobuf.ServiceDescripto",
      "rProto\0228\n\textension\030\007 \003(\0132%.google.proto" +
      "buf.FieldDescriptorProto\022-\n\007options\030\010 \001(" +
      "\0132\034.google.protobuf.FileOptions\0229\n\020sourc" +
      "e_code_info\030\t \001(\0132\037.google.protobuf.Sour" +
      "ceCodeInfo\"\344\003\n\017DescriptorProto\022\014\n\004name\030\001" +
      " \001(\t\0224\n\005field\030\002 \003(\0132%.google.protobuf.Fi" +
      "eldDescriptorProto\0228\n\textension\030\006 \003(\0132%." +
      "google.protobuf.FieldDescriptorProto\0225\n\013" +
      "nested_type\030\003 \003(\0132 .google.protobuf.Desc" +
      "riptorProto\0227\n\tenum_type\030\004 \003(\0132$.google.",
      "protobuf.EnumDescriptorProto\022H\n\017extensio" +
      "n_range\030\005 \003(\0132/.google.protobuf.Descript" +
      "orProto.ExtensionRange\0229\n\noneof_decl\030\010 \003" +
      "(\0132%.google.protobuf.OneofDescriptorProt" +
      "o\0220\n\007options\030\007 \001(\0132\037.google.protobuf.Mes" +
      "sageOptions\032,\n\016ExtensionRange\022\r\n\005start\030\001" +
      " \001(\005\022\013\n\003end\030\002 \001(\005\"\251\005\n\024FieldDescriptorPro" +
      "to\022\014\n\004name\030\001 \001(\t\022\016\n\006number\030\003 \001(\005\022:\n\005labe" +
      "l\030\004 \001(\0162+.google.protobuf.FieldDescripto" +
      "rProto.Label\0228\n\004type\030\005 \001(\0162*.google.prot",
      "obuf.FieldDescriptorProto.Type\022\021\n\ttype_n" +
      "ame\030\006 \001(\t\022\020\n\010extendee\030\002 \001(\t\022\025\n\rdefault_v" +
      "alue\030\007 \001(\t\022\023\n\013oneof_index\030\t \001(\005\022.\n\007optio" +
      "ns\030\010 \001(\0132\035.google.protobuf.FieldOptions\"" +
      "\266\002\n\004Type\022\017\n\013TYPE_DOUBLE\020\001\022\016\n\nTYPE_FLOAT\020" +
      "\002\022\016\n\nTYPE_INT64\020\003\022\017\n\013TYPE_UINT64\020\004\022\016\n\nTY" +
      "PE_INT32\020\005\022\020\n\014TYPE_FIXED64\020\006\022\020\n\014TYPE_FIX" +
      "ED32\020\007\022\r\n\tTYPE_BOOL\020\010\022\017\n\013TYPE_STRING\020\t\022\016" +
      "\n\nTYPE_GROUP\020\n\022\020\n\014TYPE_MESSAGE\020\013\022\016\n\nTYPE" +
      "_BYTES\020\014\022\017\n\013TYPE_UINT32\020\r\022\r\n\tTYPE_ENUM\020\016",
      "\022\021\n\rTYPE_SFIXED32\020\017\022\021\n\rTYPE_SFIXED64\020\020\022\017" +
      "\n\013TYPE_SINT32\020\021\022\017\n\013TYPE_SINT64\020\022\"C\n\005Labe" +
      "l\022\022\n\016LABEL_OPTIONAL\020\001\022\022\n\016LABEL_REQUIRED\020" +
      "\002\022\022\n\016LABEL_REPEATED\020\003\"$\n\024OneofDescriptor" +
      "Proto\022\014\n\004name\030\001 \001(\t\"\214\001\n\023EnumDescriptorPr" +
      "oto\022\014\n\004name\030\001 \001(\t\0228\n\005value\030\002 \003(\0132).googl" +
      "e.protobuf.EnumValueDescriptorProto\022-\n\007o" +
      "ptions\030\003 \001(\0132\034.google.protobuf.EnumOptio" +
      "ns\"l\n\030EnumValueDescriptorProto\022\014\n\004name\030\001" +
      " \001(\t\022\016\n\006number\030\002 \001(\005\0222\n\007options\030\003 \001(\0132!.",
      "google.protobuf.EnumValueOptions\"\220\001\n\026Ser" +
      "viceDescriptorProto\022\014\n\004name\030\001 \001(\t\0226\n\006met" +
      "hod\030\002 \003(\0132&.google.protobuf.MethodDescri" +
      "ptorProto\0220\n\007options\030\003 \001(\0132\037.google.prot" +
      "obuf.ServiceOptions\"\177\n\025MethodDescriptorP" +
      "roto\022\014\n\004name\030\001 \001(\t\022\022\n\ninput_type\030\002 \001(\t\022\023" +
      "\n\013output_type\030\003 \001(\t\022/\n\007options\030\004 \001(\0132\036.g" +
      "oogle.protobuf.MethodOptions\"\253\004\n\013FileOpt" +
      "ions\022\024\n\014java_package\030\001 \001(\t\022\034\n\024java_outer" +
      "_classname\030\010 \001(\t\022\"\n\023java_multiple_files\030",
      "\n \001(\010:\005false\022,\n\035java_generate_equals_and" +
      "_hash\030\024 \001(\010:\005false\022%\n\026java_string_check_" +
      "utf8\030\033 \001(\010:\005false\022F\n\014optimize_for\030\t \001(\0162" +
      ").google.protobuf.FileOptions.OptimizeMo" +
      "de:\005SPEED\022\022\n\ngo_package\030\013 \001(\t\022\"\n\023cc_gene" +
      "ric_services\030\020 \001(\010:\005false\022$\n\025java_generi" +
      "c_services\030\021 \001(\010:\005false\022\"\n\023py_generic_se" +
      "rvices\030\022 \001(\010:\005false\022\031\n\ndeprecated\030\027 \001(\010:" +
      "\005false\022C\n\024uninterpreted_option\030\347\007 \003(\0132$." +
      "google.protobuf.UninterpretedOption\":\n\014O",
      "ptimizeMode\022\t\n\005SPEED\020\001\022\r\n\tCODE_SIZE\020\002\022\020\n" +
      "\014LITE_RUNTIME\020\003*\t\010\350\007\020\200\200\200\200\002\"\323\001\n\016MessageOp" +
      "tions\022&\n\027message_set_wire_format\030\001 \001(\010:\005" +
      "false\022.\n\037no_standard_descriptor_accessor" +
      "\030\002 \001(\010:\005false\022\031\n\ndeprecated\030\003 \001(\010:\005false" +
      "\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.google" +
      ".protobuf.UninterpretedOption*\t\010\350\007\020\200\200\200\200\002" +
      "\"\276\002\n\014FieldOptions\022:\n\005ctype\030\001 \001(\0162#.googl" +
      "e.protobuf.FieldOptions.CType:\006STRING\022\016\n" +
      "\006packed\030\002 \001(\010\022\023\n\004lazy\030\005 \001(\010:\005false\022\031\n\nde",
      "precated\030\003 \001(\010:\005false\022\034\n\024experimental_ma" +
      "p_key\030\t \001(\t\022\023\n\004weak\030\n \001(\010:\005false\022C\n\024unin" +
      "terpreted_option\030\347\007 \003(\0132$.google.protobu" +
      "f.UninterpretedOption\"/\n\005CType\022\n\n\006STRING" +
      "\020\000\022\010\n\004CORD\020\001\022\020\n\014STRING_PIECE\020\002*\t\010\350\007\020\200\200\200\200" +
      "\002\"\215\001\n\013EnumOptions\022\023\n\013allow_alias\030\002 \001(\010\022\031" +
      "\n\ndeprecated\030\003 \001(\010:\005false\022C\n\024uninterpret" +
      "ed_option\030\347\007 \003(\0132$.google.protobuf.Unint" +
      "erpretedOption*\t\010\350\007\020\200\200\200\200\002\"}\n\020EnumValueOp" +
      "tions\022\031\n\ndeprecated\030\001 \001(\010:\005false\022C\n\024unin",
      "terpreted_option\030\347\007 \003(\0132$.google.protobu" +
      "f.UninterpretedOption*\t\010\350\007\020\200\200\200\200\002\"{\n\016Serv" +
      "iceOptions\022\031\n\ndeprecated\030! \001(\010:\005false\022C\n" +
      "\024uninterpreted_option\030\347\007 \003(\0132$.google.pr" +
      "otobuf.UninterpretedOption*\t\010\350\007\020\200\200\200\200\002\"z\n" +
      "\rMethodOptions\022\031\n\ndeprecated\030! \001(\010:\005fals" +
      "e\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.googl" +
      "e.protobuf.UninterpretedOption*\t\010\350\007\020\200\200\200\200" +
      "\002\"\236\002\n\023UninterpretedOption\022;\n\004name\030\002 \003(\0132" +
      "-.google.protobuf.UninterpretedOption.Na",
      "mePart\022\030\n\020identifier_value\030\003 \001(\t\022\032\n\022posi" +
      "tive_int_value\030\004 \001(\004\022\032\n\022negative_int_val" +
      "ue\030\005 \001(\003\022\024\n\014double_value\030\006 \001(\001\022\024\n\014string" +
      "_value\030\007 \001(\014\022\027\n\017aggregate_value\030\010 \001(\t\0323\n" +
      "\010NamePart\022\021\n\tname_part\030\001 \002(\t\022\024\n\014is_exten" +
      "sion\030\002 \002(\010\"\261\001\n\016SourceCodeInfo\022:\n\010locatio" +
      "n\030\001 \003(\0132(.google.protobuf.SourceCodeInfo" +
      ".Location\032c\n\010Location\022\020\n\004path\030\001 \003(\005B\002\020\001\022" +
      "\020\n\004span\030\002 \003(\005B\002\020\001\022\030\n\020leading_comments\030\003 " +
      "\001(\t\022\031\n\021trailing_comments\030\004 \001(\tB)\n\023com.go",
      "ogle.protobufB\020DescriptorProtosH\001"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
    internal_static_google_protobuf_FileDescriptorSet_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_FileDescriptorSet_descriptor,
        new java.lang.String[] { "File", });
    internal_static_google_protobuf_FileDescriptorProto_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_FileDescriptorProto_descriptor,
        new java.lang.String[] { "Name", "Package", "Dependency", "PublicDependency", "WeakDependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", });
    internal_static_google_protobuf_DescriptorProto_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_google_protobuf_DescriptorProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_DescriptorProto_descriptor,
        new java.lang.String[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "OneofDecl", "Options", });
    internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor =
      internal_static_google_protobuf_DescriptorProto_descriptor.getNestedTypes().get(0);
    internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor,
        new java.lang.String[] { "Start", "End", });
    internal_static_google_protobuf_FieldDescriptorProto_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_FieldDescriptorProto_descriptor,
        new java.lang.String[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "OneofIndex", "Options", });
    internal_static_google_protobuf_OneofDescriptorProto_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_google_protobuf_OneofDescriptorProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_OneofDescriptorProto_descriptor,
        new java.lang.String[] { "Name", });
    internal_static_google_protobuf_EnumDescriptorProto_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_EnumDescriptorProto_descriptor,
        new java.lang.String[] { "Name", "Value", "Options", });
    internal_static_google_protobuf_EnumValueDescriptorProto_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_EnumValueDescriptorProto_descriptor,
        new java.lang.String[] { "Name", "Number", "Options", });
    internal_static_google_protobuf_ServiceDescriptorProto_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_ServiceDescriptorProto_descriptor,
        new java.lang.String[] { "Name", "Method", "Options", });
    internal_static_google_protobuf_MethodDescriptorProto_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_MethodDescriptorProto_descriptor,
        new java.lang.String[] { "Name", "InputType", "OutputType", "Options", });
    internal_static_google_protobuf_FileOptions_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_google_protobuf_FileOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_FileOptions_descriptor,
        new java.lang.String[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "JavaStringCheckUtf8", "OptimizeFor", "GoPackage", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "Deprecated", "UninterpretedOption", });
    internal_static_google_protobuf_MessageOptions_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_google_protobuf_MessageOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_MessageOptions_descriptor,
        new java.lang.String[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "Deprecated", "UninterpretedOption", });
    internal_static_google_protobuf_FieldOptions_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_google_protobuf_FieldOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_FieldOptions_descriptor,
        new java.lang.String[] { "Ctype", "Packed", "Lazy", "Deprecated", "ExperimentalMapKey", "Weak", "UninterpretedOption", });
    internal_static_google_protobuf_EnumOptions_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_google_protobuf_EnumOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_EnumOptions_descriptor,
        new java.lang.String[] { "AllowAlias", "Deprecated", "UninterpretedOption", });
    internal_static_google_protobuf_EnumValueOptions_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_EnumValueOptions_descriptor,
        new java.lang.String[] { "Deprecated", "UninterpretedOption", });
    internal_static_google_protobuf_ServiceOptions_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_google_protobuf_ServiceOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_ServiceOptions_descriptor,
        new java.lang.String[] { "Deprecated", "UninterpretedOption", });
    internal_static_google_protobuf_MethodOptions_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_google_protobuf_MethodOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_MethodOptions_descriptor,
        new java.lang.String[] { "Deprecated", "UninterpretedOption", });
    internal_static_google_protobuf_UninterpretedOption_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_UninterpretedOption_descriptor,
        new java.lang.String[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", });
    internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor =
      internal_static_google_protobuf_UninterpretedOption_descriptor.getNestedTypes().get(0);
    internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor,
        new java.lang.String[] { "NamePart", "IsExtension", });
    internal_static_google_protobuf_SourceCodeInfo_descriptor =
      getDescriptor().getMessageTypes().get(17);
    internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_SourceCodeInfo_descriptor,
        new java.lang.String[] { "Location", });
    internal_static_google_protobuf_SourceCodeInfo_Location_descriptor =
      internal_static_google_protobuf_SourceCodeInfo_descriptor.getNestedTypes().get(0);
    internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessage.FieldAccessorTable(
        internal_static_google_protobuf_SourceCodeInfo_Location_descriptor,
        new java.lang.String[] { "Path", "Span", "LeadingComments", "TrailingComments", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
