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

package edu.delaware.nlp;

public final class DocumentProto {
  private DocumentProto() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface TokenOrBuilder extends
      // @@protoc_insertion_point(interface_extends:udelnlp.Token)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int32 index = 1;</code>
     */
    int getIndex();

    /**
     * <code>string word = 2;</code>
     */
    java.lang.String getWord();
    /**
     * <code>string word = 2;</code>
     */
    com.google.protobuf.ByteString
        getWordBytes();

    /**
     * <code>string lemma = 3;</code>
     */
    java.lang.String getLemma();
    /**
     * <code>string lemma = 3;</code>
     */
    com.google.protobuf.ByteString
        getLemmaBytes();

    /**
     * <code>string pos = 4;</code>
     */
    java.lang.String getPos();
    /**
     * <code>string pos = 4;</code>
     */
    com.google.protobuf.ByteString
        getPosBytes();

    /**
     * <code>int32 char_start = 5;</code>
     */
    int getCharStart();

    /**
     * <code>int32 char_end = 6;</code>
     */
    int getCharEnd();
  }
  /**
   * Protobuf type {@code udelnlp.Token}
   */
  public  static final class Token extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:udelnlp.Token)
      TokenOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Token.newBuilder() to construct.
    private Token(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Token() {
      word_ = "";
      lemma_ = "";
      pos_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Token(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              index_ = input.readInt32();
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              word_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();

              lemma_ = s;
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              pos_ = s;
              break;
            }
            case 40: {

              charStart_ = input.readInt32();
              break;
            }
            case 48: {

              charEnd_ = input.readInt32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Token_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Token_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              edu.delaware.nlp.DocumentProto.Token.class, edu.delaware.nlp.DocumentProto.Token.Builder.class);
    }

    public static final int INDEX_FIELD_NUMBER = 1;
    private int index_;
    /**
     * <code>int32 index = 1;</code>
     */
    public int getIndex() {
      return index_;
    }

    public static final int WORD_FIELD_NUMBER = 2;
    private volatile java.lang.Object word_;
    /**
     * <code>string word = 2;</code>
     */
    public java.lang.String getWord() {
      java.lang.Object ref = word_;
      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();
        word_ = s;
        return s;
      }
    }
    /**
     * <code>string word = 2;</code>
     */
    public com.google.protobuf.ByteString
        getWordBytes() {
      java.lang.Object ref = word_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        word_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LEMMA_FIELD_NUMBER = 3;
    private volatile java.lang.Object lemma_;
    /**
     * <code>string lemma = 3;</code>
     */
    public java.lang.String getLemma() {
      java.lang.Object ref = lemma_;
      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();
        lemma_ = s;
        return s;
      }
    }
    /**
     * <code>string lemma = 3;</code>
     */
    public com.google.protobuf.ByteString
        getLemmaBytes() {
      java.lang.Object ref = lemma_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        lemma_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int POS_FIELD_NUMBER = 4;
    private volatile java.lang.Object pos_;
    /**
     * <code>string pos = 4;</code>
     */
    public java.lang.String getPos() {
      java.lang.Object ref = pos_;
      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();
        pos_ = s;
        return s;
      }
    }
    /**
     * <code>string pos = 4;</code>
     */
    public com.google.protobuf.ByteString
        getPosBytes() {
      java.lang.Object ref = pos_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        pos_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CHAR_START_FIELD_NUMBER = 5;
    private int charStart_;
    /**
     * <code>int32 char_start = 5;</code>
     */
    public int getCharStart() {
      return charStart_;
    }

    public static final int CHAR_END_FIELD_NUMBER = 6;
    private int charEnd_;
    /**
     * <code>int32 char_end = 6;</code>
     */
    public int getCharEnd() {
      return charEnd_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (index_ != 0) {
        output.writeInt32(1, index_);
      }
      if (!getWordBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, word_);
      }
      if (!getLemmaBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, lemma_);
      }
      if (!getPosBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, pos_);
      }
      if (charStart_ != 0) {
        output.writeInt32(5, charStart_);
      }
      if (charEnd_ != 0) {
        output.writeInt32(6, charEnd_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (index_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, index_);
      }
      if (!getWordBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, word_);
      }
      if (!getLemmaBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, lemma_);
      }
      if (!getPosBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, pos_);
      }
      if (charStart_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, charStart_);
      }
      if (charEnd_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, charEnd_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof edu.delaware.nlp.DocumentProto.Token)) {
        return super.equals(obj);
      }
      edu.delaware.nlp.DocumentProto.Token other = (edu.delaware.nlp.DocumentProto.Token) obj;

      if (getIndex()
          != other.getIndex()) return false;
      if (!getWord()
          .equals(other.getWord())) return false;
      if (!getLemma()
          .equals(other.getLemma())) return false;
      if (!getPos()
          .equals(other.getPos())) return false;
      if (getCharStart()
          != other.getCharStart()) return false;
      if (getCharEnd()
          != other.getCharEnd()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getIndex();
      hash = (37 * hash) + WORD_FIELD_NUMBER;
      hash = (53 * hash) + getWord().hashCode();
      hash = (37 * hash) + LEMMA_FIELD_NUMBER;
      hash = (53 * hash) + getLemma().hashCode();
      hash = (37 * hash) + POS_FIELD_NUMBER;
      hash = (53 * hash) + getPos().hashCode();
      hash = (37 * hash) + CHAR_START_FIELD_NUMBER;
      hash = (53 * hash) + getCharStart();
      hash = (37 * hash) + CHAR_END_FIELD_NUMBER;
      hash = (53 * hash) + getCharEnd();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static edu.delaware.nlp.DocumentProto.Token parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Token parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Token prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code udelnlp.Token}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:udelnlp.Token)
        edu.delaware.nlp.DocumentProto.TokenOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Token_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Token_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Token.class, edu.delaware.nlp.DocumentProto.Token.Builder.class);
      }

      // Construct using edu.delaware.nlp.DocumentProto.Token.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        index_ = 0;

        word_ = "";

        lemma_ = "";

        pos_ = "";

        charStart_ = 0;

        charEnd_ = 0;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Token_descriptor;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Token getDefaultInstanceForType() {
        return edu.delaware.nlp.DocumentProto.Token.getDefaultInstance();
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Token build() {
        edu.delaware.nlp.DocumentProto.Token result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Token buildPartial() {
        edu.delaware.nlp.DocumentProto.Token result = new edu.delaware.nlp.DocumentProto.Token(this);
        result.index_ = index_;
        result.word_ = word_;
        result.lemma_ = lemma_;
        result.pos_ = pos_;
        result.charStart_ = charStart_;
        result.charEnd_ = charEnd_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof edu.delaware.nlp.DocumentProto.Token) {
          return mergeFrom((edu.delaware.nlp.DocumentProto.Token)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Token other) {
        if (other == edu.delaware.nlp.DocumentProto.Token.getDefaultInstance()) return this;
        if (other.getIndex() != 0) {
          setIndex(other.getIndex());
        }
        if (!other.getWord().isEmpty()) {
          word_ = other.word_;
          onChanged();
        }
        if (!other.getLemma().isEmpty()) {
          lemma_ = other.lemma_;
          onChanged();
        }
        if (!other.getPos().isEmpty()) {
          pos_ = other.pos_;
          onChanged();
        }
        if (other.getCharStart() != 0) {
          setCharStart(other.getCharStart());
        }
        if (other.getCharEnd() != 0) {
          setCharEnd(other.getCharEnd());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        edu.delaware.nlp.DocumentProto.Token parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (edu.delaware.nlp.DocumentProto.Token) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private int index_ ;
      /**
       * <code>int32 index = 1;</code>
       */
      public int getIndex() {
        return index_;
      }
      /**
       * <code>int32 index = 1;</code>
       */
      public Builder setIndex(int value) {
        
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 index = 1;</code>
       */
      public Builder clearIndex() {
        
        index_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object word_ = "";
      /**
       * <code>string word = 2;</code>
       */
      public java.lang.String getWord() {
        java.lang.Object ref = word_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          word_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string word = 2;</code>
       */
      public com.google.protobuf.ByteString
          getWordBytes() {
        java.lang.Object ref = word_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          word_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string word = 2;</code>
       */
      public Builder setWord(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        word_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string word = 2;</code>
       */
      public Builder clearWord() {
        
        word_ = getDefaultInstance().getWord();
        onChanged();
        return this;
      }
      /**
       * <code>string word = 2;</code>
       */
      public Builder setWordBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        word_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object lemma_ = "";
      /**
       * <code>string lemma = 3;</code>
       */
      public java.lang.String getLemma() {
        java.lang.Object ref = lemma_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          lemma_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string lemma = 3;</code>
       */
      public com.google.protobuf.ByteString
          getLemmaBytes() {
        java.lang.Object ref = lemma_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          lemma_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string lemma = 3;</code>
       */
      public Builder setLemma(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        lemma_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string lemma = 3;</code>
       */
      public Builder clearLemma() {
        
        lemma_ = getDefaultInstance().getLemma();
        onChanged();
        return this;
      }
      /**
       * <code>string lemma = 3;</code>
       */
      public Builder setLemmaBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        lemma_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object pos_ = "";
      /**
       * <code>string pos = 4;</code>
       */
      public java.lang.String getPos() {
        java.lang.Object ref = pos_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          pos_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string pos = 4;</code>
       */
      public com.google.protobuf.ByteString
          getPosBytes() {
        java.lang.Object ref = pos_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          pos_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string pos = 4;</code>
       */
      public Builder setPos(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        pos_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string pos = 4;</code>
       */
      public Builder clearPos() {
        
        pos_ = getDefaultInstance().getPos();
        onChanged();
        return this;
      }
      /**
       * <code>string pos = 4;</code>
       */
      public Builder setPosBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        pos_ = value;
        onChanged();
        return this;
      }

      private int charStart_ ;
      /**
       * <code>int32 char_start = 5;</code>
       */
      public int getCharStart() {
        return charStart_;
      }
      /**
       * <code>int32 char_start = 5;</code>
       */
      public Builder setCharStart(int value) {
        
        charStart_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 char_start = 5;</code>
       */
      public Builder clearCharStart() {
        
        charStart_ = 0;
        onChanged();
        return this;
      }

      private int charEnd_ ;
      /**
       * <code>int32 char_end = 6;</code>
       */
      public int getCharEnd() {
        return charEnd_;
      }
      /**
       * <code>int32 char_end = 6;</code>
       */
      public Builder setCharEnd(int value) {
        
        charEnd_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 char_end = 6;</code>
       */
      public Builder clearCharEnd() {
        
        charEnd_ = 0;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:udelnlp.Token)
    }

    // @@protoc_insertion_point(class_scope:udelnlp.Token)
    private static final edu.delaware.nlp.DocumentProto.Token DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Token();
    }

    public static edu.delaware.nlp.DocumentProto.Token getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Token>
        PARSER = new com.google.protobuf.AbstractParser<Token>() {
      @java.lang.Override
      public Token parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Token(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Token> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public edu.delaware.nlp.DocumentProto.Token getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SentenceOrBuilder extends
      // @@protoc_insertion_point(interface_extends:udelnlp.Sentence)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>int32 index = 1;</code>
     */
    int getIndex();

    /**
     * <code>int32 token_start = 2;</code>
     */
    int getTokenStart();

    /**
     * <code>int32 token_end = 3;</code>
     */
    int getTokenEnd();

    /**
     * <pre>
     * The sentence parse in penn tree bank format. Currently we only store
     * this for BLLIP parser.
     * </pre>
     *
     * <code>string parse = 4;</code>
     */
    java.lang.String getParse();
    /**
     * <pre>
     * The sentence parse in penn tree bank format. Currently we only store
     * this for BLLIP parser.
     * </pre>
     *
     * <code>string parse = 4;</code>
     */
    com.google.protobuf.ByteString
        getParseBytes();

    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Constituent> 
        getConstituentList();
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence.Constituent getConstituent(int index);
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    int getConstituentCount();
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder> 
        getConstituentOrBuilderList();
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder getConstituentOrBuilder(
        int index);

    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Dependency> 
        getDependencyList();
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence.Dependency getDependency(int index);
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    int getDependencyCount();
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder> 
        getDependencyOrBuilderList();
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder getDependencyOrBuilder(
        int index);

    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra> 
        getDependencyExtraList();
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra getDependencyExtra(int index);
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    int getDependencyExtraCount();
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder> 
        getDependencyExtraOrBuilderList();
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder getDependencyExtraOrBuilder(
        int index);

    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Sentence.TokenExtra> 
        getTokenExtraList();
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence.TokenExtra getTokenExtra(int index);
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    int getTokenExtraCount();
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder> 
        getTokenExtraOrBuilderList();
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder getTokenExtraOrBuilder(
        int index);

    /**
     * <code>int32 char_start = 9;</code>
     */
    int getCharStart();

    /**
     * <code>int32 char_end = 10;</code>
     */
    int getCharEnd();
  }
  /**
   * Protobuf type {@code udelnlp.Sentence}
   */
  public  static final class Sentence extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:udelnlp.Sentence)
      SentenceOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Sentence.newBuilder() to construct.
    private Sentence(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Sentence() {
      parse_ = "";
      constituent_ = java.util.Collections.emptyList();
      dependency_ = java.util.Collections.emptyList();
      dependencyExtra_ = java.util.Collections.emptyList();
      tokenExtra_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Sentence(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 8: {

              index_ = input.readInt32();
              break;
            }
            case 16: {

              tokenStart_ = input.readInt32();
              break;
            }
            case 24: {

              tokenEnd_ = input.readInt32();
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();

              parse_ = s;
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) != 0)) {
                constituent_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence.Constituent>();
                mutable_bitField0_ |= 0x00000010;
              }
              constituent_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Sentence.Constituent.parser(), extensionRegistry));
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) != 0)) {
                dependency_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence.Dependency>();
                mutable_bitField0_ |= 0x00000020;
              }
              dependency_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Sentence.Dependency.parser(), extensionRegistry));
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) != 0)) {
                dependencyExtra_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra>();
                mutable_bitField0_ |= 0x00000040;
              }
              dependencyExtra_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.parser(), extensionRegistry));
              break;
            }
            case 66: {
              if (!((mutable_bitField0_ & 0x00000080) != 0)) {
                tokenExtra_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence.TokenExtra>();
                mutable_bitField0_ |= 0x00000080;
              }
              tokenExtra_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.parser(), extensionRegistry));
              break;
            }
            case 72: {

              charStart_ = input.readInt32();
              break;
            }
            case 80: {

              charEnd_ = input.readInt32();
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000010) != 0)) {
          constituent_ = java.util.Collections.unmodifiableList(constituent_);
        }
        if (((mutable_bitField0_ & 0x00000020) != 0)) {
          dependency_ = java.util.Collections.unmodifiableList(dependency_);
        }
        if (((mutable_bitField0_ & 0x00000040) != 0)) {
          dependencyExtra_ = java.util.Collections.unmodifiableList(dependencyExtra_);
        }
        if (((mutable_bitField0_ & 0x00000080) != 0)) {
          tokenExtra_ = java.util.Collections.unmodifiableList(tokenExtra_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              edu.delaware.nlp.DocumentProto.Sentence.class, edu.delaware.nlp.DocumentProto.Sentence.Builder.class);
    }

    public interface ConstituentOrBuilder extends
        // @@protoc_insertion_point(interface_extends:udelnlp.Sentence.Constituent)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>int32 index = 1;</code>
       */
      int getIndex();

      /**
       * <code>int32 token_start = 2;</code>
       */
      int getTokenStart();

      /**
       * <code>int32 token_end = 3;</code>
       */
      int getTokenEnd();

      /**
       * <code>int32 head_token_index = 4;</code>
       */
      int getHeadTokenIndex();

      /**
       * <code>string label = 5;</code>
       */
      java.lang.String getLabel();
      /**
       * <code>string label = 5;</code>
       */
      com.google.protobuf.ByteString
          getLabelBytes();

      /**
       * <code>int32 parent = 6;</code>
       */
      int getParent();

      /**
       * <code>repeated int32 children = 7;</code>
       */
      java.util.List<java.lang.Integer> getChildrenList();
      /**
       * <code>repeated int32 children = 7;</code>
       */
      int getChildrenCount();
      /**
       * <code>repeated int32 children = 7;</code>
       */
      int getChildren(int index);
    }
    /**
     * Protobuf type {@code udelnlp.Sentence.Constituent}
     */
    public  static final class Constituent extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:udelnlp.Sentence.Constituent)
        ConstituentOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Constituent.newBuilder() to construct.
      private Constituent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Constituent() {
        label_ = "";
        children_ = emptyIntList();
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private Constituent(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        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;
              case 8: {

                index_ = input.readInt32();
                break;
              }
              case 16: {

                tokenStart_ = input.readInt32();
                break;
              }
              case 24: {

                tokenEnd_ = input.readInt32();
                break;
              }
              case 32: {

                headTokenIndex_ = input.readInt32();
                break;
              }
              case 42: {
                java.lang.String s = input.readStringRequireUtf8();

                label_ = s;
                break;
              }
              case 48: {

                parent_ = input.readInt32();
                break;
              }
              case 56: {
                if (!((mutable_bitField0_ & 0x00000040) != 0)) {
                  children_ = newIntList();
                  mutable_bitField0_ |= 0x00000040;
                }
                children_.addInt(input.readInt32());
                break;
              }
              case 58: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000040) != 0) && input.getBytesUntilLimit() > 0) {
                  children_ = newIntList();
                  mutable_bitField0_ |= 0x00000040;
                }
                while (input.getBytesUntilLimit() > 0) {
                  children_.addInt(input.readInt32());
                }
                input.popLimit(limit);
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000040) != 0)) {
            children_.makeImmutable(); // C
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Constituent_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Constituent_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Sentence.Constituent.class, edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder.class);
      }

      private int bitField0_;
      public static final int INDEX_FIELD_NUMBER = 1;
      private int index_;
      /**
       * <code>int32 index = 1;</code>
       */
      public int getIndex() {
        return index_;
      }

      public static final int TOKEN_START_FIELD_NUMBER = 2;
      private int tokenStart_;
      /**
       * <code>int32 token_start = 2;</code>
       */
      public int getTokenStart() {
        return tokenStart_;
      }

      public static final int TOKEN_END_FIELD_NUMBER = 3;
      private int tokenEnd_;
      /**
       * <code>int32 token_end = 3;</code>
       */
      public int getTokenEnd() {
        return tokenEnd_;
      }

      public static final int HEAD_TOKEN_INDEX_FIELD_NUMBER = 4;
      private int headTokenIndex_;
      /**
       * <code>int32 head_token_index = 4;</code>
       */
      public int getHeadTokenIndex() {
        return headTokenIndex_;
      }

      public static final int LABEL_FIELD_NUMBER = 5;
      private volatile java.lang.Object label_;
      /**
       * <code>string label = 5;</code>
       */
      public java.lang.String getLabel() {
        java.lang.Object ref = label_;
        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();
          label_ = s;
          return s;
        }
      }
      /**
       * <code>string label = 5;</code>
       */
      public com.google.protobuf.ByteString
          getLabelBytes() {
        java.lang.Object ref = label_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          label_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int PARENT_FIELD_NUMBER = 6;
      private int parent_;
      /**
       * <code>int32 parent = 6;</code>
       */
      public int getParent() {
        return parent_;
      }

      public static final int CHILDREN_FIELD_NUMBER = 7;
      private com.google.protobuf.Internal.IntList children_;
      /**
       * <code>repeated int32 children = 7;</code>
       */
      public java.util.List<java.lang.Integer>
          getChildrenList() {
        return children_;
      }
      /**
       * <code>repeated int32 children = 7;</code>
       */
      public int getChildrenCount() {
        return children_.size();
      }
      /**
       * <code>repeated int32 children = 7;</code>
       */
      public int getChildren(int index) {
        return children_.getInt(index);
      }
      private int childrenMemoizedSerializedSize = -1;

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (index_ != 0) {
          output.writeInt32(1, index_);
        }
        if (tokenStart_ != 0) {
          output.writeInt32(2, tokenStart_);
        }
        if (tokenEnd_ != 0) {
          output.writeInt32(3, tokenEnd_);
        }
        if (headTokenIndex_ != 0) {
          output.writeInt32(4, headTokenIndex_);
        }
        if (!getLabelBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 5, label_);
        }
        if (parent_ != 0) {
          output.writeInt32(6, parent_);
        }
        if (getChildrenList().size() > 0) {
          output.writeUInt32NoTag(58);
          output.writeUInt32NoTag(childrenMemoizedSerializedSize);
        }
        for (int i = 0; i < children_.size(); i++) {
          output.writeInt32NoTag(children_.getInt(i));
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (index_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, index_);
        }
        if (tokenStart_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, tokenStart_);
        }
        if (tokenEnd_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(3, tokenEnd_);
        }
        if (headTokenIndex_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(4, headTokenIndex_);
        }
        if (!getLabelBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, label_);
        }
        if (parent_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(6, parent_);
        }
        {
          int dataSize = 0;
          for (int i = 0; i < children_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(children_.getInt(i));
          }
          size += dataSize;
          if (!getChildrenList().isEmpty()) {
            size += 1;
            size += com.google.protobuf.CodedOutputStream
                .computeInt32SizeNoTag(dataSize);
          }
          childrenMemoizedSerializedSize = dataSize;
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof edu.delaware.nlp.DocumentProto.Sentence.Constituent)) {
          return super.equals(obj);
        }
        edu.delaware.nlp.DocumentProto.Sentence.Constituent other = (edu.delaware.nlp.DocumentProto.Sentence.Constituent) obj;

        if (getIndex()
            != other.getIndex()) return false;
        if (getTokenStart()
            != other.getTokenStart()) return false;
        if (getTokenEnd()
            != other.getTokenEnd()) return false;
        if (getHeadTokenIndex()
            != other.getHeadTokenIndex()) return false;
        if (!getLabel()
            .equals(other.getLabel())) return false;
        if (getParent()
            != other.getParent()) return false;
        if (!getChildrenList()
            .equals(other.getChildrenList())) return false;
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + INDEX_FIELD_NUMBER;
        hash = (53 * hash) + getIndex();
        hash = (37 * hash) + TOKEN_START_FIELD_NUMBER;
        hash = (53 * hash) + getTokenStart();
        hash = (37 * hash) + TOKEN_END_FIELD_NUMBER;
        hash = (53 * hash) + getTokenEnd();
        hash = (37 * hash) + HEAD_TOKEN_INDEX_FIELD_NUMBER;
        hash = (53 * hash) + getHeadTokenIndex();
        hash = (37 * hash) + LABEL_FIELD_NUMBER;
        hash = (53 * hash) + getLabel().hashCode();
        hash = (37 * hash) + PARENT_FIELD_NUMBER;
        hash = (53 * hash) + getParent();
        if (getChildrenCount() > 0) {
          hash = (37 * hash) + CHILDREN_FIELD_NUMBER;
          hash = (53 * hash) + getChildrenList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Sentence.Constituent prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code udelnlp.Sentence.Constituent}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:udelnlp.Sentence.Constituent)
          edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Constituent_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Constituent_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  edu.delaware.nlp.DocumentProto.Sentence.Constituent.class, edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder.class);
        }

        // Construct using edu.delaware.nlp.DocumentProto.Sentence.Constituent.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          index_ = 0;

          tokenStart_ = 0;

          tokenEnd_ = 0;

          headTokenIndex_ = 0;

          label_ = "";

          parent_ = 0;

          children_ = emptyIntList();
          bitField0_ = (bitField0_ & ~0x00000040);
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Constituent_descriptor;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.Constituent getDefaultInstanceForType() {
          return edu.delaware.nlp.DocumentProto.Sentence.Constituent.getDefaultInstance();
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.Constituent build() {
          edu.delaware.nlp.DocumentProto.Sentence.Constituent result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.Constituent buildPartial() {
          edu.delaware.nlp.DocumentProto.Sentence.Constituent result = new edu.delaware.nlp.DocumentProto.Sentence.Constituent(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          result.index_ = index_;
          result.tokenStart_ = tokenStart_;
          result.tokenEnd_ = tokenEnd_;
          result.headTokenIndex_ = headTokenIndex_;
          result.label_ = label_;
          result.parent_ = parent_;
          if (((bitField0_ & 0x00000040) != 0)) {
            children_.makeImmutable();
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.children_ = children_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof edu.delaware.nlp.DocumentProto.Sentence.Constituent) {
            return mergeFrom((edu.delaware.nlp.DocumentProto.Sentence.Constituent)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Sentence.Constituent other) {
          if (other == edu.delaware.nlp.DocumentProto.Sentence.Constituent.getDefaultInstance()) return this;
          if (other.getIndex() != 0) {
            setIndex(other.getIndex());
          }
          if (other.getTokenStart() != 0) {
            setTokenStart(other.getTokenStart());
          }
          if (other.getTokenEnd() != 0) {
            setTokenEnd(other.getTokenEnd());
          }
          if (other.getHeadTokenIndex() != 0) {
            setHeadTokenIndex(other.getHeadTokenIndex());
          }
          if (!other.getLabel().isEmpty()) {
            label_ = other.label_;
            onChanged();
          }
          if (other.getParent() != 0) {
            setParent(other.getParent());
          }
          if (!other.children_.isEmpty()) {
            if (children_.isEmpty()) {
              children_ = other.children_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureChildrenIsMutable();
              children_.addAll(other.children_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          edu.delaware.nlp.DocumentProto.Sentence.Constituent parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (edu.delaware.nlp.DocumentProto.Sentence.Constituent) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private int index_ ;
        /**
         * <code>int32 index = 1;</code>
         */
        public int getIndex() {
          return index_;
        }
        /**
         * <code>int32 index = 1;</code>
         */
        public Builder setIndex(int value) {
          
          index_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 index = 1;</code>
         */
        public Builder clearIndex() {
          
          index_ = 0;
          onChanged();
          return this;
        }

        private int tokenStart_ ;
        /**
         * <code>int32 token_start = 2;</code>
         */
        public int getTokenStart() {
          return tokenStart_;
        }
        /**
         * <code>int32 token_start = 2;</code>
         */
        public Builder setTokenStart(int value) {
          
          tokenStart_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 token_start = 2;</code>
         */
        public Builder clearTokenStart() {
          
          tokenStart_ = 0;
          onChanged();
          return this;
        }

        private int tokenEnd_ ;
        /**
         * <code>int32 token_end = 3;</code>
         */
        public int getTokenEnd() {
          return tokenEnd_;
        }
        /**
         * <code>int32 token_end = 3;</code>
         */
        public Builder setTokenEnd(int value) {
          
          tokenEnd_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 token_end = 3;</code>
         */
        public Builder clearTokenEnd() {
          
          tokenEnd_ = 0;
          onChanged();
          return this;
        }

        private int headTokenIndex_ ;
        /**
         * <code>int32 head_token_index = 4;</code>
         */
        public int getHeadTokenIndex() {
          return headTokenIndex_;
        }
        /**
         * <code>int32 head_token_index = 4;</code>
         */
        public Builder setHeadTokenIndex(int value) {
          
          headTokenIndex_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 head_token_index = 4;</code>
         */
        public Builder clearHeadTokenIndex() {
          
          headTokenIndex_ = 0;
          onChanged();
          return this;
        }

        private java.lang.Object label_ = "";
        /**
         * <code>string label = 5;</code>
         */
        public java.lang.String getLabel() {
          java.lang.Object ref = label_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            label_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string label = 5;</code>
         */
        public com.google.protobuf.ByteString
            getLabelBytes() {
          java.lang.Object ref = label_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            label_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string label = 5;</code>
         */
        public Builder setLabel(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          label_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string label = 5;</code>
         */
        public Builder clearLabel() {
          
          label_ = getDefaultInstance().getLabel();
          onChanged();
          return this;
        }
        /**
         * <code>string label = 5;</code>
         */
        public Builder setLabelBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          label_ = value;
          onChanged();
          return this;
        }

        private int parent_ ;
        /**
         * <code>int32 parent = 6;</code>
         */
        public int getParent() {
          return parent_;
        }
        /**
         * <code>int32 parent = 6;</code>
         */
        public Builder setParent(int value) {
          
          parent_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 parent = 6;</code>
         */
        public Builder clearParent() {
          
          parent_ = 0;
          onChanged();
          return this;
        }

        private com.google.protobuf.Internal.IntList children_ = emptyIntList();
        private void ensureChildrenIsMutable() {
          if (!((bitField0_ & 0x00000040) != 0)) {
            children_ = mutableCopy(children_);
            bitField0_ |= 0x00000040;
           }
        }
        /**
         * <code>repeated int32 children = 7;</code>
         */
        public java.util.List<java.lang.Integer>
            getChildrenList() {
          return ((bitField0_ & 0x00000040) != 0) ?
                   java.util.Collections.unmodifiableList(children_) : children_;
        }
        /**
         * <code>repeated int32 children = 7;</code>
         */
        public int getChildrenCount() {
          return children_.size();
        }
        /**
         * <code>repeated int32 children = 7;</code>
         */
        public int getChildren(int index) {
          return children_.getInt(index);
        }
        /**
         * <code>repeated int32 children = 7;</code>
         */
        public Builder setChildren(
            int index, int value) {
          ensureChildrenIsMutable();
          children_.setInt(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 children = 7;</code>
         */
        public Builder addChildren(int value) {
          ensureChildrenIsMutable();
          children_.addInt(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 children = 7;</code>
         */
        public Builder addAllChildren(
            java.lang.Iterable<? extends java.lang.Integer> values) {
          ensureChildrenIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, children_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 children = 7;</code>
         */
        public Builder clearChildren() {
          children_ = emptyIntList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:udelnlp.Sentence.Constituent)
      }

      // @@protoc_insertion_point(class_scope:udelnlp.Sentence.Constituent)
      private static final edu.delaware.nlp.DocumentProto.Sentence.Constituent DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Sentence.Constituent();
      }

      public static edu.delaware.nlp.DocumentProto.Sentence.Constituent getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Constituent>
          PARSER = new com.google.protobuf.AbstractParser<Constituent>() {
        @java.lang.Override
        public Constituent parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Constituent(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<Constituent> parser() {
        return PARSER;
      }

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

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Sentence.Constituent getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface DependencyOrBuilder extends
        // @@protoc_insertion_point(interface_extends:udelnlp.Sentence.Dependency)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>int32 gov_index = 1;</code>
       */
      int getGovIndex();

      /**
       * <code>int32 dep_index = 2;</code>
       */
      int getDepIndex();

      /**
       * <code>string relation = 3;</code>
       */
      java.lang.String getRelation();
      /**
       * <code>string relation = 3;</code>
       */
      com.google.protobuf.ByteString
          getRelationBytes();

      /**
       * <code>bool isExtra = 4;</code>
       */
      boolean getIsExtra();
    }
    /**
     * Protobuf type {@code udelnlp.Sentence.Dependency}
     */
    public  static final class Dependency extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:udelnlp.Sentence.Dependency)
        DependencyOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Dependency.newBuilder() to construct.
      private Dependency(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Dependency() {
        relation_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private Dependency(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        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;
              case 8: {

                govIndex_ = input.readInt32();
                break;
              }
              case 16: {

                depIndex_ = input.readInt32();
                break;
              }
              case 26: {
                java.lang.String s = input.readStringRequireUtf8();

                relation_ = s;
                break;
              }
              case 32: {

                isExtra_ = input.readBool();
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Dependency_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Dependency_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Sentence.Dependency.class, edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder.class);
      }

      public static final int GOV_INDEX_FIELD_NUMBER = 1;
      private int govIndex_;
      /**
       * <code>int32 gov_index = 1;</code>
       */
      public int getGovIndex() {
        return govIndex_;
      }

      public static final int DEP_INDEX_FIELD_NUMBER = 2;
      private int depIndex_;
      /**
       * <code>int32 dep_index = 2;</code>
       */
      public int getDepIndex() {
        return depIndex_;
      }

      public static final int RELATION_FIELD_NUMBER = 3;
      private volatile java.lang.Object relation_;
      /**
       * <code>string relation = 3;</code>
       */
      public java.lang.String getRelation() {
        java.lang.Object ref = relation_;
        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();
          relation_ = s;
          return s;
        }
      }
      /**
       * <code>string relation = 3;</code>
       */
      public com.google.protobuf.ByteString
          getRelationBytes() {
        java.lang.Object ref = relation_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          relation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int ISEXTRA_FIELD_NUMBER = 4;
      private boolean isExtra_;
      /**
       * <code>bool isExtra = 4;</code>
       */
      public boolean getIsExtra() {
        return isExtra_;
      }

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (govIndex_ != 0) {
          output.writeInt32(1, govIndex_);
        }
        if (depIndex_ != 0) {
          output.writeInt32(2, depIndex_);
        }
        if (!getRelationBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, relation_);
        }
        if (isExtra_ != false) {
          output.writeBool(4, isExtra_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (govIndex_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, govIndex_);
        }
        if (depIndex_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, depIndex_);
        }
        if (!getRelationBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, relation_);
        }
        if (isExtra_ != false) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(4, isExtra_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof edu.delaware.nlp.DocumentProto.Sentence.Dependency)) {
          return super.equals(obj);
        }
        edu.delaware.nlp.DocumentProto.Sentence.Dependency other = (edu.delaware.nlp.DocumentProto.Sentence.Dependency) obj;

        if (getGovIndex()
            != other.getGovIndex()) return false;
        if (getDepIndex()
            != other.getDepIndex()) return false;
        if (!getRelation()
            .equals(other.getRelation())) return false;
        if (getIsExtra()
            != other.getIsExtra()) return false;
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + GOV_INDEX_FIELD_NUMBER;
        hash = (53 * hash) + getGovIndex();
        hash = (37 * hash) + DEP_INDEX_FIELD_NUMBER;
        hash = (53 * hash) + getDepIndex();
        hash = (37 * hash) + RELATION_FIELD_NUMBER;
        hash = (53 * hash) + getRelation().hashCode();
        hash = (37 * hash) + ISEXTRA_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getIsExtra());
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Sentence.Dependency prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code udelnlp.Sentence.Dependency}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:udelnlp.Sentence.Dependency)
          edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Dependency_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Dependency_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  edu.delaware.nlp.DocumentProto.Sentence.Dependency.class, edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder.class);
        }

        // Construct using edu.delaware.nlp.DocumentProto.Sentence.Dependency.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          govIndex_ = 0;

          depIndex_ = 0;

          relation_ = "";

          isExtra_ = false;

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_Dependency_descriptor;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.Dependency getDefaultInstanceForType() {
          return edu.delaware.nlp.DocumentProto.Sentence.Dependency.getDefaultInstance();
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.Dependency build() {
          edu.delaware.nlp.DocumentProto.Sentence.Dependency result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.Dependency buildPartial() {
          edu.delaware.nlp.DocumentProto.Sentence.Dependency result = new edu.delaware.nlp.DocumentProto.Sentence.Dependency(this);
          result.govIndex_ = govIndex_;
          result.depIndex_ = depIndex_;
          result.relation_ = relation_;
          result.isExtra_ = isExtra_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof edu.delaware.nlp.DocumentProto.Sentence.Dependency) {
            return mergeFrom((edu.delaware.nlp.DocumentProto.Sentence.Dependency)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Sentence.Dependency other) {
          if (other == edu.delaware.nlp.DocumentProto.Sentence.Dependency.getDefaultInstance()) return this;
          if (other.getGovIndex() != 0) {
            setGovIndex(other.getGovIndex());
          }
          if (other.getDepIndex() != 0) {
            setDepIndex(other.getDepIndex());
          }
          if (!other.getRelation().isEmpty()) {
            relation_ = other.relation_;
            onChanged();
          }
          if (other.getIsExtra() != false) {
            setIsExtra(other.getIsExtra());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          edu.delaware.nlp.DocumentProto.Sentence.Dependency parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (edu.delaware.nlp.DocumentProto.Sentence.Dependency) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private int govIndex_ ;
        /**
         * <code>int32 gov_index = 1;</code>
         */
        public int getGovIndex() {
          return govIndex_;
        }
        /**
         * <code>int32 gov_index = 1;</code>
         */
        public Builder setGovIndex(int value) {
          
          govIndex_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 gov_index = 1;</code>
         */
        public Builder clearGovIndex() {
          
          govIndex_ = 0;
          onChanged();
          return this;
        }

        private int depIndex_ ;
        /**
         * <code>int32 dep_index = 2;</code>
         */
        public int getDepIndex() {
          return depIndex_;
        }
        /**
         * <code>int32 dep_index = 2;</code>
         */
        public Builder setDepIndex(int value) {
          
          depIndex_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 dep_index = 2;</code>
         */
        public Builder clearDepIndex() {
          
          depIndex_ = 0;
          onChanged();
          return this;
        }

        private java.lang.Object relation_ = "";
        /**
         * <code>string relation = 3;</code>
         */
        public java.lang.String getRelation() {
          java.lang.Object ref = relation_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            relation_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string relation = 3;</code>
         */
        public com.google.protobuf.ByteString
            getRelationBytes() {
          java.lang.Object ref = relation_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            relation_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string relation = 3;</code>
         */
        public Builder setRelation(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          relation_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string relation = 3;</code>
         */
        public Builder clearRelation() {
          
          relation_ = getDefaultInstance().getRelation();
          onChanged();
          return this;
        }
        /**
         * <code>string relation = 3;</code>
         */
        public Builder setRelationBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          relation_ = value;
          onChanged();
          return this;
        }

        private boolean isExtra_ ;
        /**
         * <code>bool isExtra = 4;</code>
         */
        public boolean getIsExtra() {
          return isExtra_;
        }
        /**
         * <code>bool isExtra = 4;</code>
         */
        public Builder setIsExtra(boolean value) {
          
          isExtra_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>bool isExtra = 4;</code>
         */
        public Builder clearIsExtra() {
          
          isExtra_ = false;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:udelnlp.Sentence.Dependency)
      }

      // @@protoc_insertion_point(class_scope:udelnlp.Sentence.Dependency)
      private static final edu.delaware.nlp.DocumentProto.Sentence.Dependency DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Sentence.Dependency();
      }

      public static edu.delaware.nlp.DocumentProto.Sentence.Dependency getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Dependency>
          PARSER = new com.google.protobuf.AbstractParser<Dependency>() {
        @java.lang.Override
        public Dependency parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Dependency(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<Dependency> parser() {
        return PARSER;
      }

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

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Sentence.Dependency getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface DependencyExtraOrBuilder extends
        // @@protoc_insertion_point(interface_extends:udelnlp.Sentence.DependencyExtra)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>int32 gov_index = 1;</code>
       */
      int getGovIndex();

      /**
       * <code>int32 dep_index = 2;</code>
       */
      int getDepIndex();

      /**
       * <code>string relation = 3;</code>
       */
      java.lang.String getRelation();
      /**
       * <code>string relation = 3;</code>
       */
      com.google.protobuf.ByteString
          getRelationBytes();

      /**
       * <code>string rule_id = 4;</code>
       */
      java.lang.String getRuleId();
      /**
       * <code>string rule_id = 4;</code>
       */
      com.google.protobuf.ByteString
          getRuleIdBytes();
    }
    /**
     * Protobuf type {@code udelnlp.Sentence.DependencyExtra}
     */
    public  static final class DependencyExtra extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:udelnlp.Sentence.DependencyExtra)
        DependencyExtraOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use DependencyExtra.newBuilder() to construct.
      private DependencyExtra(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private DependencyExtra() {
        relation_ = "";
        ruleId_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private DependencyExtra(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        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;
              case 8: {

                govIndex_ = input.readInt32();
                break;
              }
              case 16: {

                depIndex_ = input.readInt32();
                break;
              }
              case 26: {
                java.lang.String s = input.readStringRequireUtf8();

                relation_ = s;
                break;
              }
              case 34: {
                java.lang.String s = input.readStringRequireUtf8();

                ruleId_ = s;
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_DependencyExtra_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_DependencyExtra_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.class, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder.class);
      }

      public static final int GOV_INDEX_FIELD_NUMBER = 1;
      private int govIndex_;
      /**
       * <code>int32 gov_index = 1;</code>
       */
      public int getGovIndex() {
        return govIndex_;
      }

      public static final int DEP_INDEX_FIELD_NUMBER = 2;
      private int depIndex_;
      /**
       * <code>int32 dep_index = 2;</code>
       */
      public int getDepIndex() {
        return depIndex_;
      }

      public static final int RELATION_FIELD_NUMBER = 3;
      private volatile java.lang.Object relation_;
      /**
       * <code>string relation = 3;</code>
       */
      public java.lang.String getRelation() {
        java.lang.Object ref = relation_;
        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();
          relation_ = s;
          return s;
        }
      }
      /**
       * <code>string relation = 3;</code>
       */
      public com.google.protobuf.ByteString
          getRelationBytes() {
        java.lang.Object ref = relation_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          relation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int RULE_ID_FIELD_NUMBER = 4;
      private volatile java.lang.Object ruleId_;
      /**
       * <code>string rule_id = 4;</code>
       */
      public java.lang.String getRuleId() {
        java.lang.Object ref = ruleId_;
        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();
          ruleId_ = s;
          return s;
        }
      }
      /**
       * <code>string rule_id = 4;</code>
       */
      public com.google.protobuf.ByteString
          getRuleIdBytes() {
        java.lang.Object ref = ruleId_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          ruleId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (govIndex_ != 0) {
          output.writeInt32(1, govIndex_);
        }
        if (depIndex_ != 0) {
          output.writeInt32(2, depIndex_);
        }
        if (!getRelationBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, relation_);
        }
        if (!getRuleIdBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 4, ruleId_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (govIndex_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, govIndex_);
        }
        if (depIndex_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, depIndex_);
        }
        if (!getRelationBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, relation_);
        }
        if (!getRuleIdBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, ruleId_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra)) {
          return super.equals(obj);
        }
        edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra other = (edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra) obj;

        if (getGovIndex()
            != other.getGovIndex()) return false;
        if (getDepIndex()
            != other.getDepIndex()) return false;
        if (!getRelation()
            .equals(other.getRelation())) return false;
        if (!getRuleId()
            .equals(other.getRuleId())) return false;
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + GOV_INDEX_FIELD_NUMBER;
        hash = (53 * hash) + getGovIndex();
        hash = (37 * hash) + DEP_INDEX_FIELD_NUMBER;
        hash = (53 * hash) + getDepIndex();
        hash = (37 * hash) + RELATION_FIELD_NUMBER;
        hash = (53 * hash) + getRelation().hashCode();
        hash = (37 * hash) + RULE_ID_FIELD_NUMBER;
        hash = (53 * hash) + getRuleId().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code udelnlp.Sentence.DependencyExtra}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:udelnlp.Sentence.DependencyExtra)
          edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_DependencyExtra_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_DependencyExtra_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.class, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder.class);
        }

        // Construct using edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          govIndex_ = 0;

          depIndex_ = 0;

          relation_ = "";

          ruleId_ = "";

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_DependencyExtra_descriptor;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra getDefaultInstanceForType() {
          return edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.getDefaultInstance();
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra build() {
          edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra buildPartial() {
          edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra result = new edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra(this);
          result.govIndex_ = govIndex_;
          result.depIndex_ = depIndex_;
          result.relation_ = relation_;
          result.ruleId_ = ruleId_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra) {
            return mergeFrom((edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra other) {
          if (other == edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.getDefaultInstance()) return this;
          if (other.getGovIndex() != 0) {
            setGovIndex(other.getGovIndex());
          }
          if (other.getDepIndex() != 0) {
            setDepIndex(other.getDepIndex());
          }
          if (!other.getRelation().isEmpty()) {
            relation_ = other.relation_;
            onChanged();
          }
          if (!other.getRuleId().isEmpty()) {
            ruleId_ = other.ruleId_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private int govIndex_ ;
        /**
         * <code>int32 gov_index = 1;</code>
         */
        public int getGovIndex() {
          return govIndex_;
        }
        /**
         * <code>int32 gov_index = 1;</code>
         */
        public Builder setGovIndex(int value) {
          
          govIndex_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 gov_index = 1;</code>
         */
        public Builder clearGovIndex() {
          
          govIndex_ = 0;
          onChanged();
          return this;
        }

        private int depIndex_ ;
        /**
         * <code>int32 dep_index = 2;</code>
         */
        public int getDepIndex() {
          return depIndex_;
        }
        /**
         * <code>int32 dep_index = 2;</code>
         */
        public Builder setDepIndex(int value) {
          
          depIndex_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 dep_index = 2;</code>
         */
        public Builder clearDepIndex() {
          
          depIndex_ = 0;
          onChanged();
          return this;
        }

        private java.lang.Object relation_ = "";
        /**
         * <code>string relation = 3;</code>
         */
        public java.lang.String getRelation() {
          java.lang.Object ref = relation_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            relation_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string relation = 3;</code>
         */
        public com.google.protobuf.ByteString
            getRelationBytes() {
          java.lang.Object ref = relation_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            relation_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string relation = 3;</code>
         */
        public Builder setRelation(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          relation_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string relation = 3;</code>
         */
        public Builder clearRelation() {
          
          relation_ = getDefaultInstance().getRelation();
          onChanged();
          return this;
        }
        /**
         * <code>string relation = 3;</code>
         */
        public Builder setRelationBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          relation_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object ruleId_ = "";
        /**
         * <code>string rule_id = 4;</code>
         */
        public java.lang.String getRuleId() {
          java.lang.Object ref = ruleId_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            ruleId_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string rule_id = 4;</code>
         */
        public com.google.protobuf.ByteString
            getRuleIdBytes() {
          java.lang.Object ref = ruleId_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            ruleId_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string rule_id = 4;</code>
         */
        public Builder setRuleId(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          ruleId_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string rule_id = 4;</code>
         */
        public Builder clearRuleId() {
          
          ruleId_ = getDefaultInstance().getRuleId();
          onChanged();
          return this;
        }
        /**
         * <code>string rule_id = 4;</code>
         */
        public Builder setRuleIdBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          ruleId_ = value;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:udelnlp.Sentence.DependencyExtra)
      }

      // @@protoc_insertion_point(class_scope:udelnlp.Sentence.DependencyExtra)
      private static final edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra();
      }

      public static edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<DependencyExtra>
          PARSER = new com.google.protobuf.AbstractParser<DependencyExtra>() {
        @java.lang.Override
        public DependencyExtra parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new DependencyExtra(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<DependencyExtra> parser() {
        return PARSER;
      }

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

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface TokenExtraOrBuilder extends
        // @@protoc_insertion_point(interface_extends:udelnlp.Sentence.TokenExtra)
        com.google.protobuf.MessageOrBuilder {

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

      /**
       * <code>int32 index = 2;</code>
       */
      int getIndex();
    }
    /**
     * Protobuf type {@code udelnlp.Sentence.TokenExtra}
     */
    public  static final class TokenExtra extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:udelnlp.Sentence.TokenExtra)
        TokenExtraOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use TokenExtra.newBuilder() to construct.
      private TokenExtra(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private TokenExtra() {
        name_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private TokenExtra(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        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;
              case 10: {
                java.lang.String s = input.readStringRequireUtf8();

                name_ = s;
                break;
              }
              case 16: {

                index_ = input.readInt32();
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_TokenExtra_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_TokenExtra_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.class, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder.class);
      }

      public static final int NAME_FIELD_NUMBER = 1;
      private volatile java.lang.Object name_;
      /**
       * <code>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();
          name_ = s;
          return s;
        }
      }
      /**
       * <code>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 INDEX_FIELD_NUMBER = 2;
      private int index_;
      /**
       * <code>int32 index = 2;</code>
       */
      public int getIndex() {
        return index_;
      }

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!getNameBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
        }
        if (index_ != 0) {
          output.writeInt32(2, index_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (!getNameBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
        }
        if (index_ != 0) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, index_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof edu.delaware.nlp.DocumentProto.Sentence.TokenExtra)) {
          return super.equals(obj);
        }
        edu.delaware.nlp.DocumentProto.Sentence.TokenExtra other = (edu.delaware.nlp.DocumentProto.Sentence.TokenExtra) obj;

        if (!getName()
            .equals(other.getName())) return false;
        if (getIndex()
            != other.getIndex()) return false;
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().hashCode();
        hash = (37 * hash) + INDEX_FIELD_NUMBER;
        hash = (53 * hash) + getIndex();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Sentence.TokenExtra prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code udelnlp.Sentence.TokenExtra}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:udelnlp.Sentence.TokenExtra)
          edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_TokenExtra_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_TokenExtra_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.class, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder.class);
        }

        // Construct using edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          name_ = "";

          index_ = 0;

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_TokenExtra_descriptor;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra getDefaultInstanceForType() {
          return edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.getDefaultInstance();
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra build() {
          edu.delaware.nlp.DocumentProto.Sentence.TokenExtra result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra buildPartial() {
          edu.delaware.nlp.DocumentProto.Sentence.TokenExtra result = new edu.delaware.nlp.DocumentProto.Sentence.TokenExtra(this);
          result.name_ = name_;
          result.index_ = index_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof edu.delaware.nlp.DocumentProto.Sentence.TokenExtra) {
            return mergeFrom((edu.delaware.nlp.DocumentProto.Sentence.TokenExtra)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Sentence.TokenExtra other) {
          if (other == edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.getDefaultInstance()) return this;
          if (!other.getName().isEmpty()) {
            name_ = other.name_;
            onChanged();
          }
          if (other.getIndex() != 0) {
            setIndex(other.getIndex());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          edu.delaware.nlp.DocumentProto.Sentence.TokenExtra parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (edu.delaware.nlp.DocumentProto.Sentence.TokenExtra) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private java.lang.Object name_ = "";
        /**
         * <code>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();
            name_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>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>string name = 1;</code>
         */
        public Builder setName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          name_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string name = 1;</code>
         */
        public Builder clearName() {
          
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         * <code>string name = 1;</code>
         */
        public Builder setNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          name_ = value;
          onChanged();
          return this;
        }

        private int index_ ;
        /**
         * <code>int32 index = 2;</code>
         */
        public int getIndex() {
          return index_;
        }
        /**
         * <code>int32 index = 2;</code>
         */
        public Builder setIndex(int value) {
          
          index_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>int32 index = 2;</code>
         */
        public Builder clearIndex() {
          
          index_ = 0;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:udelnlp.Sentence.TokenExtra)
      }

      // @@protoc_insertion_point(class_scope:udelnlp.Sentence.TokenExtra)
      private static final edu.delaware.nlp.DocumentProto.Sentence.TokenExtra DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Sentence.TokenExtra();
      }

      public static edu.delaware.nlp.DocumentProto.Sentence.TokenExtra getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<TokenExtra>
          PARSER = new com.google.protobuf.AbstractParser<TokenExtra>() {
        @java.lang.Override
        public TokenExtra parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new TokenExtra(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<TokenExtra> parser() {
        return PARSER;
      }

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

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int INDEX_FIELD_NUMBER = 1;
    private int index_;
    /**
     * <code>int32 index = 1;</code>
     */
    public int getIndex() {
      return index_;
    }

    public static final int TOKEN_START_FIELD_NUMBER = 2;
    private int tokenStart_;
    /**
     * <code>int32 token_start = 2;</code>
     */
    public int getTokenStart() {
      return tokenStart_;
    }

    public static final int TOKEN_END_FIELD_NUMBER = 3;
    private int tokenEnd_;
    /**
     * <code>int32 token_end = 3;</code>
     */
    public int getTokenEnd() {
      return tokenEnd_;
    }

    public static final int PARSE_FIELD_NUMBER = 4;
    private volatile java.lang.Object parse_;
    /**
     * <pre>
     * The sentence parse in penn tree bank format. Currently we only store
     * this for BLLIP parser.
     * </pre>
     *
     * <code>string parse = 4;</code>
     */
    public java.lang.String getParse() {
      java.lang.Object ref = parse_;
      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();
        parse_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * The sentence parse in penn tree bank format. Currently we only store
     * this for BLLIP parser.
     * </pre>
     *
     * <code>string parse = 4;</code>
     */
    public com.google.protobuf.ByteString
        getParseBytes() {
      java.lang.Object ref = parse_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        parse_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CONSTITUENT_FIELD_NUMBER = 5;
    private java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Constituent> constituent_;
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Constituent> getConstituentList() {
      return constituent_;
    }
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder> 
        getConstituentOrBuilderList() {
      return constituent_;
    }
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    public int getConstituentCount() {
      return constituent_.size();
    }
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence.Constituent getConstituent(int index) {
      return constituent_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder getConstituentOrBuilder(
        int index) {
      return constituent_.get(index);
    }

    public static final int DEPENDENCY_FIELD_NUMBER = 6;
    private java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Dependency> dependency_;
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Dependency> getDependencyList() {
      return dependency_;
    }
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder> 
        getDependencyOrBuilderList() {
      return dependency_;
    }
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    public int getDependencyCount() {
      return dependency_.size();
    }
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence.Dependency getDependency(int index) {
      return dependency_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder getDependencyOrBuilder(
        int index) {
      return dependency_.get(index);
    }

    public static final int DEPENDENCY_EXTRA_FIELD_NUMBER = 7;
    private java.util.List<edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra> dependencyExtra_;
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra> getDependencyExtraList() {
      return dependencyExtra_;
    }
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder> 
        getDependencyExtraOrBuilderList() {
      return dependencyExtra_;
    }
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    public int getDependencyExtraCount() {
      return dependencyExtra_.size();
    }
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra getDependencyExtra(int index) {
      return dependencyExtra_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder getDependencyExtraOrBuilder(
        int index) {
      return dependencyExtra_.get(index);
    }

    public static final int TOKEN_EXTRA_FIELD_NUMBER = 8;
    private java.util.List<edu.delaware.nlp.DocumentProto.Sentence.TokenExtra> tokenExtra_;
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.TokenExtra> getTokenExtraList() {
      return tokenExtra_;
    }
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder> 
        getTokenExtraOrBuilderList() {
      return tokenExtra_;
    }
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    public int getTokenExtraCount() {
      return tokenExtra_.size();
    }
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra getTokenExtra(int index) {
      return tokenExtra_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder getTokenExtraOrBuilder(
        int index) {
      return tokenExtra_.get(index);
    }

    public static final int CHAR_START_FIELD_NUMBER = 9;
    private int charStart_;
    /**
     * <code>int32 char_start = 9;</code>
     */
    public int getCharStart() {
      return charStart_;
    }

    public static final int CHAR_END_FIELD_NUMBER = 10;
    private int charEnd_;
    /**
     * <code>int32 char_end = 10;</code>
     */
    public int getCharEnd() {
      return charEnd_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (index_ != 0) {
        output.writeInt32(1, index_);
      }
      if (tokenStart_ != 0) {
        output.writeInt32(2, tokenStart_);
      }
      if (tokenEnd_ != 0) {
        output.writeInt32(3, tokenEnd_);
      }
      if (!getParseBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, parse_);
      }
      for (int i = 0; i < constituent_.size(); i++) {
        output.writeMessage(5, constituent_.get(i));
      }
      for (int i = 0; i < dependency_.size(); i++) {
        output.writeMessage(6, dependency_.get(i));
      }
      for (int i = 0; i < dependencyExtra_.size(); i++) {
        output.writeMessage(7, dependencyExtra_.get(i));
      }
      for (int i = 0; i < tokenExtra_.size(); i++) {
        output.writeMessage(8, tokenExtra_.get(i));
      }
      if (charStart_ != 0) {
        output.writeInt32(9, charStart_);
      }
      if (charEnd_ != 0) {
        output.writeInt32(10, charEnd_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (index_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, index_);
      }
      if (tokenStart_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, tokenStart_);
      }
      if (tokenEnd_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, tokenEnd_);
      }
      if (!getParseBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, parse_);
      }
      for (int i = 0; i < constituent_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, constituent_.get(i));
      }
      for (int i = 0; i < dependency_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, dependency_.get(i));
      }
      for (int i = 0; i < dependencyExtra_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, dependencyExtra_.get(i));
      }
      for (int i = 0; i < tokenExtra_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, tokenExtra_.get(i));
      }
      if (charStart_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, charStart_);
      }
      if (charEnd_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(10, charEnd_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof edu.delaware.nlp.DocumentProto.Sentence)) {
        return super.equals(obj);
      }
      edu.delaware.nlp.DocumentProto.Sentence other = (edu.delaware.nlp.DocumentProto.Sentence) obj;

      if (getIndex()
          != other.getIndex()) return false;
      if (getTokenStart()
          != other.getTokenStart()) return false;
      if (getTokenEnd()
          != other.getTokenEnd()) return false;
      if (!getParse()
          .equals(other.getParse())) return false;
      if (!getConstituentList()
          .equals(other.getConstituentList())) return false;
      if (!getDependencyList()
          .equals(other.getDependencyList())) return false;
      if (!getDependencyExtraList()
          .equals(other.getDependencyExtraList())) return false;
      if (!getTokenExtraList()
          .equals(other.getTokenExtraList())) return false;
      if (getCharStart()
          != other.getCharStart()) return false;
      if (getCharEnd()
          != other.getCharEnd()) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getIndex();
      hash = (37 * hash) + TOKEN_START_FIELD_NUMBER;
      hash = (53 * hash) + getTokenStart();
      hash = (37 * hash) + TOKEN_END_FIELD_NUMBER;
      hash = (53 * hash) + getTokenEnd();
      hash = (37 * hash) + PARSE_FIELD_NUMBER;
      hash = (53 * hash) + getParse().hashCode();
      if (getConstituentCount() > 0) {
        hash = (37 * hash) + CONSTITUENT_FIELD_NUMBER;
        hash = (53 * hash) + getConstituentList().hashCode();
      }
      if (getDependencyCount() > 0) {
        hash = (37 * hash) + DEPENDENCY_FIELD_NUMBER;
        hash = (53 * hash) + getDependencyList().hashCode();
      }
      if (getDependencyExtraCount() > 0) {
        hash = (37 * hash) + DEPENDENCY_EXTRA_FIELD_NUMBER;
        hash = (53 * hash) + getDependencyExtraList().hashCode();
      }
      if (getTokenExtraCount() > 0) {
        hash = (37 * hash) + TOKEN_EXTRA_FIELD_NUMBER;
        hash = (53 * hash) + getTokenExtraList().hashCode();
      }
      hash = (37 * hash) + CHAR_START_FIELD_NUMBER;
      hash = (53 * hash) + getCharStart();
      hash = (37 * hash) + CHAR_END_FIELD_NUMBER;
      hash = (53 * hash) + getCharEnd();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Sentence parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Sentence prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code udelnlp.Sentence}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:udelnlp.Sentence)
        edu.delaware.nlp.DocumentProto.SentenceOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Sentence.class, edu.delaware.nlp.DocumentProto.Sentence.Builder.class);
      }

      // Construct using edu.delaware.nlp.DocumentProto.Sentence.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getConstituentFieldBuilder();
          getDependencyFieldBuilder();
          getDependencyExtraFieldBuilder();
          getTokenExtraFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        index_ = 0;

        tokenStart_ = 0;

        tokenEnd_ = 0;

        parse_ = "";

        if (constituentBuilder_ == null) {
          constituent_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          constituentBuilder_.clear();
        }
        if (dependencyBuilder_ == null) {
          dependency_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          dependencyBuilder_.clear();
        }
        if (dependencyExtraBuilder_ == null) {
          dependencyExtra_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          dependencyExtraBuilder_.clear();
        }
        if (tokenExtraBuilder_ == null) {
          tokenExtra_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          tokenExtraBuilder_.clear();
        }
        charStart_ = 0;

        charEnd_ = 0;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Sentence_descriptor;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Sentence getDefaultInstanceForType() {
        return edu.delaware.nlp.DocumentProto.Sentence.getDefaultInstance();
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Sentence build() {
        edu.delaware.nlp.DocumentProto.Sentence result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Sentence buildPartial() {
        edu.delaware.nlp.DocumentProto.Sentence result = new edu.delaware.nlp.DocumentProto.Sentence(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.index_ = index_;
        result.tokenStart_ = tokenStart_;
        result.tokenEnd_ = tokenEnd_;
        result.parse_ = parse_;
        if (constituentBuilder_ == null) {
          if (((bitField0_ & 0x00000010) != 0)) {
            constituent_ = java.util.Collections.unmodifiableList(constituent_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.constituent_ = constituent_;
        } else {
          result.constituent_ = constituentBuilder_.build();
        }
        if (dependencyBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0)) {
            dependency_ = java.util.Collections.unmodifiableList(dependency_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.dependency_ = dependency_;
        } else {
          result.dependency_ = dependencyBuilder_.build();
        }
        if (dependencyExtraBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0)) {
            dependencyExtra_ = java.util.Collections.unmodifiableList(dependencyExtra_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.dependencyExtra_ = dependencyExtra_;
        } else {
          result.dependencyExtra_ = dependencyExtraBuilder_.build();
        }
        if (tokenExtraBuilder_ == null) {
          if (((bitField0_ & 0x00000080) != 0)) {
            tokenExtra_ = java.util.Collections.unmodifiableList(tokenExtra_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.tokenExtra_ = tokenExtra_;
        } else {
          result.tokenExtra_ = tokenExtraBuilder_.build();
        }
        result.charStart_ = charStart_;
        result.charEnd_ = charEnd_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof edu.delaware.nlp.DocumentProto.Sentence) {
          return mergeFrom((edu.delaware.nlp.DocumentProto.Sentence)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Sentence other) {
        if (other == edu.delaware.nlp.DocumentProto.Sentence.getDefaultInstance()) return this;
        if (other.getIndex() != 0) {
          setIndex(other.getIndex());
        }
        if (other.getTokenStart() != 0) {
          setTokenStart(other.getTokenStart());
        }
        if (other.getTokenEnd() != 0) {
          setTokenEnd(other.getTokenEnd());
        }
        if (!other.getParse().isEmpty()) {
          parse_ = other.parse_;
          onChanged();
        }
        if (constituentBuilder_ == null) {
          if (!other.constituent_.isEmpty()) {
            if (constituent_.isEmpty()) {
              constituent_ = other.constituent_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureConstituentIsMutable();
              constituent_.addAll(other.constituent_);
            }
            onChanged();
          }
        } else {
          if (!other.constituent_.isEmpty()) {
            if (constituentBuilder_.isEmpty()) {
              constituentBuilder_.dispose();
              constituentBuilder_ = null;
              constituent_ = other.constituent_;
              bitField0_ = (bitField0_ & ~0x00000010);
              constituentBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getConstituentFieldBuilder() : null;
            } else {
              constituentBuilder_.addAllMessages(other.constituent_);
            }
          }
        }
        if (dependencyBuilder_ == null) {
          if (!other.dependency_.isEmpty()) {
            if (dependency_.isEmpty()) {
              dependency_ = other.dependency_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureDependencyIsMutable();
              dependency_.addAll(other.dependency_);
            }
            onChanged();
          }
        } else {
          if (!other.dependency_.isEmpty()) {
            if (dependencyBuilder_.isEmpty()) {
              dependencyBuilder_.dispose();
              dependencyBuilder_ = null;
              dependency_ = other.dependency_;
              bitField0_ = (bitField0_ & ~0x00000020);
              dependencyBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDependencyFieldBuilder() : null;
            } else {
              dependencyBuilder_.addAllMessages(other.dependency_);
            }
          }
        }
        if (dependencyExtraBuilder_ == null) {
          if (!other.dependencyExtra_.isEmpty()) {
            if (dependencyExtra_.isEmpty()) {
              dependencyExtra_ = other.dependencyExtra_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureDependencyExtraIsMutable();
              dependencyExtra_.addAll(other.dependencyExtra_);
            }
            onChanged();
          }
        } else {
          if (!other.dependencyExtra_.isEmpty()) {
            if (dependencyExtraBuilder_.isEmpty()) {
              dependencyExtraBuilder_.dispose();
              dependencyExtraBuilder_ = null;
              dependencyExtra_ = other.dependencyExtra_;
              bitField0_ = (bitField0_ & ~0x00000040);
              dependencyExtraBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDependencyExtraFieldBuilder() : null;
            } else {
              dependencyExtraBuilder_.addAllMessages(other.dependencyExtra_);
            }
          }
        }
        if (tokenExtraBuilder_ == null) {
          if (!other.tokenExtra_.isEmpty()) {
            if (tokenExtra_.isEmpty()) {
              tokenExtra_ = other.tokenExtra_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureTokenExtraIsMutable();
              tokenExtra_.addAll(other.tokenExtra_);
            }
            onChanged();
          }
        } else {
          if (!other.tokenExtra_.isEmpty()) {
            if (tokenExtraBuilder_.isEmpty()) {
              tokenExtraBuilder_.dispose();
              tokenExtraBuilder_ = null;
              tokenExtra_ = other.tokenExtra_;
              bitField0_ = (bitField0_ & ~0x00000080);
              tokenExtraBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTokenExtraFieldBuilder() : null;
            } else {
              tokenExtraBuilder_.addAllMessages(other.tokenExtra_);
            }
          }
        }
        if (other.getCharStart() != 0) {
          setCharStart(other.getCharStart());
        }
        if (other.getCharEnd() != 0) {
          setCharEnd(other.getCharEnd());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        edu.delaware.nlp.DocumentProto.Sentence parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (edu.delaware.nlp.DocumentProto.Sentence) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int index_ ;
      /**
       * <code>int32 index = 1;</code>
       */
      public int getIndex() {
        return index_;
      }
      /**
       * <code>int32 index = 1;</code>
       */
      public Builder setIndex(int value) {
        
        index_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 index = 1;</code>
       */
      public Builder clearIndex() {
        
        index_ = 0;
        onChanged();
        return this;
      }

      private int tokenStart_ ;
      /**
       * <code>int32 token_start = 2;</code>
       */
      public int getTokenStart() {
        return tokenStart_;
      }
      /**
       * <code>int32 token_start = 2;</code>
       */
      public Builder setTokenStart(int value) {
        
        tokenStart_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 token_start = 2;</code>
       */
      public Builder clearTokenStart() {
        
        tokenStart_ = 0;
        onChanged();
        return this;
      }

      private int tokenEnd_ ;
      /**
       * <code>int32 token_end = 3;</code>
       */
      public int getTokenEnd() {
        return tokenEnd_;
      }
      /**
       * <code>int32 token_end = 3;</code>
       */
      public Builder setTokenEnd(int value) {
        
        tokenEnd_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 token_end = 3;</code>
       */
      public Builder clearTokenEnd() {
        
        tokenEnd_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object parse_ = "";
      /**
       * <pre>
       * The sentence parse in penn tree bank format. Currently we only store
       * this for BLLIP parser.
       * </pre>
       *
       * <code>string parse = 4;</code>
       */
      public java.lang.String getParse() {
        java.lang.Object ref = parse_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          parse_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The sentence parse in penn tree bank format. Currently we only store
       * this for BLLIP parser.
       * </pre>
       *
       * <code>string parse = 4;</code>
       */
      public com.google.protobuf.ByteString
          getParseBytes() {
        java.lang.Object ref = parse_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          parse_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The sentence parse in penn tree bank format. Currently we only store
       * this for BLLIP parser.
       * </pre>
       *
       * <code>string parse = 4;</code>
       */
      public Builder setParse(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        parse_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The sentence parse in penn tree bank format. Currently we only store
       * this for BLLIP parser.
       * </pre>
       *
       * <code>string parse = 4;</code>
       */
      public Builder clearParse() {
        
        parse_ = getDefaultInstance().getParse();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The sentence parse in penn tree bank format. Currently we only store
       * this for BLLIP parser.
       * </pre>
       *
       * <code>string parse = 4;</code>
       */
      public Builder setParseBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        parse_ = value;
        onChanged();
        return this;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Constituent> constituent_ =
        java.util.Collections.emptyList();
      private void ensureConstituentIsMutable() {
        if (!((bitField0_ & 0x00000010) != 0)) {
          constituent_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence.Constituent>(constituent_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence.Constituent, edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder, edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder> constituentBuilder_;

      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Constituent> getConstituentList() {
        if (constituentBuilder_ == null) {
          return java.util.Collections.unmodifiableList(constituent_);
        } else {
          return constituentBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public int getConstituentCount() {
        if (constituentBuilder_ == null) {
          return constituent_.size();
        } else {
          return constituentBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Constituent getConstituent(int index) {
        if (constituentBuilder_ == null) {
          return constituent_.get(index);
        } else {
          return constituentBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder setConstituent(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Constituent value) {
        if (constituentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConstituentIsMutable();
          constituent_.set(index, value);
          onChanged();
        } else {
          constituentBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder setConstituent(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder builderForValue) {
        if (constituentBuilder_ == null) {
          ensureConstituentIsMutable();
          constituent_.set(index, builderForValue.build());
          onChanged();
        } else {
          constituentBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder addConstituent(edu.delaware.nlp.DocumentProto.Sentence.Constituent value) {
        if (constituentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConstituentIsMutable();
          constituent_.add(value);
          onChanged();
        } else {
          constituentBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder addConstituent(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Constituent value) {
        if (constituentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConstituentIsMutable();
          constituent_.add(index, value);
          onChanged();
        } else {
          constituentBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder addConstituent(
          edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder builderForValue) {
        if (constituentBuilder_ == null) {
          ensureConstituentIsMutable();
          constituent_.add(builderForValue.build());
          onChanged();
        } else {
          constituentBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder addConstituent(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder builderForValue) {
        if (constituentBuilder_ == null) {
          ensureConstituentIsMutable();
          constituent_.add(index, builderForValue.build());
          onChanged();
        } else {
          constituentBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder addAllConstituent(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Sentence.Constituent> values) {
        if (constituentBuilder_ == null) {
          ensureConstituentIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, constituent_);
          onChanged();
        } else {
          constituentBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder clearConstituent() {
        if (constituentBuilder_ == null) {
          constituent_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          constituentBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public Builder removeConstituent(int index) {
        if (constituentBuilder_ == null) {
          ensureConstituentIsMutable();
          constituent_.remove(index);
          onChanged();
        } else {
          constituentBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder getConstituentBuilder(
          int index) {
        return getConstituentFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder getConstituentOrBuilder(
          int index) {
        if (constituentBuilder_ == null) {
          return constituent_.get(index);  } else {
          return constituentBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder> 
           getConstituentOrBuilderList() {
        if (constituentBuilder_ != null) {
          return constituentBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(constituent_);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder addConstituentBuilder() {
        return getConstituentFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Sentence.Constituent.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder addConstituentBuilder(
          int index) {
        return getConstituentFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Sentence.Constituent.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence.Constituent constituent = 5;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder> 
           getConstituentBuilderList() {
        return getConstituentFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence.Constituent, edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder, edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder> 
          getConstituentFieldBuilder() {
        if (constituentBuilder_ == null) {
          constituentBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Sentence.Constituent, edu.delaware.nlp.DocumentProto.Sentence.Constituent.Builder, edu.delaware.nlp.DocumentProto.Sentence.ConstituentOrBuilder>(
                  constituent_,
                  ((bitField0_ & 0x00000010) != 0),
                  getParentForChildren(),
                  isClean());
          constituent_ = null;
        }
        return constituentBuilder_;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Dependency> dependency_ =
        java.util.Collections.emptyList();
      private void ensureDependencyIsMutable() {
        if (!((bitField0_ & 0x00000020) != 0)) {
          dependency_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence.Dependency>(dependency_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence.Dependency, edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder, edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder> dependencyBuilder_;

      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Dependency> getDependencyList() {
        if (dependencyBuilder_ == null) {
          return java.util.Collections.unmodifiableList(dependency_);
        } else {
          return dependencyBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public int getDependencyCount() {
        if (dependencyBuilder_ == null) {
          return dependency_.size();
        } else {
          return dependencyBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Dependency getDependency(int index) {
        if (dependencyBuilder_ == null) {
          return dependency_.get(index);
        } else {
          return dependencyBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder setDependency(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Dependency value) {
        if (dependencyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDependencyIsMutable();
          dependency_.set(index, value);
          onChanged();
        } else {
          dependencyBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder setDependency(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder builderForValue) {
        if (dependencyBuilder_ == null) {
          ensureDependencyIsMutable();
          dependency_.set(index, builderForValue.build());
          onChanged();
        } else {
          dependencyBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder addDependency(edu.delaware.nlp.DocumentProto.Sentence.Dependency value) {
        if (dependencyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDependencyIsMutable();
          dependency_.add(value);
          onChanged();
        } else {
          dependencyBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder addDependency(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Dependency value) {
        if (dependencyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDependencyIsMutable();
          dependency_.add(index, value);
          onChanged();
        } else {
          dependencyBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder addDependency(
          edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder builderForValue) {
        if (dependencyBuilder_ == null) {
          ensureDependencyIsMutable();
          dependency_.add(builderForValue.build());
          onChanged();
        } else {
          dependencyBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder addDependency(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder builderForValue) {
        if (dependencyBuilder_ == null) {
          ensureDependencyIsMutable();
          dependency_.add(index, builderForValue.build());
          onChanged();
        } else {
          dependencyBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder addAllDependency(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Sentence.Dependency> values) {
        if (dependencyBuilder_ == null) {
          ensureDependencyIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, dependency_);
          onChanged();
        } else {
          dependencyBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder clearDependency() {
        if (dependencyBuilder_ == null) {
          dependency_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          dependencyBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public Builder removeDependency(int index) {
        if (dependencyBuilder_ == null) {
          ensureDependencyIsMutable();
          dependency_.remove(index);
          onChanged();
        } else {
          dependencyBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder getDependencyBuilder(
          int index) {
        return getDependencyFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder getDependencyOrBuilder(
          int index) {
        if (dependencyBuilder_ == null) {
          return dependency_.get(index);  } else {
          return dependencyBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder> 
           getDependencyOrBuilderList() {
        if (dependencyBuilder_ != null) {
          return dependencyBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(dependency_);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder addDependencyBuilder() {
        return getDependencyFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Sentence.Dependency.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder addDependencyBuilder(
          int index) {
        return getDependencyFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Sentence.Dependency.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence.Dependency dependency = 6;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder> 
           getDependencyBuilderList() {
        return getDependencyFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence.Dependency, edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder, edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder> 
          getDependencyFieldBuilder() {
        if (dependencyBuilder_ == null) {
          dependencyBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Sentence.Dependency, edu.delaware.nlp.DocumentProto.Sentence.Dependency.Builder, edu.delaware.nlp.DocumentProto.Sentence.DependencyOrBuilder>(
                  dependency_,
                  ((bitField0_ & 0x00000020) != 0),
                  getParentForChildren(),
                  isClean());
          dependency_ = null;
        }
        return dependencyBuilder_;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra> dependencyExtra_ =
        java.util.Collections.emptyList();
      private void ensureDependencyExtraIsMutable() {
        if (!((bitField0_ & 0x00000040) != 0)) {
          dependencyExtra_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra>(dependencyExtra_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder> dependencyExtraBuilder_;

      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra> getDependencyExtraList() {
        if (dependencyExtraBuilder_ == null) {
          return java.util.Collections.unmodifiableList(dependencyExtra_);
        } else {
          return dependencyExtraBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public int getDependencyExtraCount() {
        if (dependencyExtraBuilder_ == null) {
          return dependencyExtra_.size();
        } else {
          return dependencyExtraBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra getDependencyExtra(int index) {
        if (dependencyExtraBuilder_ == null) {
          return dependencyExtra_.get(index);
        } else {
          return dependencyExtraBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder setDependencyExtra(
          int index, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra value) {
        if (dependencyExtraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDependencyExtraIsMutable();
          dependencyExtra_.set(index, value);
          onChanged();
        } else {
          dependencyExtraBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder setDependencyExtra(
          int index, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder builderForValue) {
        if (dependencyExtraBuilder_ == null) {
          ensureDependencyExtraIsMutable();
          dependencyExtra_.set(index, builderForValue.build());
          onChanged();
        } else {
          dependencyExtraBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder addDependencyExtra(edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra value) {
        if (dependencyExtraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDependencyExtraIsMutable();
          dependencyExtra_.add(value);
          onChanged();
        } else {
          dependencyExtraBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder addDependencyExtra(
          int index, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra value) {
        if (dependencyExtraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDependencyExtraIsMutable();
          dependencyExtra_.add(index, value);
          onChanged();
        } else {
          dependencyExtraBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder addDependencyExtra(
          edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder builderForValue) {
        if (dependencyExtraBuilder_ == null) {
          ensureDependencyExtraIsMutable();
          dependencyExtra_.add(builderForValue.build());
          onChanged();
        } else {
          dependencyExtraBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder addDependencyExtra(
          int index, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder builderForValue) {
        if (dependencyExtraBuilder_ == null) {
          ensureDependencyExtraIsMutable();
          dependencyExtra_.add(index, builderForValue.build());
          onChanged();
        } else {
          dependencyExtraBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder addAllDependencyExtra(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra> values) {
        if (dependencyExtraBuilder_ == null) {
          ensureDependencyExtraIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, dependencyExtra_);
          onChanged();
        } else {
          dependencyExtraBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder clearDependencyExtra() {
        if (dependencyExtraBuilder_ == null) {
          dependencyExtra_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          dependencyExtraBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public Builder removeDependencyExtra(int index) {
        if (dependencyExtraBuilder_ == null) {
          ensureDependencyExtraIsMutable();
          dependencyExtra_.remove(index);
          onChanged();
        } else {
          dependencyExtraBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder getDependencyExtraBuilder(
          int index) {
        return getDependencyExtraFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder getDependencyExtraOrBuilder(
          int index) {
        if (dependencyExtraBuilder_ == null) {
          return dependencyExtra_.get(index);  } else {
          return dependencyExtraBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder> 
           getDependencyExtraOrBuilderList() {
        if (dependencyExtraBuilder_ != null) {
          return dependencyExtraBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(dependencyExtra_);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder addDependencyExtraBuilder() {
        return getDependencyExtraFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder addDependencyExtraBuilder(
          int index) {
        return getDependencyExtraFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence.DependencyExtra dependency_extra = 7;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder> 
           getDependencyExtraBuilderList() {
        return getDependencyExtraFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder> 
          getDependencyExtraFieldBuilder() {
        if (dependencyExtraBuilder_ == null) {
          dependencyExtraBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtra.Builder, edu.delaware.nlp.DocumentProto.Sentence.DependencyExtraOrBuilder>(
                  dependencyExtra_,
                  ((bitField0_ & 0x00000040) != 0),
                  getParentForChildren(),
                  isClean());
          dependencyExtra_ = null;
        }
        return dependencyExtraBuilder_;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Sentence.TokenExtra> tokenExtra_ =
        java.util.Collections.emptyList();
      private void ensureTokenExtraIsMutable() {
        if (!((bitField0_ & 0x00000080) != 0)) {
          tokenExtra_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence.TokenExtra>(tokenExtra_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence.TokenExtra, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder, edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder> tokenExtraBuilder_;

      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.TokenExtra> getTokenExtraList() {
        if (tokenExtraBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tokenExtra_);
        } else {
          return tokenExtraBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public int getTokenExtraCount() {
        if (tokenExtraBuilder_ == null) {
          return tokenExtra_.size();
        } else {
          return tokenExtraBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra getTokenExtra(int index) {
        if (tokenExtraBuilder_ == null) {
          return tokenExtra_.get(index);
        } else {
          return tokenExtraBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder setTokenExtra(
          int index, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra value) {
        if (tokenExtraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokenExtraIsMutable();
          tokenExtra_.set(index, value);
          onChanged();
        } else {
          tokenExtraBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder setTokenExtra(
          int index, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder builderForValue) {
        if (tokenExtraBuilder_ == null) {
          ensureTokenExtraIsMutable();
          tokenExtra_.set(index, builderForValue.build());
          onChanged();
        } else {
          tokenExtraBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder addTokenExtra(edu.delaware.nlp.DocumentProto.Sentence.TokenExtra value) {
        if (tokenExtraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokenExtraIsMutable();
          tokenExtra_.add(value);
          onChanged();
        } else {
          tokenExtraBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder addTokenExtra(
          int index, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra value) {
        if (tokenExtraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokenExtraIsMutable();
          tokenExtra_.add(index, value);
          onChanged();
        } else {
          tokenExtraBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder addTokenExtra(
          edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder builderForValue) {
        if (tokenExtraBuilder_ == null) {
          ensureTokenExtraIsMutable();
          tokenExtra_.add(builderForValue.build());
          onChanged();
        } else {
          tokenExtraBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder addTokenExtra(
          int index, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder builderForValue) {
        if (tokenExtraBuilder_ == null) {
          ensureTokenExtraIsMutable();
          tokenExtra_.add(index, builderForValue.build());
          onChanged();
        } else {
          tokenExtraBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder addAllTokenExtra(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Sentence.TokenExtra> values) {
        if (tokenExtraBuilder_ == null) {
          ensureTokenExtraIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, tokenExtra_);
          onChanged();
        } else {
          tokenExtraBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder clearTokenExtra() {
        if (tokenExtraBuilder_ == null) {
          tokenExtra_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          tokenExtraBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public Builder removeTokenExtra(int index) {
        if (tokenExtraBuilder_ == null) {
          ensureTokenExtraIsMutable();
          tokenExtra_.remove(index);
          onChanged();
        } else {
          tokenExtraBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder getTokenExtraBuilder(
          int index) {
        return getTokenExtraFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder getTokenExtraOrBuilder(
          int index) {
        if (tokenExtraBuilder_ == null) {
          return tokenExtra_.get(index);  } else {
          return tokenExtraBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder> 
           getTokenExtraOrBuilderList() {
        if (tokenExtraBuilder_ != null) {
          return tokenExtraBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tokenExtra_);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder addTokenExtraBuilder() {
        return getTokenExtraFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder addTokenExtraBuilder(
          int index) {
        return getTokenExtraFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence.TokenExtra token_extra = 8;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder> 
           getTokenExtraBuilderList() {
        return getTokenExtraFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence.TokenExtra, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder, edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder> 
          getTokenExtraFieldBuilder() {
        if (tokenExtraBuilder_ == null) {
          tokenExtraBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Sentence.TokenExtra, edu.delaware.nlp.DocumentProto.Sentence.TokenExtra.Builder, edu.delaware.nlp.DocumentProto.Sentence.TokenExtraOrBuilder>(
                  tokenExtra_,
                  ((bitField0_ & 0x00000080) != 0),
                  getParentForChildren(),
                  isClean());
          tokenExtra_ = null;
        }
        return tokenExtraBuilder_;
      }

      private int charStart_ ;
      /**
       * <code>int32 char_start = 9;</code>
       */
      public int getCharStart() {
        return charStart_;
      }
      /**
       * <code>int32 char_start = 9;</code>
       */
      public Builder setCharStart(int value) {
        
        charStart_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 char_start = 9;</code>
       */
      public Builder clearCharStart() {
        
        charStart_ = 0;
        onChanged();
        return this;
      }

      private int charEnd_ ;
      /**
       * <code>int32 char_end = 10;</code>
       */
      public int getCharEnd() {
        return charEnd_;
      }
      /**
       * <code>int32 char_end = 10;</code>
       */
      public Builder setCharEnd(int value) {
        
        charEnd_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 char_end = 10;</code>
       */
      public Builder clearCharEnd() {
        
        charEnd_ = 0;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:udelnlp.Sentence)
    }

    // @@protoc_insertion_point(class_scope:udelnlp.Sentence)
    private static final edu.delaware.nlp.DocumentProto.Sentence DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Sentence();
    }

    public static edu.delaware.nlp.DocumentProto.Sentence getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Sentence>
        PARSER = new com.google.protobuf.AbstractParser<Sentence>() {
      @java.lang.Override
      public Sentence parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Sentence(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Sentence> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public edu.delaware.nlp.DocumentProto.Sentence getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface EntityOrBuilder extends
      // @@protoc_insertion_point(interface_extends:udelnlp.Entity)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Document-level unique id.
     * </pre>
     *
     * <code>string duid = 1;</code>
     */
    java.lang.String getDuid();
    /**
     * <pre>
     * Document-level unique id.
     * </pre>
     *
     * <code>string duid = 1;</code>
     */
    com.google.protobuf.ByteString
        getDuidBytes();

    /**
     * <code>int32 char_start = 2;</code>
     */
    int getCharStart();

    /**
     * <code>int32 char_end = 3;</code>
     */
    int getCharEnd();

    /**
     * <code>int32 token_start = 4;</code>
     */
    int getTokenStart();

    /**
     * <code>int32 token_end = 5;</code>
     */
    int getTokenEnd();

    /**
     * <pre>
     *	enum EntityType {
     *		UNDEFINED_TYPE = 0;  // This would be the default value.
     *		GENE = 1;
     *		MIRNA = 2;
     *		DISEASE = 3;
     *		CHEMICAL = 4;
     *		DRUG = 5;
     *		SPECIES = 6;
     *		SITE = 7;
     *		MUTATION = 8;
     *		SUBCELLULAR_LOCATION = 9;
     *		TRIGGER = 10;
     *		TITLE = 11;
     *	}
     *	EntityType entity_type = 6;
     * </pre>
     *
     * <code>string entity_type = 6;</code>
     */
    java.lang.String getEntityType();
    /**
     * <pre>
     *	enum EntityType {
     *		UNDEFINED_TYPE = 0;  // This would be the default value.
     *		GENE = 1;
     *		MIRNA = 2;
     *		DISEASE = 3;
     *		CHEMICAL = 4;
     *		DRUG = 5;
     *		SPECIES = 6;
     *		SITE = 7;
     *		MUTATION = 8;
     *		SUBCELLULAR_LOCATION = 9;
     *		TRIGGER = 10;
     *		TITLE = 11;
     *	}
     *	EntityType entity_type = 6;
     * </pre>
     *
     * <code>string entity_type = 6;</code>
     */
    com.google.protobuf.ByteString
        getEntityTypeBytes();

    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Entity.EntityId> 
        getEntityIdList();
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    edu.delaware.nlp.DocumentProto.Entity.EntityId getEntityId(int index);
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    int getEntityIdCount();
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder> 
        getEntityIdOrBuilderList();
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder getEntityIdOrBuilder(
        int index);

    /**
     * <code>int32 sentence_index = 8;</code>
     */
    int getSentenceIndex();

    /**
     * <code>string source = 9;</code>
     */
    java.lang.String getSource();
    /**
     * <code>string source = 9;</code>
     */
    com.google.protobuf.ByteString
        getSourceBytes();
  }
  /**
   * Protobuf type {@code udelnlp.Entity}
   */
  public  static final class Entity extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:udelnlp.Entity)
      EntityOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Entity.newBuilder() to construct.
    private Entity(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Entity() {
      duid_ = "";
      entityType_ = "";
      entityId_ = java.util.Collections.emptyList();
      source_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Entity(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              duid_ = s;
              break;
            }
            case 16: {

              charStart_ = input.readInt32();
              break;
            }
            case 24: {

              charEnd_ = input.readInt32();
              break;
            }
            case 32: {

              tokenStart_ = input.readInt32();
              break;
            }
            case 40: {

              tokenEnd_ = input.readInt32();
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();

              entityType_ = s;
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) != 0)) {
                entityId_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Entity.EntityId>();
                mutable_bitField0_ |= 0x00000040;
              }
              entityId_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Entity.EntityId.parser(), extensionRegistry));
              break;
            }
            case 64: {

              sentenceIndex_ = input.readInt32();
              break;
            }
            case 74: {
              java.lang.String s = input.readStringRequireUtf8();

              source_ = s;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000040) != 0)) {
          entityId_ = java.util.Collections.unmodifiableList(entityId_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              edu.delaware.nlp.DocumentProto.Entity.class, edu.delaware.nlp.DocumentProto.Entity.Builder.class);
    }

    public interface EntityIdOrBuilder extends
        // @@protoc_insertion_point(interface_extends:udelnlp.Entity.EntityId)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>string source = 1;</code>
       */
      java.lang.String getSource();
      /**
       * <code>string source = 1;</code>
       */
      com.google.protobuf.ByteString
          getSourceBytes();

      /**
       * <code>string id_string = 2;</code>
       */
      java.lang.String getIdString();
      /**
       * <code>string id_string = 2;</code>
       */
      com.google.protobuf.ByteString
          getIdStringBytes();
    }
    /**
     * Protobuf type {@code udelnlp.Entity.EntityId}
     */
    public  static final class EntityId extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:udelnlp.Entity.EntityId)
        EntityIdOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use EntityId.newBuilder() to construct.
      private EntityId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private EntityId() {
        source_ = "";
        idString_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private EntityId(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        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;
              case 10: {
                java.lang.String s = input.readStringRequireUtf8();

                source_ = s;
                break;
              }
              case 18: {
                java.lang.String s = input.readStringRequireUtf8();

                idString_ = s;
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_EntityId_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_EntityId_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Entity.EntityId.class, edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder.class);
      }

      public static final int SOURCE_FIELD_NUMBER = 1;
      private volatile java.lang.Object source_;
      /**
       * <code>string source = 1;</code>
       */
      public java.lang.String getSource() {
        java.lang.Object ref = source_;
        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();
          source_ = s;
          return s;
        }
      }
      /**
       * <code>string source = 1;</code>
       */
      public com.google.protobuf.ByteString
          getSourceBytes() {
        java.lang.Object ref = source_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          source_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int ID_STRING_FIELD_NUMBER = 2;
      private volatile java.lang.Object idString_;
      /**
       * <code>string id_string = 2;</code>
       */
      public java.lang.String getIdString() {
        java.lang.Object ref = idString_;
        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();
          idString_ = s;
          return s;
        }
      }
      /**
       * <code>string id_string = 2;</code>
       */
      public com.google.protobuf.ByteString
          getIdStringBytes() {
        java.lang.Object ref = idString_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          idString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!getSourceBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, source_);
        }
        if (!getIdStringBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, idString_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (!getSourceBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, source_);
        }
        if (!getIdStringBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, idString_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof edu.delaware.nlp.DocumentProto.Entity.EntityId)) {
          return super.equals(obj);
        }
        edu.delaware.nlp.DocumentProto.Entity.EntityId other = (edu.delaware.nlp.DocumentProto.Entity.EntityId) obj;

        if (!getSource()
            .equals(other.getSource())) return false;
        if (!getIdString()
            .equals(other.getIdString())) return false;
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + SOURCE_FIELD_NUMBER;
        hash = (53 * hash) + getSource().hashCode();
        hash = (37 * hash) + ID_STRING_FIELD_NUMBER;
        hash = (53 * hash) + getIdString().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Entity.EntityId parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Entity.EntityId prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code udelnlp.Entity.EntityId}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:udelnlp.Entity.EntityId)
          edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_EntityId_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_EntityId_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  edu.delaware.nlp.DocumentProto.Entity.EntityId.class, edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder.class);
        }

        // Construct using edu.delaware.nlp.DocumentProto.Entity.EntityId.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          source_ = "";

          idString_ = "";

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_EntityId_descriptor;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Entity.EntityId getDefaultInstanceForType() {
          return edu.delaware.nlp.DocumentProto.Entity.EntityId.getDefaultInstance();
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Entity.EntityId build() {
          edu.delaware.nlp.DocumentProto.Entity.EntityId result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Entity.EntityId buildPartial() {
          edu.delaware.nlp.DocumentProto.Entity.EntityId result = new edu.delaware.nlp.DocumentProto.Entity.EntityId(this);
          result.source_ = source_;
          result.idString_ = idString_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof edu.delaware.nlp.DocumentProto.Entity.EntityId) {
            return mergeFrom((edu.delaware.nlp.DocumentProto.Entity.EntityId)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Entity.EntityId other) {
          if (other == edu.delaware.nlp.DocumentProto.Entity.EntityId.getDefaultInstance()) return this;
          if (!other.getSource().isEmpty()) {
            source_ = other.source_;
            onChanged();
          }
          if (!other.getIdString().isEmpty()) {
            idString_ = other.idString_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          edu.delaware.nlp.DocumentProto.Entity.EntityId parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (edu.delaware.nlp.DocumentProto.Entity.EntityId) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private java.lang.Object source_ = "";
        /**
         * <code>string source = 1;</code>
         */
        public java.lang.String getSource() {
          java.lang.Object ref = source_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            source_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string source = 1;</code>
         */
        public com.google.protobuf.ByteString
            getSourceBytes() {
          java.lang.Object ref = source_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            source_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string source = 1;</code>
         */
        public Builder setSource(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          source_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string source = 1;</code>
         */
        public Builder clearSource() {
          
          source_ = getDefaultInstance().getSource();
          onChanged();
          return this;
        }
        /**
         * <code>string source = 1;</code>
         */
        public Builder setSourceBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          source_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object idString_ = "";
        /**
         * <code>string id_string = 2;</code>
         */
        public java.lang.String getIdString() {
          java.lang.Object ref = idString_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            idString_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string id_string = 2;</code>
         */
        public com.google.protobuf.ByteString
            getIdStringBytes() {
          java.lang.Object ref = idString_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            idString_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string id_string = 2;</code>
         */
        public Builder setIdString(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          idString_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string id_string = 2;</code>
         */
        public Builder clearIdString() {
          
          idString_ = getDefaultInstance().getIdString();
          onChanged();
          return this;
        }
        /**
         * <code>string id_string = 2;</code>
         */
        public Builder setIdStringBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          idString_ = value;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:udelnlp.Entity.EntityId)
      }

      // @@protoc_insertion_point(class_scope:udelnlp.Entity.EntityId)
      private static final edu.delaware.nlp.DocumentProto.Entity.EntityId DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Entity.EntityId();
      }

      public static edu.delaware.nlp.DocumentProto.Entity.EntityId getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<EntityId>
          PARSER = new com.google.protobuf.AbstractParser<EntityId>() {
        @java.lang.Override
        public EntityId parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new EntityId(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<EntityId> parser() {
        return PARSER;
      }

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

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Entity.EntityId getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int DUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object duid_;
    /**
     * <pre>
     * Document-level unique id.
     * </pre>
     *
     * <code>string duid = 1;</code>
     */
    public java.lang.String getDuid() {
      java.lang.Object ref = duid_;
      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();
        duid_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Document-level unique id.
     * </pre>
     *
     * <code>string duid = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDuidBytes() {
      java.lang.Object ref = duid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        duid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CHAR_START_FIELD_NUMBER = 2;
    private int charStart_;
    /**
     * <code>int32 char_start = 2;</code>
     */
    public int getCharStart() {
      return charStart_;
    }

    public static final int CHAR_END_FIELD_NUMBER = 3;
    private int charEnd_;
    /**
     * <code>int32 char_end = 3;</code>
     */
    public int getCharEnd() {
      return charEnd_;
    }

    public static final int TOKEN_START_FIELD_NUMBER = 4;
    private int tokenStart_;
    /**
     * <code>int32 token_start = 4;</code>
     */
    public int getTokenStart() {
      return tokenStart_;
    }

    public static final int TOKEN_END_FIELD_NUMBER = 5;
    private int tokenEnd_;
    /**
     * <code>int32 token_end = 5;</code>
     */
    public int getTokenEnd() {
      return tokenEnd_;
    }

    public static final int ENTITY_TYPE_FIELD_NUMBER = 6;
    private volatile java.lang.Object entityType_;
    /**
     * <pre>
     *	enum EntityType {
     *		UNDEFINED_TYPE = 0;  // This would be the default value.
     *		GENE = 1;
     *		MIRNA = 2;
     *		DISEASE = 3;
     *		CHEMICAL = 4;
     *		DRUG = 5;
     *		SPECIES = 6;
     *		SITE = 7;
     *		MUTATION = 8;
     *		SUBCELLULAR_LOCATION = 9;
     *		TRIGGER = 10;
     *		TITLE = 11;
     *	}
     *	EntityType entity_type = 6;
     * </pre>
     *
     * <code>string entity_type = 6;</code>
     */
    public java.lang.String getEntityType() {
      java.lang.Object ref = entityType_;
      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();
        entityType_ = s;
        return s;
      }
    }
    /**
     * <pre>
     *	enum EntityType {
     *		UNDEFINED_TYPE = 0;  // This would be the default value.
     *		GENE = 1;
     *		MIRNA = 2;
     *		DISEASE = 3;
     *		CHEMICAL = 4;
     *		DRUG = 5;
     *		SPECIES = 6;
     *		SITE = 7;
     *		MUTATION = 8;
     *		SUBCELLULAR_LOCATION = 9;
     *		TRIGGER = 10;
     *		TITLE = 11;
     *	}
     *	EntityType entity_type = 6;
     * </pre>
     *
     * <code>string entity_type = 6;</code>
     */
    public com.google.protobuf.ByteString
        getEntityTypeBytes() {
      java.lang.Object ref = entityType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        entityType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ENTITY_ID_FIELD_NUMBER = 7;
    private java.util.List<edu.delaware.nlp.DocumentProto.Entity.EntityId> entityId_;
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Entity.EntityId> getEntityIdList() {
      return entityId_;
    }
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder> 
        getEntityIdOrBuilderList() {
      return entityId_;
    }
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    public int getEntityIdCount() {
      return entityId_.size();
    }
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    public edu.delaware.nlp.DocumentProto.Entity.EntityId getEntityId(int index) {
      return entityId_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
     */
    public edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder getEntityIdOrBuilder(
        int index) {
      return entityId_.get(index);
    }

    public static final int SENTENCE_INDEX_FIELD_NUMBER = 8;
    private int sentenceIndex_;
    /**
     * <code>int32 sentence_index = 8;</code>
     */
    public int getSentenceIndex() {
      return sentenceIndex_;
    }

    public static final int SOURCE_FIELD_NUMBER = 9;
    private volatile java.lang.Object source_;
    /**
     * <code>string source = 9;</code>
     */
    public java.lang.String getSource() {
      java.lang.Object ref = source_;
      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();
        source_ = s;
        return s;
      }
    }
    /**
     * <code>string source = 9;</code>
     */
    public com.google.protobuf.ByteString
        getSourceBytes() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        source_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getDuidBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, duid_);
      }
      if (charStart_ != 0) {
        output.writeInt32(2, charStart_);
      }
      if (charEnd_ != 0) {
        output.writeInt32(3, charEnd_);
      }
      if (tokenStart_ != 0) {
        output.writeInt32(4, tokenStart_);
      }
      if (tokenEnd_ != 0) {
        output.writeInt32(5, tokenEnd_);
      }
      if (!getEntityTypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, entityType_);
      }
      for (int i = 0; i < entityId_.size(); i++) {
        output.writeMessage(7, entityId_.get(i));
      }
      if (sentenceIndex_ != 0) {
        output.writeInt32(8, sentenceIndex_);
      }
      if (!getSourceBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, source_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDuidBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, duid_);
      }
      if (charStart_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, charStart_);
      }
      if (charEnd_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, charEnd_);
      }
      if (tokenStart_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, tokenStart_);
      }
      if (tokenEnd_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, tokenEnd_);
      }
      if (!getEntityTypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, entityType_);
      }
      for (int i = 0; i < entityId_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, entityId_.get(i));
      }
      if (sentenceIndex_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, sentenceIndex_);
      }
      if (!getSourceBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, source_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof edu.delaware.nlp.DocumentProto.Entity)) {
        return super.equals(obj);
      }
      edu.delaware.nlp.DocumentProto.Entity other = (edu.delaware.nlp.DocumentProto.Entity) obj;

      if (!getDuid()
          .equals(other.getDuid())) return false;
      if (getCharStart()
          != other.getCharStart()) return false;
      if (getCharEnd()
          != other.getCharEnd()) return false;
      if (getTokenStart()
          != other.getTokenStart()) return false;
      if (getTokenEnd()
          != other.getTokenEnd()) return false;
      if (!getEntityType()
          .equals(other.getEntityType())) return false;
      if (!getEntityIdList()
          .equals(other.getEntityIdList())) return false;
      if (getSentenceIndex()
          != other.getSentenceIndex()) return false;
      if (!getSource()
          .equals(other.getSource())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + DUID_FIELD_NUMBER;
      hash = (53 * hash) + getDuid().hashCode();
      hash = (37 * hash) + CHAR_START_FIELD_NUMBER;
      hash = (53 * hash) + getCharStart();
      hash = (37 * hash) + CHAR_END_FIELD_NUMBER;
      hash = (53 * hash) + getCharEnd();
      hash = (37 * hash) + TOKEN_START_FIELD_NUMBER;
      hash = (53 * hash) + getTokenStart();
      hash = (37 * hash) + TOKEN_END_FIELD_NUMBER;
      hash = (53 * hash) + getTokenEnd();
      hash = (37 * hash) + ENTITY_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getEntityType().hashCode();
      if (getEntityIdCount() > 0) {
        hash = (37 * hash) + ENTITY_ID_FIELD_NUMBER;
        hash = (53 * hash) + getEntityIdList().hashCode();
      }
      hash = (37 * hash) + SENTENCE_INDEX_FIELD_NUMBER;
      hash = (53 * hash) + getSentenceIndex();
      hash = (37 * hash) + SOURCE_FIELD_NUMBER;
      hash = (53 * hash) + getSource().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Entity parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Entity prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code udelnlp.Entity}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:udelnlp.Entity)
        edu.delaware.nlp.DocumentProto.EntityOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Entity.class, edu.delaware.nlp.DocumentProto.Entity.Builder.class);
      }

      // Construct using edu.delaware.nlp.DocumentProto.Entity.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getEntityIdFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        duid_ = "";

        charStart_ = 0;

        charEnd_ = 0;

        tokenStart_ = 0;

        tokenEnd_ = 0;

        entityType_ = "";

        if (entityIdBuilder_ == null) {
          entityId_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          entityIdBuilder_.clear();
        }
        sentenceIndex_ = 0;

        source_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Entity_descriptor;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Entity getDefaultInstanceForType() {
        return edu.delaware.nlp.DocumentProto.Entity.getDefaultInstance();
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Entity build() {
        edu.delaware.nlp.DocumentProto.Entity result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Entity buildPartial() {
        edu.delaware.nlp.DocumentProto.Entity result = new edu.delaware.nlp.DocumentProto.Entity(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.duid_ = duid_;
        result.charStart_ = charStart_;
        result.charEnd_ = charEnd_;
        result.tokenStart_ = tokenStart_;
        result.tokenEnd_ = tokenEnd_;
        result.entityType_ = entityType_;
        if (entityIdBuilder_ == null) {
          if (((bitField0_ & 0x00000040) != 0)) {
            entityId_ = java.util.Collections.unmodifiableList(entityId_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.entityId_ = entityId_;
        } else {
          result.entityId_ = entityIdBuilder_.build();
        }
        result.sentenceIndex_ = sentenceIndex_;
        result.source_ = source_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof edu.delaware.nlp.DocumentProto.Entity) {
          return mergeFrom((edu.delaware.nlp.DocumentProto.Entity)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Entity other) {
        if (other == edu.delaware.nlp.DocumentProto.Entity.getDefaultInstance()) return this;
        if (!other.getDuid().isEmpty()) {
          duid_ = other.duid_;
          onChanged();
        }
        if (other.getCharStart() != 0) {
          setCharStart(other.getCharStart());
        }
        if (other.getCharEnd() != 0) {
          setCharEnd(other.getCharEnd());
        }
        if (other.getTokenStart() != 0) {
          setTokenStart(other.getTokenStart());
        }
        if (other.getTokenEnd() != 0) {
          setTokenEnd(other.getTokenEnd());
        }
        if (!other.getEntityType().isEmpty()) {
          entityType_ = other.entityType_;
          onChanged();
        }
        if (entityIdBuilder_ == null) {
          if (!other.entityId_.isEmpty()) {
            if (entityId_.isEmpty()) {
              entityId_ = other.entityId_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureEntityIdIsMutable();
              entityId_.addAll(other.entityId_);
            }
            onChanged();
          }
        } else {
          if (!other.entityId_.isEmpty()) {
            if (entityIdBuilder_.isEmpty()) {
              entityIdBuilder_.dispose();
              entityIdBuilder_ = null;
              entityId_ = other.entityId_;
              bitField0_ = (bitField0_ & ~0x00000040);
              entityIdBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getEntityIdFieldBuilder() : null;
            } else {
              entityIdBuilder_.addAllMessages(other.entityId_);
            }
          }
        }
        if (other.getSentenceIndex() != 0) {
          setSentenceIndex(other.getSentenceIndex());
        }
        if (!other.getSource().isEmpty()) {
          source_ = other.source_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        edu.delaware.nlp.DocumentProto.Entity parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (edu.delaware.nlp.DocumentProto.Entity) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object duid_ = "";
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public java.lang.String getDuid() {
        java.lang.Object ref = duid_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          duid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDuidBytes() {
        java.lang.Object ref = duid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          duid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public Builder setDuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        duid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public Builder clearDuid() {
        
        duid_ = getDefaultInstance().getDuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public Builder setDuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        duid_ = value;
        onChanged();
        return this;
      }

      private int charStart_ ;
      /**
       * <code>int32 char_start = 2;</code>
       */
      public int getCharStart() {
        return charStart_;
      }
      /**
       * <code>int32 char_start = 2;</code>
       */
      public Builder setCharStart(int value) {
        
        charStart_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 char_start = 2;</code>
       */
      public Builder clearCharStart() {
        
        charStart_ = 0;
        onChanged();
        return this;
      }

      private int charEnd_ ;
      /**
       * <code>int32 char_end = 3;</code>
       */
      public int getCharEnd() {
        return charEnd_;
      }
      /**
       * <code>int32 char_end = 3;</code>
       */
      public Builder setCharEnd(int value) {
        
        charEnd_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 char_end = 3;</code>
       */
      public Builder clearCharEnd() {
        
        charEnd_ = 0;
        onChanged();
        return this;
      }

      private int tokenStart_ ;
      /**
       * <code>int32 token_start = 4;</code>
       */
      public int getTokenStart() {
        return tokenStart_;
      }
      /**
       * <code>int32 token_start = 4;</code>
       */
      public Builder setTokenStart(int value) {
        
        tokenStart_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 token_start = 4;</code>
       */
      public Builder clearTokenStart() {
        
        tokenStart_ = 0;
        onChanged();
        return this;
      }

      private int tokenEnd_ ;
      /**
       * <code>int32 token_end = 5;</code>
       */
      public int getTokenEnd() {
        return tokenEnd_;
      }
      /**
       * <code>int32 token_end = 5;</code>
       */
      public Builder setTokenEnd(int value) {
        
        tokenEnd_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 token_end = 5;</code>
       */
      public Builder clearTokenEnd() {
        
        tokenEnd_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object entityType_ = "";
      /**
       * <pre>
       *	enum EntityType {
       *		UNDEFINED_TYPE = 0;  // This would be the default value.
       *		GENE = 1;
       *		MIRNA = 2;
       *		DISEASE = 3;
       *		CHEMICAL = 4;
       *		DRUG = 5;
       *		SPECIES = 6;
       *		SITE = 7;
       *		MUTATION = 8;
       *		SUBCELLULAR_LOCATION = 9;
       *		TRIGGER = 10;
       *		TITLE = 11;
       *	}
       *	EntityType entity_type = 6;
       * </pre>
       *
       * <code>string entity_type = 6;</code>
       */
      public java.lang.String getEntityType() {
        java.lang.Object ref = entityType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          entityType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       *	enum EntityType {
       *		UNDEFINED_TYPE = 0;  // This would be the default value.
       *		GENE = 1;
       *		MIRNA = 2;
       *		DISEASE = 3;
       *		CHEMICAL = 4;
       *		DRUG = 5;
       *		SPECIES = 6;
       *		SITE = 7;
       *		MUTATION = 8;
       *		SUBCELLULAR_LOCATION = 9;
       *		TRIGGER = 10;
       *		TITLE = 11;
       *	}
       *	EntityType entity_type = 6;
       * </pre>
       *
       * <code>string entity_type = 6;</code>
       */
      public com.google.protobuf.ByteString
          getEntityTypeBytes() {
        java.lang.Object ref = entityType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          entityType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       *	enum EntityType {
       *		UNDEFINED_TYPE = 0;  // This would be the default value.
       *		GENE = 1;
       *		MIRNA = 2;
       *		DISEASE = 3;
       *		CHEMICAL = 4;
       *		DRUG = 5;
       *		SPECIES = 6;
       *		SITE = 7;
       *		MUTATION = 8;
       *		SUBCELLULAR_LOCATION = 9;
       *		TRIGGER = 10;
       *		TITLE = 11;
       *	}
       *	EntityType entity_type = 6;
       * </pre>
       *
       * <code>string entity_type = 6;</code>
       */
      public Builder setEntityType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        entityType_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *	enum EntityType {
       *		UNDEFINED_TYPE = 0;  // This would be the default value.
       *		GENE = 1;
       *		MIRNA = 2;
       *		DISEASE = 3;
       *		CHEMICAL = 4;
       *		DRUG = 5;
       *		SPECIES = 6;
       *		SITE = 7;
       *		MUTATION = 8;
       *		SUBCELLULAR_LOCATION = 9;
       *		TRIGGER = 10;
       *		TITLE = 11;
       *	}
       *	EntityType entity_type = 6;
       * </pre>
       *
       * <code>string entity_type = 6;</code>
       */
      public Builder clearEntityType() {
        
        entityType_ = getDefaultInstance().getEntityType();
        onChanged();
        return this;
      }
      /**
       * <pre>
       *	enum EntityType {
       *		UNDEFINED_TYPE = 0;  // This would be the default value.
       *		GENE = 1;
       *		MIRNA = 2;
       *		DISEASE = 3;
       *		CHEMICAL = 4;
       *		DRUG = 5;
       *		SPECIES = 6;
       *		SITE = 7;
       *		MUTATION = 8;
       *		SUBCELLULAR_LOCATION = 9;
       *		TRIGGER = 10;
       *		TITLE = 11;
       *	}
       *	EntityType entity_type = 6;
       * </pre>
       *
       * <code>string entity_type = 6;</code>
       */
      public Builder setEntityTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        entityType_ = value;
        onChanged();
        return this;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Entity.EntityId> entityId_ =
        java.util.Collections.emptyList();
      private void ensureEntityIdIsMutable() {
        if (!((bitField0_ & 0x00000040) != 0)) {
          entityId_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Entity.EntityId>(entityId_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Entity.EntityId, edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder, edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder> entityIdBuilder_;

      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Entity.EntityId> getEntityIdList() {
        if (entityIdBuilder_ == null) {
          return java.util.Collections.unmodifiableList(entityId_);
        } else {
          return entityIdBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public int getEntityIdCount() {
        if (entityIdBuilder_ == null) {
          return entityId_.size();
        } else {
          return entityIdBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Entity.EntityId getEntityId(int index) {
        if (entityIdBuilder_ == null) {
          return entityId_.get(index);
        } else {
          return entityIdBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder setEntityId(
          int index, edu.delaware.nlp.DocumentProto.Entity.EntityId value) {
        if (entityIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEntityIdIsMutable();
          entityId_.set(index, value);
          onChanged();
        } else {
          entityIdBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder setEntityId(
          int index, edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder builderForValue) {
        if (entityIdBuilder_ == null) {
          ensureEntityIdIsMutable();
          entityId_.set(index, builderForValue.build());
          onChanged();
        } else {
          entityIdBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder addEntityId(edu.delaware.nlp.DocumentProto.Entity.EntityId value) {
        if (entityIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEntityIdIsMutable();
          entityId_.add(value);
          onChanged();
        } else {
          entityIdBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder addEntityId(
          int index, edu.delaware.nlp.DocumentProto.Entity.EntityId value) {
        if (entityIdBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEntityIdIsMutable();
          entityId_.add(index, value);
          onChanged();
        } else {
          entityIdBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder addEntityId(
          edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder builderForValue) {
        if (entityIdBuilder_ == null) {
          ensureEntityIdIsMutable();
          entityId_.add(builderForValue.build());
          onChanged();
        } else {
          entityIdBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder addEntityId(
          int index, edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder builderForValue) {
        if (entityIdBuilder_ == null) {
          ensureEntityIdIsMutable();
          entityId_.add(index, builderForValue.build());
          onChanged();
        } else {
          entityIdBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder addAllEntityId(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Entity.EntityId> values) {
        if (entityIdBuilder_ == null) {
          ensureEntityIdIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, entityId_);
          onChanged();
        } else {
          entityIdBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder clearEntityId() {
        if (entityIdBuilder_ == null) {
          entityId_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          entityIdBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public Builder removeEntityId(int index) {
        if (entityIdBuilder_ == null) {
          ensureEntityIdIsMutable();
          entityId_.remove(index);
          onChanged();
        } else {
          entityIdBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder getEntityIdBuilder(
          int index) {
        return getEntityIdFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder getEntityIdOrBuilder(
          int index) {
        if (entityIdBuilder_ == null) {
          return entityId_.get(index);  } else {
          return entityIdBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder> 
           getEntityIdOrBuilderList() {
        if (entityIdBuilder_ != null) {
          return entityIdBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(entityId_);
        }
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder addEntityIdBuilder() {
        return getEntityIdFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Entity.EntityId.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder addEntityIdBuilder(
          int index) {
        return getEntityIdFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Entity.EntityId.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Entity.EntityId entity_id = 7;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder> 
           getEntityIdBuilderList() {
        return getEntityIdFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Entity.EntityId, edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder, edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder> 
          getEntityIdFieldBuilder() {
        if (entityIdBuilder_ == null) {
          entityIdBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Entity.EntityId, edu.delaware.nlp.DocumentProto.Entity.EntityId.Builder, edu.delaware.nlp.DocumentProto.Entity.EntityIdOrBuilder>(
                  entityId_,
                  ((bitField0_ & 0x00000040) != 0),
                  getParentForChildren(),
                  isClean());
          entityId_ = null;
        }
        return entityIdBuilder_;
      }

      private int sentenceIndex_ ;
      /**
       * <code>int32 sentence_index = 8;</code>
       */
      public int getSentenceIndex() {
        return sentenceIndex_;
      }
      /**
       * <code>int32 sentence_index = 8;</code>
       */
      public Builder setSentenceIndex(int value) {
        
        sentenceIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 sentence_index = 8;</code>
       */
      public Builder clearSentenceIndex() {
        
        sentenceIndex_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object source_ = "";
      /**
       * <code>string source = 9;</code>
       */
      public java.lang.String getSource() {
        java.lang.Object ref = source_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          source_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string source = 9;</code>
       */
      public com.google.protobuf.ByteString
          getSourceBytes() {
        java.lang.Object ref = source_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          source_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string source = 9;</code>
       */
      public Builder setSource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        source_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string source = 9;</code>
       */
      public Builder clearSource() {
        
        source_ = getDefaultInstance().getSource();
        onChanged();
        return this;
      }
      /**
       * <code>string source = 9;</code>
       */
      public Builder setSourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        source_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:udelnlp.Entity)
    }

    // @@protoc_insertion_point(class_scope:udelnlp.Entity)
    private static final edu.delaware.nlp.DocumentProto.Entity DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Entity();
    }

    public static edu.delaware.nlp.DocumentProto.Entity getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Entity>
        PARSER = new com.google.protobuf.AbstractParser<Entity>() {
      @java.lang.Override
      public Entity parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Entity(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Entity> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public edu.delaware.nlp.DocumentProto.Entity getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RelationOrBuilder extends
      // @@protoc_insertion_point(interface_extends:udelnlp.Relation)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Document-level unique id.
     * </pre>
     *
     * <code>string duid = 1;</code>
     */
    java.lang.String getDuid();
    /**
     * <pre>
     * Document-level unique id.
     * </pre>
     *
     * <code>string duid = 1;</code>
     */
    com.google.protobuf.ByteString
        getDuidBytes();

    /**
     * <code>string relation_type = 2;</code>
     */
    java.lang.String getRelationType();
    /**
     * <code>string relation_type = 2;</code>
     */
    com.google.protobuf.ByteString
        getRelationTypeBytes();

    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Relation.Argument> 
        getArgumentList();
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    edu.delaware.nlp.DocumentProto.Relation.Argument getArgument(int index);
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    int getArgumentCount();
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder> 
        getArgumentOrBuilderList();
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder getArgumentOrBuilder(
        int index);

    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Relation.Attribute> 
        getAttributeList();
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    edu.delaware.nlp.DocumentProto.Relation.Attribute getAttribute(int index);
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    int getAttributeCount();
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder> 
        getAttributeOrBuilderList();
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder getAttributeOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code udelnlp.Relation}
   */
  public  static final class Relation extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:udelnlp.Relation)
      RelationOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Relation.newBuilder() to construct.
    private Relation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Relation() {
      duid_ = "";
      relationType_ = "";
      argument_ = java.util.Collections.emptyList();
      attribute_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Relation(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              duid_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              relationType_ = s;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
                argument_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Relation.Argument>();
                mutable_bitField0_ |= 0x00000004;
              }
              argument_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Relation.Argument.parser(), extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
                attribute_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Relation.Attribute>();
                mutable_bitField0_ |= 0x00000008;
              }
              attribute_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Relation.Attribute.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) != 0)) {
          argument_ = java.util.Collections.unmodifiableList(argument_);
        }
        if (((mutable_bitField0_ & 0x00000008) != 0)) {
          attribute_ = java.util.Collections.unmodifiableList(attribute_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              edu.delaware.nlp.DocumentProto.Relation.class, edu.delaware.nlp.DocumentProto.Relation.Builder.class);
    }

    public interface ArgumentOrBuilder extends
        // @@protoc_insertion_point(interface_extends:udelnlp.Relation.Argument)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>string role = 1;</code>
       */
      java.lang.String getRole();
      /**
       * <code>string role = 1;</code>
       */
      com.google.protobuf.ByteString
          getRoleBytes();

      /**
       * <code>string entity_duid = 2;</code>
       */
      java.lang.String getEntityDuid();
      /**
       * <code>string entity_duid = 2;</code>
       */
      com.google.protobuf.ByteString
          getEntityDuidBytes();
    }
    /**
     * Protobuf type {@code udelnlp.Relation.Argument}
     */
    public  static final class Argument extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:udelnlp.Relation.Argument)
        ArgumentOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Argument.newBuilder() to construct.
      private Argument(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Argument() {
        role_ = "";
        entityDuid_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private Argument(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        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;
              case 10: {
                java.lang.String s = input.readStringRequireUtf8();

                role_ = s;
                break;
              }
              case 18: {
                java.lang.String s = input.readStringRequireUtf8();

                entityDuid_ = s;
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Argument_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Argument_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Relation.Argument.class, edu.delaware.nlp.DocumentProto.Relation.Argument.Builder.class);
      }

      public static final int ROLE_FIELD_NUMBER = 1;
      private volatile java.lang.Object role_;
      /**
       * <code>string role = 1;</code>
       */
      public java.lang.String getRole() {
        java.lang.Object ref = role_;
        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();
          role_ = s;
          return s;
        }
      }
      /**
       * <code>string role = 1;</code>
       */
      public com.google.protobuf.ByteString
          getRoleBytes() {
        java.lang.Object ref = role_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          role_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int ENTITY_DUID_FIELD_NUMBER = 2;
      private volatile java.lang.Object entityDuid_;
      /**
       * <code>string entity_duid = 2;</code>
       */
      public java.lang.String getEntityDuid() {
        java.lang.Object ref = entityDuid_;
        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();
          entityDuid_ = s;
          return s;
        }
      }
      /**
       * <code>string entity_duid = 2;</code>
       */
      public com.google.protobuf.ByteString
          getEntityDuidBytes() {
        java.lang.Object ref = entityDuid_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          entityDuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!getRoleBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, role_);
        }
        if (!getEntityDuidBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, entityDuid_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (!getRoleBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, role_);
        }
        if (!getEntityDuidBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, entityDuid_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof edu.delaware.nlp.DocumentProto.Relation.Argument)) {
          return super.equals(obj);
        }
        edu.delaware.nlp.DocumentProto.Relation.Argument other = (edu.delaware.nlp.DocumentProto.Relation.Argument) obj;

        if (!getRole()
            .equals(other.getRole())) return false;
        if (!getEntityDuid()
            .equals(other.getEntityDuid())) return false;
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + ROLE_FIELD_NUMBER;
        hash = (53 * hash) + getRole().hashCode();
        hash = (37 * hash) + ENTITY_DUID_FIELD_NUMBER;
        hash = (53 * hash) + getEntityDuid().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Argument parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Relation.Argument prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code udelnlp.Relation.Argument}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:udelnlp.Relation.Argument)
          edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Argument_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Argument_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  edu.delaware.nlp.DocumentProto.Relation.Argument.class, edu.delaware.nlp.DocumentProto.Relation.Argument.Builder.class);
        }

        // Construct using edu.delaware.nlp.DocumentProto.Relation.Argument.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          role_ = "";

          entityDuid_ = "";

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Argument_descriptor;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Relation.Argument getDefaultInstanceForType() {
          return edu.delaware.nlp.DocumentProto.Relation.Argument.getDefaultInstance();
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Relation.Argument build() {
          edu.delaware.nlp.DocumentProto.Relation.Argument result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Relation.Argument buildPartial() {
          edu.delaware.nlp.DocumentProto.Relation.Argument result = new edu.delaware.nlp.DocumentProto.Relation.Argument(this);
          result.role_ = role_;
          result.entityDuid_ = entityDuid_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof edu.delaware.nlp.DocumentProto.Relation.Argument) {
            return mergeFrom((edu.delaware.nlp.DocumentProto.Relation.Argument)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Relation.Argument other) {
          if (other == edu.delaware.nlp.DocumentProto.Relation.Argument.getDefaultInstance()) return this;
          if (!other.getRole().isEmpty()) {
            role_ = other.role_;
            onChanged();
          }
          if (!other.getEntityDuid().isEmpty()) {
            entityDuid_ = other.entityDuid_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          edu.delaware.nlp.DocumentProto.Relation.Argument parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (edu.delaware.nlp.DocumentProto.Relation.Argument) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private java.lang.Object role_ = "";
        /**
         * <code>string role = 1;</code>
         */
        public java.lang.String getRole() {
          java.lang.Object ref = role_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            role_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string role = 1;</code>
         */
        public com.google.protobuf.ByteString
            getRoleBytes() {
          java.lang.Object ref = role_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            role_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string role = 1;</code>
         */
        public Builder setRole(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          role_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string role = 1;</code>
         */
        public Builder clearRole() {
          
          role_ = getDefaultInstance().getRole();
          onChanged();
          return this;
        }
        /**
         * <code>string role = 1;</code>
         */
        public Builder setRoleBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          role_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object entityDuid_ = "";
        /**
         * <code>string entity_duid = 2;</code>
         */
        public java.lang.String getEntityDuid() {
          java.lang.Object ref = entityDuid_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            entityDuid_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string entity_duid = 2;</code>
         */
        public com.google.protobuf.ByteString
            getEntityDuidBytes() {
          java.lang.Object ref = entityDuid_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            entityDuid_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string entity_duid = 2;</code>
         */
        public Builder setEntityDuid(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          entityDuid_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string entity_duid = 2;</code>
         */
        public Builder clearEntityDuid() {
          
          entityDuid_ = getDefaultInstance().getEntityDuid();
          onChanged();
          return this;
        }
        /**
         * <code>string entity_duid = 2;</code>
         */
        public Builder setEntityDuidBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          entityDuid_ = value;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:udelnlp.Relation.Argument)
      }

      // @@protoc_insertion_point(class_scope:udelnlp.Relation.Argument)
      private static final edu.delaware.nlp.DocumentProto.Relation.Argument DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Relation.Argument();
      }

      public static edu.delaware.nlp.DocumentProto.Relation.Argument getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Argument>
          PARSER = new com.google.protobuf.AbstractParser<Argument>() {
        @java.lang.Override
        public Argument parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Argument(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<Argument> parser() {
        return PARSER;
      }

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

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Relation.Argument getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface AttributeOrBuilder extends
        // @@protoc_insertion_point(interface_extends:udelnlp.Relation.Attribute)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>string key = 1;</code>
       */
      java.lang.String getKey();
      /**
       * <code>string key = 1;</code>
       */
      com.google.protobuf.ByteString
          getKeyBytes();

      /**
       * <code>string value = 2;</code>
       */
      java.lang.String getValue();
      /**
       * <code>string value = 2;</code>
       */
      com.google.protobuf.ByteString
          getValueBytes();
    }
    /**
     * Protobuf type {@code udelnlp.Relation.Attribute}
     */
    public  static final class Attribute extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:udelnlp.Relation.Attribute)
        AttributeOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Attribute.newBuilder() to construct.
      private Attribute(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Attribute() {
        key_ = "";
        value_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private Attribute(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        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;
              case 10: {
                java.lang.String s = input.readStringRequireUtf8();

                key_ = s;
                break;
              }
              case 18: {
                java.lang.String s = input.readStringRequireUtf8();

                value_ = s;
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Attribute_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Attribute_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Relation.Attribute.class, edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder.class);
      }

      public static final int KEY_FIELD_NUMBER = 1;
      private volatile java.lang.Object key_;
      /**
       * <code>string key = 1;</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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();
          key_ = s;
          return s;
        }
      }
      /**
       * <code>string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int VALUE_FIELD_NUMBER = 2;
      private volatile java.lang.Object value_;
      /**
       * <code>string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        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();
          value_ = s;
          return s;
        }
      }
      /**
       * <code>string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!getKeyBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
        }
        if (!getValueBytes().isEmpty()) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (!getKeyBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
        }
        if (!getValueBytes().isEmpty()) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof edu.delaware.nlp.DocumentProto.Relation.Attribute)) {
          return super.equals(obj);
        }
        edu.delaware.nlp.DocumentProto.Relation.Attribute other = (edu.delaware.nlp.DocumentProto.Relation.Attribute) obj;

        if (!getKey()
            .equals(other.getKey())) return false;
        if (!getValue()
            .equals(other.getValue())) return false;
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + getValue().hashCode();
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static edu.delaware.nlp.DocumentProto.Relation.Attribute parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Relation.Attribute prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code udelnlp.Relation.Attribute}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:udelnlp.Relation.Attribute)
          edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Attribute_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Attribute_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  edu.delaware.nlp.DocumentProto.Relation.Attribute.class, edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder.class);
        }

        // Construct using edu.delaware.nlp.DocumentProto.Relation.Attribute.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          key_ = "";

          value_ = "";

          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_Attribute_descriptor;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Relation.Attribute getDefaultInstanceForType() {
          return edu.delaware.nlp.DocumentProto.Relation.Attribute.getDefaultInstance();
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Relation.Attribute build() {
          edu.delaware.nlp.DocumentProto.Relation.Attribute result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public edu.delaware.nlp.DocumentProto.Relation.Attribute buildPartial() {
          edu.delaware.nlp.DocumentProto.Relation.Attribute result = new edu.delaware.nlp.DocumentProto.Relation.Attribute(this);
          result.key_ = key_;
          result.value_ = value_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof edu.delaware.nlp.DocumentProto.Relation.Attribute) {
            return mergeFrom((edu.delaware.nlp.DocumentProto.Relation.Attribute)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Relation.Attribute other) {
          if (other == edu.delaware.nlp.DocumentProto.Relation.Attribute.getDefaultInstance()) return this;
          if (!other.getKey().isEmpty()) {
            key_ = other.key_;
            onChanged();
          }
          if (!other.getValue().isEmpty()) {
            value_ = other.value_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }

        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          edu.delaware.nlp.DocumentProto.Relation.Attribute parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (edu.delaware.nlp.DocumentProto.Relation.Attribute) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }

        private java.lang.Object key_ = "";
        /**
         * <code>string key = 1;</code>
         */
        public java.lang.String getKey() {
          java.lang.Object ref = key_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            key_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string key = 1;</code>
         */
        public com.google.protobuf.ByteString
            getKeyBytes() {
          java.lang.Object ref = key_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            key_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string key = 1;</code>
         */
        public Builder setKey(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          key_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string key = 1;</code>
         */
        public Builder clearKey() {
          
          key_ = getDefaultInstance().getKey();
          onChanged();
          return this;
        }
        /**
         * <code>string key = 1;</code>
         */
        public Builder setKeyBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          key_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object value_ = "";
        /**
         * <code>string value = 2;</code>
         */
        public java.lang.String getValue() {
          java.lang.Object ref = value_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            value_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>string value = 2;</code>
         */
        public com.google.protobuf.ByteString
            getValueBytes() {
          java.lang.Object ref = value_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            value_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>string value = 2;</code>
         */
        public Builder setValue(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          value_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>string value = 2;</code>
         */
        public Builder clearValue() {
          
          value_ = getDefaultInstance().getValue();
          onChanged();
          return this;
        }
        /**
         * <code>string value = 2;</code>
         */
        public Builder setValueBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          value_ = value;
          onChanged();
          return this;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }


        // @@protoc_insertion_point(builder_scope:udelnlp.Relation.Attribute)
      }

      // @@protoc_insertion_point(class_scope:udelnlp.Relation.Attribute)
      private static final edu.delaware.nlp.DocumentProto.Relation.Attribute DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Relation.Attribute();
      }

      public static edu.delaware.nlp.DocumentProto.Relation.Attribute getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      private static final com.google.protobuf.Parser<Attribute>
          PARSER = new com.google.protobuf.AbstractParser<Attribute>() {
        @java.lang.Override
        public Attribute parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Attribute(input, extensionRegistry);
        }
      };

      public static com.google.protobuf.Parser<Attribute> parser() {
        return PARSER;
      }

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

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Relation.Attribute getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int DUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object duid_;
    /**
     * <pre>
     * Document-level unique id.
     * </pre>
     *
     * <code>string duid = 1;</code>
     */
    public java.lang.String getDuid() {
      java.lang.Object ref = duid_;
      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();
        duid_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Document-level unique id.
     * </pre>
     *
     * <code>string duid = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDuidBytes() {
      java.lang.Object ref = duid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        duid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RELATION_TYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object relationType_;
    /**
     * <code>string relation_type = 2;</code>
     */
    public java.lang.String getRelationType() {
      java.lang.Object ref = relationType_;
      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();
        relationType_ = s;
        return s;
      }
    }
    /**
     * <code>string relation_type = 2;</code>
     */
    public com.google.protobuf.ByteString
        getRelationTypeBytes() {
      java.lang.Object ref = relationType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        relationType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ARGUMENT_FIELD_NUMBER = 3;
    private java.util.List<edu.delaware.nlp.DocumentProto.Relation.Argument> argument_;
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Relation.Argument> getArgumentList() {
      return argument_;
    }
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder> 
        getArgumentOrBuilderList() {
      return argument_;
    }
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    public int getArgumentCount() {
      return argument_.size();
    }
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    public edu.delaware.nlp.DocumentProto.Relation.Argument getArgument(int index) {
      return argument_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
     */
    public edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder getArgumentOrBuilder(
        int index) {
      return argument_.get(index);
    }

    public static final int ATTRIBUTE_FIELD_NUMBER = 4;
    private java.util.List<edu.delaware.nlp.DocumentProto.Relation.Attribute> attribute_;
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Relation.Attribute> getAttributeList() {
      return attribute_;
    }
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder> 
        getAttributeOrBuilderList() {
      return attribute_;
    }
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    public int getAttributeCount() {
      return attribute_.size();
    }
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    public edu.delaware.nlp.DocumentProto.Relation.Attribute getAttribute(int index) {
      return attribute_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
     */
    public edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder getAttributeOrBuilder(
        int index) {
      return attribute_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getDuidBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, duid_);
      }
      if (!getRelationTypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, relationType_);
      }
      for (int i = 0; i < argument_.size(); i++) {
        output.writeMessage(3, argument_.get(i));
      }
      for (int i = 0; i < attribute_.size(); i++) {
        output.writeMessage(4, attribute_.get(i));
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDuidBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, duid_);
      }
      if (!getRelationTypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, relationType_);
      }
      for (int i = 0; i < argument_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, argument_.get(i));
      }
      for (int i = 0; i < attribute_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, attribute_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof edu.delaware.nlp.DocumentProto.Relation)) {
        return super.equals(obj);
      }
      edu.delaware.nlp.DocumentProto.Relation other = (edu.delaware.nlp.DocumentProto.Relation) obj;

      if (!getDuid()
          .equals(other.getDuid())) return false;
      if (!getRelationType()
          .equals(other.getRelationType())) return false;
      if (!getArgumentList()
          .equals(other.getArgumentList())) return false;
      if (!getAttributeList()
          .equals(other.getAttributeList())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + DUID_FIELD_NUMBER;
      hash = (53 * hash) + getDuid().hashCode();
      hash = (37 * hash) + RELATION_TYPE_FIELD_NUMBER;
      hash = (53 * hash) + getRelationType().hashCode();
      if (getArgumentCount() > 0) {
        hash = (37 * hash) + ARGUMENT_FIELD_NUMBER;
        hash = (53 * hash) + getArgumentList().hashCode();
      }
      if (getAttributeCount() > 0) {
        hash = (37 * hash) + ATTRIBUTE_FIELD_NUMBER;
        hash = (53 * hash) + getAttributeList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Relation parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Relation prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code udelnlp.Relation}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:udelnlp.Relation)
        edu.delaware.nlp.DocumentProto.RelationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Relation.class, edu.delaware.nlp.DocumentProto.Relation.Builder.class);
      }

      // Construct using edu.delaware.nlp.DocumentProto.Relation.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getArgumentFieldBuilder();
          getAttributeFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        duid_ = "";

        relationType_ = "";

        if (argumentBuilder_ == null) {
          argument_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          argumentBuilder_.clear();
        }
        if (attributeBuilder_ == null) {
          attribute_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          attributeBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Relation_descriptor;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Relation getDefaultInstanceForType() {
        return edu.delaware.nlp.DocumentProto.Relation.getDefaultInstance();
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Relation build() {
        edu.delaware.nlp.DocumentProto.Relation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Relation buildPartial() {
        edu.delaware.nlp.DocumentProto.Relation result = new edu.delaware.nlp.DocumentProto.Relation(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.duid_ = duid_;
        result.relationType_ = relationType_;
        if (argumentBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            argument_ = java.util.Collections.unmodifiableList(argument_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.argument_ = argument_;
        } else {
          result.argument_ = argumentBuilder_.build();
        }
        if (attributeBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            attribute_ = java.util.Collections.unmodifiableList(attribute_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.attribute_ = attribute_;
        } else {
          result.attribute_ = attributeBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof edu.delaware.nlp.DocumentProto.Relation) {
          return mergeFrom((edu.delaware.nlp.DocumentProto.Relation)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Relation other) {
        if (other == edu.delaware.nlp.DocumentProto.Relation.getDefaultInstance()) return this;
        if (!other.getDuid().isEmpty()) {
          duid_ = other.duid_;
          onChanged();
        }
        if (!other.getRelationType().isEmpty()) {
          relationType_ = other.relationType_;
          onChanged();
        }
        if (argumentBuilder_ == null) {
          if (!other.argument_.isEmpty()) {
            if (argument_.isEmpty()) {
              argument_ = other.argument_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureArgumentIsMutable();
              argument_.addAll(other.argument_);
            }
            onChanged();
          }
        } else {
          if (!other.argument_.isEmpty()) {
            if (argumentBuilder_.isEmpty()) {
              argumentBuilder_.dispose();
              argumentBuilder_ = null;
              argument_ = other.argument_;
              bitField0_ = (bitField0_ & ~0x00000004);
              argumentBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getArgumentFieldBuilder() : null;
            } else {
              argumentBuilder_.addAllMessages(other.argument_);
            }
          }
        }
        if (attributeBuilder_ == null) {
          if (!other.attribute_.isEmpty()) {
            if (attribute_.isEmpty()) {
              attribute_ = other.attribute_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureAttributeIsMutable();
              attribute_.addAll(other.attribute_);
            }
            onChanged();
          }
        } else {
          if (!other.attribute_.isEmpty()) {
            if (attributeBuilder_.isEmpty()) {
              attributeBuilder_.dispose();
              attributeBuilder_ = null;
              attribute_ = other.attribute_;
              bitField0_ = (bitField0_ & ~0x00000008);
              attributeBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAttributeFieldBuilder() : null;
            } else {
              attributeBuilder_.addAllMessages(other.attribute_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        edu.delaware.nlp.DocumentProto.Relation parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (edu.delaware.nlp.DocumentProto.Relation) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object duid_ = "";
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public java.lang.String getDuid() {
        java.lang.Object ref = duid_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          duid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDuidBytes() {
        java.lang.Object ref = duid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          duid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public Builder setDuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        duid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public Builder clearDuid() {
        
        duid_ = getDefaultInstance().getDuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Document-level unique id.
       * </pre>
       *
       * <code>string duid = 1;</code>
       */
      public Builder setDuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        duid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object relationType_ = "";
      /**
       * <code>string relation_type = 2;</code>
       */
      public java.lang.String getRelationType() {
        java.lang.Object ref = relationType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          relationType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string relation_type = 2;</code>
       */
      public com.google.protobuf.ByteString
          getRelationTypeBytes() {
        java.lang.Object ref = relationType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          relationType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string relation_type = 2;</code>
       */
      public Builder setRelationType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        relationType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string relation_type = 2;</code>
       */
      public Builder clearRelationType() {
        
        relationType_ = getDefaultInstance().getRelationType();
        onChanged();
        return this;
      }
      /**
       * <code>string relation_type = 2;</code>
       */
      public Builder setRelationTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        relationType_ = value;
        onChanged();
        return this;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Relation.Argument> argument_ =
        java.util.Collections.emptyList();
      private void ensureArgumentIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          argument_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Relation.Argument>(argument_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Relation.Argument, edu.delaware.nlp.DocumentProto.Relation.Argument.Builder, edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder> argumentBuilder_;

      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Relation.Argument> getArgumentList() {
        if (argumentBuilder_ == null) {
          return java.util.Collections.unmodifiableList(argument_);
        } else {
          return argumentBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public int getArgumentCount() {
        if (argumentBuilder_ == null) {
          return argument_.size();
        } else {
          return argumentBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.Argument getArgument(int index) {
        if (argumentBuilder_ == null) {
          return argument_.get(index);
        } else {
          return argumentBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder setArgument(
          int index, edu.delaware.nlp.DocumentProto.Relation.Argument value) {
        if (argumentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArgumentIsMutable();
          argument_.set(index, value);
          onChanged();
        } else {
          argumentBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder setArgument(
          int index, edu.delaware.nlp.DocumentProto.Relation.Argument.Builder builderForValue) {
        if (argumentBuilder_ == null) {
          ensureArgumentIsMutable();
          argument_.set(index, builderForValue.build());
          onChanged();
        } else {
          argumentBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder addArgument(edu.delaware.nlp.DocumentProto.Relation.Argument value) {
        if (argumentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArgumentIsMutable();
          argument_.add(value);
          onChanged();
        } else {
          argumentBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder addArgument(
          int index, edu.delaware.nlp.DocumentProto.Relation.Argument value) {
        if (argumentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArgumentIsMutable();
          argument_.add(index, value);
          onChanged();
        } else {
          argumentBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder addArgument(
          edu.delaware.nlp.DocumentProto.Relation.Argument.Builder builderForValue) {
        if (argumentBuilder_ == null) {
          ensureArgumentIsMutable();
          argument_.add(builderForValue.build());
          onChanged();
        } else {
          argumentBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder addArgument(
          int index, edu.delaware.nlp.DocumentProto.Relation.Argument.Builder builderForValue) {
        if (argumentBuilder_ == null) {
          ensureArgumentIsMutable();
          argument_.add(index, builderForValue.build());
          onChanged();
        } else {
          argumentBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder addAllArgument(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Relation.Argument> values) {
        if (argumentBuilder_ == null) {
          ensureArgumentIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, argument_);
          onChanged();
        } else {
          argumentBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder clearArgument() {
        if (argumentBuilder_ == null) {
          argument_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          argumentBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public Builder removeArgument(int index) {
        if (argumentBuilder_ == null) {
          ensureArgumentIsMutable();
          argument_.remove(index);
          onChanged();
        } else {
          argumentBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.Argument.Builder getArgumentBuilder(
          int index) {
        return getArgumentFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder getArgumentOrBuilder(
          int index) {
        if (argumentBuilder_ == null) {
          return argument_.get(index);  } else {
          return argumentBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder> 
           getArgumentOrBuilderList() {
        if (argumentBuilder_ != null) {
          return argumentBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(argument_);
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.Argument.Builder addArgumentBuilder() {
        return getArgumentFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Relation.Argument.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.Argument.Builder addArgumentBuilder(
          int index) {
        return getArgumentFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Relation.Argument.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Relation.Argument argument = 3;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Relation.Argument.Builder> 
           getArgumentBuilderList() {
        return getArgumentFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Relation.Argument, edu.delaware.nlp.DocumentProto.Relation.Argument.Builder, edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder> 
          getArgumentFieldBuilder() {
        if (argumentBuilder_ == null) {
          argumentBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Relation.Argument, edu.delaware.nlp.DocumentProto.Relation.Argument.Builder, edu.delaware.nlp.DocumentProto.Relation.ArgumentOrBuilder>(
                  argument_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          argument_ = null;
        }
        return argumentBuilder_;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Relation.Attribute> attribute_ =
        java.util.Collections.emptyList();
      private void ensureAttributeIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          attribute_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Relation.Attribute>(attribute_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Relation.Attribute, edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder, edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder> attributeBuilder_;

      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Relation.Attribute> getAttributeList() {
        if (attributeBuilder_ == null) {
          return java.util.Collections.unmodifiableList(attribute_);
        } else {
          return attributeBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public int getAttributeCount() {
        if (attributeBuilder_ == null) {
          return attribute_.size();
        } else {
          return attributeBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.Attribute getAttribute(int index) {
        if (attributeBuilder_ == null) {
          return attribute_.get(index);
        } else {
          return attributeBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder setAttribute(
          int index, edu.delaware.nlp.DocumentProto.Relation.Attribute value) {
        if (attributeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttributeIsMutable();
          attribute_.set(index, value);
          onChanged();
        } else {
          attributeBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder setAttribute(
          int index, edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder builderForValue) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          attribute_.set(index, builderForValue.build());
          onChanged();
        } else {
          attributeBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder addAttribute(edu.delaware.nlp.DocumentProto.Relation.Attribute value) {
        if (attributeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttributeIsMutable();
          attribute_.add(value);
          onChanged();
        } else {
          attributeBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder addAttribute(
          int index, edu.delaware.nlp.DocumentProto.Relation.Attribute value) {
        if (attributeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAttributeIsMutable();
          attribute_.add(index, value);
          onChanged();
        } else {
          attributeBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder addAttribute(
          edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder builderForValue) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          attribute_.add(builderForValue.build());
          onChanged();
        } else {
          attributeBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder addAttribute(
          int index, edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder builderForValue) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          attribute_.add(index, builderForValue.build());
          onChanged();
        } else {
          attributeBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder addAllAttribute(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Relation.Attribute> values) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, attribute_);
          onChanged();
        } else {
          attributeBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder clearAttribute() {
        if (attributeBuilder_ == null) {
          attribute_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          attributeBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public Builder removeAttribute(int index) {
        if (attributeBuilder_ == null) {
          ensureAttributeIsMutable();
          attribute_.remove(index);
          onChanged();
        } else {
          attributeBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder getAttributeBuilder(
          int index) {
        return getAttributeFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder getAttributeOrBuilder(
          int index) {
        if (attributeBuilder_ == null) {
          return attribute_.get(index);  } else {
          return attributeBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder> 
           getAttributeOrBuilderList() {
        if (attributeBuilder_ != null) {
          return attributeBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(attribute_);
        }
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder addAttributeBuilder() {
        return getAttributeFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Relation.Attribute.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder addAttributeBuilder(
          int index) {
        return getAttributeFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Relation.Attribute.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Relation.Attribute attribute = 4;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder> 
           getAttributeBuilderList() {
        return getAttributeFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Relation.Attribute, edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder, edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder> 
          getAttributeFieldBuilder() {
        if (attributeBuilder_ == null) {
          attributeBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Relation.Attribute, edu.delaware.nlp.DocumentProto.Relation.Attribute.Builder, edu.delaware.nlp.DocumentProto.Relation.AttributeOrBuilder>(
                  attribute_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          attribute_ = null;
        }
        return attributeBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:udelnlp.Relation)
    }

    // @@protoc_insertion_point(class_scope:udelnlp.Relation)
    private static final edu.delaware.nlp.DocumentProto.Relation DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Relation();
    }

    public static edu.delaware.nlp.DocumentProto.Relation getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Relation>
        PARSER = new com.google.protobuf.AbstractParser<Relation>() {
      @java.lang.Override
      public Relation parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Relation(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Relation> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public edu.delaware.nlp.DocumentProto.Relation getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DocumentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:udelnlp.Document)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string doc_id = 1;</code>
     */
    java.lang.String getDocId();
    /**
     * <code>string doc_id = 1;</code>
     */
    com.google.protobuf.ByteString
        getDocIdBytes();

    /**
     * <code>string text = 2;</code>
     */
    java.lang.String getText();
    /**
     * <code>string text = 2;</code>
     */
    com.google.protobuf.ByteString
        getTextBytes();

    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Token> 
        getTokenList();
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    edu.delaware.nlp.DocumentProto.Token getToken(int index);
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    int getTokenCount();
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.TokenOrBuilder> 
        getTokenOrBuilderList();
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    edu.delaware.nlp.DocumentProto.TokenOrBuilder getTokenOrBuilder(
        int index);

    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    java.util.List<edu.delaware.nlp.DocumentProto.Sentence> 
        getSentenceList();
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    edu.delaware.nlp.DocumentProto.Sentence getSentence(int index);
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    int getSentenceCount();
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    java.util.List<? extends edu.delaware.nlp.DocumentProto.SentenceOrBuilder> 
        getSentenceOrBuilderList();
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    edu.delaware.nlp.DocumentProto.SentenceOrBuilder getSentenceOrBuilder(
        int index);

    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */
    int getEntityCount();
    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */
    boolean containsEntity(
        java.lang.String key);
    /**
     * Use {@link #getEntityMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>
    getEntity();
    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */
    java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>
    getEntityMap();
    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */

    edu.delaware.nlp.DocumentProto.Entity getEntityOrDefault(
        java.lang.String key,
        edu.delaware.nlp.DocumentProto.Entity defaultValue);
    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */

    edu.delaware.nlp.DocumentProto.Entity getEntityOrThrow(
        java.lang.String key);

    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */
    int getRelationCount();
    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */
    boolean containsRelation(
        java.lang.String key);
    /**
     * Use {@link #getRelationMap()} instead.
     */
    @java.lang.Deprecated
    java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>
    getRelation();
    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */
    java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>
    getRelationMap();
    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */

    edu.delaware.nlp.DocumentProto.Relation getRelationOrDefault(
        java.lang.String key,
        edu.delaware.nlp.DocumentProto.Relation defaultValue);
    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */

    edu.delaware.nlp.DocumentProto.Relation getRelationOrThrow(
        java.lang.String key);
  }
  /**
   * Protobuf type {@code udelnlp.Document}
   */
  public  static final class Document extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:udelnlp.Document)
      DocumentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Document.newBuilder() to construct.
    private Document(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Document() {
      docId_ = "";
      text_ = "";
      token_ = java.util.Collections.emptyList();
      sentence_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Document(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      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;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();

              docId_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();

              text_ = s;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
                token_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Token>();
                mutable_bitField0_ |= 0x00000004;
              }
              token_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Token.parser(), extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
                sentence_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence>();
                mutable_bitField0_ |= 0x00000008;
              }
              sentence_.add(
                  input.readMessage(edu.delaware.nlp.DocumentProto.Sentence.parser(), extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) != 0)) {
                entity_ = com.google.protobuf.MapField.newMapField(
                    EntityDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000010;
              }
              com.google.protobuf.MapEntry<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>
              entity__ = input.readMessage(
                  EntityDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              entity_.getMutableMap().put(
                  entity__.getKey(), entity__.getValue());
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) != 0)) {
                relation_ = com.google.protobuf.MapField.newMapField(
                    RelationDefaultEntryHolder.defaultEntry);
                mutable_bitField0_ |= 0x00000020;
              }
              com.google.protobuf.MapEntry<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>
              relation__ = input.readMessage(
                  RelationDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
              relation_.getMutableMap().put(
                  relation__.getKey(), relation__.getValue());
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) != 0)) {
          token_ = java.util.Collections.unmodifiableList(token_);
        }
        if (((mutable_bitField0_ & 0x00000008) != 0)) {
          sentence_ = java.util.Collections.unmodifiableList(sentence_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Document_descriptor;
    }

    @SuppressWarnings({"rawtypes"})
    @java.lang.Override
    protected com.google.protobuf.MapField internalGetMapField(
        int number) {
      switch (number) {
        case 5:
          return internalGetEntity();
        case 6:
          return internalGetRelation();
        default:
          throw new RuntimeException(
              "Invalid map field number: " + number);
      }
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Document_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              edu.delaware.nlp.DocumentProto.Document.class, edu.delaware.nlp.DocumentProto.Document.Builder.class);
    }

    private int bitField0_;
    public static final int DOC_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object docId_;
    /**
     * <code>string doc_id = 1;</code>
     */
    public java.lang.String getDocId() {
      java.lang.Object ref = docId_;
      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();
        docId_ = s;
        return s;
      }
    }
    /**
     * <code>string doc_id = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDocIdBytes() {
      java.lang.Object ref = docId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        docId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TEXT_FIELD_NUMBER = 2;
    private volatile java.lang.Object text_;
    /**
     * <code>string text = 2;</code>
     */
    public java.lang.String getText() {
      java.lang.Object ref = text_;
      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();
        text_ = s;
        return s;
      }
    }
    /**
     * <code>string text = 2;</code>
     */
    public com.google.protobuf.ByteString
        getTextBytes() {
      java.lang.Object ref = text_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        text_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TOKEN_FIELD_NUMBER = 3;
    private java.util.List<edu.delaware.nlp.DocumentProto.Token> token_;
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Token> getTokenList() {
      return token_;
    }
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.TokenOrBuilder> 
        getTokenOrBuilderList() {
      return token_;
    }
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    public int getTokenCount() {
      return token_.size();
    }
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    public edu.delaware.nlp.DocumentProto.Token getToken(int index) {
      return token_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Token token = 3;</code>
     */
    public edu.delaware.nlp.DocumentProto.TokenOrBuilder getTokenOrBuilder(
        int index) {
      return token_.get(index);
    }

    public static final int SENTENCE_FIELD_NUMBER = 4;
    private java.util.List<edu.delaware.nlp.DocumentProto.Sentence> sentence_;
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    public java.util.List<edu.delaware.nlp.DocumentProto.Sentence> getSentenceList() {
      return sentence_;
    }
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    public java.util.List<? extends edu.delaware.nlp.DocumentProto.SentenceOrBuilder> 
        getSentenceOrBuilderList() {
      return sentence_;
    }
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    public int getSentenceCount() {
      return sentence_.size();
    }
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    public edu.delaware.nlp.DocumentProto.Sentence getSentence(int index) {
      return sentence_.get(index);
    }
    /**
     * <code>repeated .udelnlp.Sentence sentence = 4;</code>
     */
    public edu.delaware.nlp.DocumentProto.SentenceOrBuilder getSentenceOrBuilder(
        int index) {
      return sentence_.get(index);
    }

    public static final int ENTITY_FIELD_NUMBER = 5;
    private static final class EntityDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, edu.delaware.nlp.DocumentProto.Entity> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>newDefaultInstance(
                  edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Document_EntityEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  edu.delaware.nlp.DocumentProto.Entity.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.String, edu.delaware.nlp.DocumentProto.Entity> entity_;
    private com.google.protobuf.MapField<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>
    internalGetEntity() {
      if (entity_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            EntityDefaultEntryHolder.defaultEntry);
      }
      return entity_;
    }

    public int getEntityCount() {
      return internalGetEntity().getMap().size();
    }
    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */

    public boolean containsEntity(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetEntity().getMap().containsKey(key);
    }
    /**
     * Use {@link #getEntityMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> getEntity() {
      return getEntityMap();
    }
    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */

    public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> getEntityMap() {
      return internalGetEntity().getMap();
    }
    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */

    public edu.delaware.nlp.DocumentProto.Entity getEntityOrDefault(
        java.lang.String key,
        edu.delaware.nlp.DocumentProto.Entity defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> map =
          internalGetEntity().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <pre>
     * Use map and duid to locate entity or relation instead of using a list.
     * This is for convinience deletion.
     * </pre>
     *
     * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
     */

    public edu.delaware.nlp.DocumentProto.Entity getEntityOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> map =
          internalGetEntity().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    public static final int RELATION_FIELD_NUMBER = 6;
    private static final class RelationDefaultEntryHolder {
      static final com.google.protobuf.MapEntry<
          java.lang.String, edu.delaware.nlp.DocumentProto.Relation> defaultEntry =
              com.google.protobuf.MapEntry
              .<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>newDefaultInstance(
                  edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Document_RelationEntry_descriptor, 
                  com.google.protobuf.WireFormat.FieldType.STRING,
                  "",
                  com.google.protobuf.WireFormat.FieldType.MESSAGE,
                  edu.delaware.nlp.DocumentProto.Relation.getDefaultInstance());
    }
    private com.google.protobuf.MapField<
        java.lang.String, edu.delaware.nlp.DocumentProto.Relation> relation_;
    private com.google.protobuf.MapField<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>
    internalGetRelation() {
      if (relation_ == null) {
        return com.google.protobuf.MapField.emptyMapField(
            RelationDefaultEntryHolder.defaultEntry);
      }
      return relation_;
    }

    public int getRelationCount() {
      return internalGetRelation().getMap().size();
    }
    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */

    public boolean containsRelation(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      return internalGetRelation().getMap().containsKey(key);
    }
    /**
     * Use {@link #getRelationMap()} instead.
     */
    @java.lang.Deprecated
    public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> getRelation() {
      return getRelationMap();
    }
    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */

    public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> getRelationMap() {
      return internalGetRelation().getMap();
    }
    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */

    public edu.delaware.nlp.DocumentProto.Relation getRelationOrDefault(
        java.lang.String key,
        edu.delaware.nlp.DocumentProto.Relation defaultValue) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> map =
          internalGetRelation().getMap();
      return map.containsKey(key) ? map.get(key) : defaultValue;
    }
    /**
     * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
     */

    public edu.delaware.nlp.DocumentProto.Relation getRelationOrThrow(
        java.lang.String key) {
      if (key == null) { throw new java.lang.NullPointerException(); }
      java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> map =
          internalGetRelation().getMap();
      if (!map.containsKey(key)) {
        throw new java.lang.IllegalArgumentException();
      }
      return map.get(key);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!getDocIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, docId_);
      }
      if (!getTextBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, text_);
      }
      for (int i = 0; i < token_.size(); i++) {
        output.writeMessage(3, token_.get(i));
      }
      for (int i = 0; i < sentence_.size(); i++) {
        output.writeMessage(4, sentence_.get(i));
      }
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetEntity(),
          EntityDefaultEntryHolder.defaultEntry,
          5);
      com.google.protobuf.GeneratedMessageV3
        .serializeStringMapTo(
          output,
          internalGetRelation(),
          RelationDefaultEntryHolder.defaultEntry,
          6);
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!getDocIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, docId_);
      }
      if (!getTextBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, text_);
      }
      for (int i = 0; i < token_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, token_.get(i));
      }
      for (int i = 0; i < sentence_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, sentence_.get(i));
      }
      for (java.util.Map.Entry<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> entry
           : internalGetEntity().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>
        entity__ = EntityDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, entity__);
      }
      for (java.util.Map.Entry<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> entry
           : internalGetRelation().getMap().entrySet()) {
        com.google.protobuf.MapEntry<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>
        relation__ = RelationDefaultEntryHolder.defaultEntry.newBuilderForType()
            .setKey(entry.getKey())
            .setValue(entry.getValue())
            .build();
        size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(6, relation__);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof edu.delaware.nlp.DocumentProto.Document)) {
        return super.equals(obj);
      }
      edu.delaware.nlp.DocumentProto.Document other = (edu.delaware.nlp.DocumentProto.Document) obj;

      if (!getDocId()
          .equals(other.getDocId())) return false;
      if (!getText()
          .equals(other.getText())) return false;
      if (!getTokenList()
          .equals(other.getTokenList())) return false;
      if (!getSentenceList()
          .equals(other.getSentenceList())) return false;
      if (!internalGetEntity().equals(
          other.internalGetEntity())) return false;
      if (!internalGetRelation().equals(
          other.internalGetRelation())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + DOC_ID_FIELD_NUMBER;
      hash = (53 * hash) + getDocId().hashCode();
      hash = (37 * hash) + TEXT_FIELD_NUMBER;
      hash = (53 * hash) + getText().hashCode();
      if (getTokenCount() > 0) {
        hash = (37 * hash) + TOKEN_FIELD_NUMBER;
        hash = (53 * hash) + getTokenList().hashCode();
      }
      if (getSentenceCount() > 0) {
        hash = (37 * hash) + SENTENCE_FIELD_NUMBER;
        hash = (53 * hash) + getSentenceList().hashCode();
      }
      if (!internalGetEntity().getMap().isEmpty()) {
        hash = (37 * hash) + ENTITY_FIELD_NUMBER;
        hash = (53 * hash) + internalGetEntity().hashCode();
      }
      if (!internalGetRelation().getMap().isEmpty()) {
        hash = (37 * hash) + RELATION_FIELD_NUMBER;
        hash = (53 * hash) + internalGetRelation().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static edu.delaware.nlp.DocumentProto.Document parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static edu.delaware.nlp.DocumentProto.Document parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(edu.delaware.nlp.DocumentProto.Document prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code udelnlp.Document}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:udelnlp.Document)
        edu.delaware.nlp.DocumentProto.DocumentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Document_descriptor;
      }

      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMapField(
          int number) {
        switch (number) {
          case 5:
            return internalGetEntity();
          case 6:
            return internalGetRelation();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @SuppressWarnings({"rawtypes"})
      protected com.google.protobuf.MapField internalGetMutableMapField(
          int number) {
        switch (number) {
          case 5:
            return internalGetMutableEntity();
          case 6:
            return internalGetMutableRelation();
          default:
            throw new RuntimeException(
                "Invalid map field number: " + number);
        }
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Document_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                edu.delaware.nlp.DocumentProto.Document.class, edu.delaware.nlp.DocumentProto.Document.Builder.class);
      }

      // Construct using edu.delaware.nlp.DocumentProto.Document.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTokenFieldBuilder();
          getSentenceFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        docId_ = "";

        text_ = "";

        if (tokenBuilder_ == null) {
          token_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          tokenBuilder_.clear();
        }
        if (sentenceBuilder_ == null) {
          sentence_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          sentenceBuilder_.clear();
        }
        internalGetMutableEntity().clear();
        internalGetMutableRelation().clear();
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return edu.delaware.nlp.DocumentProto.internal_static_udelnlp_Document_descriptor;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Document getDefaultInstanceForType() {
        return edu.delaware.nlp.DocumentProto.Document.getDefaultInstance();
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Document build() {
        edu.delaware.nlp.DocumentProto.Document result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public edu.delaware.nlp.DocumentProto.Document buildPartial() {
        edu.delaware.nlp.DocumentProto.Document result = new edu.delaware.nlp.DocumentProto.Document(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        result.docId_ = docId_;
        result.text_ = text_;
        if (tokenBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            token_ = java.util.Collections.unmodifiableList(token_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.token_ = token_;
        } else {
          result.token_ = tokenBuilder_.build();
        }
        if (sentenceBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            sentence_ = java.util.Collections.unmodifiableList(sentence_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.sentence_ = sentence_;
        } else {
          result.sentence_ = sentenceBuilder_.build();
        }
        result.entity_ = internalGetEntity();
        result.entity_.makeImmutable();
        result.relation_ = internalGetRelation();
        result.relation_.makeImmutable();
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof edu.delaware.nlp.DocumentProto.Document) {
          return mergeFrom((edu.delaware.nlp.DocumentProto.Document)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(edu.delaware.nlp.DocumentProto.Document other) {
        if (other == edu.delaware.nlp.DocumentProto.Document.getDefaultInstance()) return this;
        if (!other.getDocId().isEmpty()) {
          docId_ = other.docId_;
          onChanged();
        }
        if (!other.getText().isEmpty()) {
          text_ = other.text_;
          onChanged();
        }
        if (tokenBuilder_ == null) {
          if (!other.token_.isEmpty()) {
            if (token_.isEmpty()) {
              token_ = other.token_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureTokenIsMutable();
              token_.addAll(other.token_);
            }
            onChanged();
          }
        } else {
          if (!other.token_.isEmpty()) {
            if (tokenBuilder_.isEmpty()) {
              tokenBuilder_.dispose();
              tokenBuilder_ = null;
              token_ = other.token_;
              bitField0_ = (bitField0_ & ~0x00000004);
              tokenBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTokenFieldBuilder() : null;
            } else {
              tokenBuilder_.addAllMessages(other.token_);
            }
          }
        }
        if (sentenceBuilder_ == null) {
          if (!other.sentence_.isEmpty()) {
            if (sentence_.isEmpty()) {
              sentence_ = other.sentence_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureSentenceIsMutable();
              sentence_.addAll(other.sentence_);
            }
            onChanged();
          }
        } else {
          if (!other.sentence_.isEmpty()) {
            if (sentenceBuilder_.isEmpty()) {
              sentenceBuilder_.dispose();
              sentenceBuilder_ = null;
              sentence_ = other.sentence_;
              bitField0_ = (bitField0_ & ~0x00000008);
              sentenceBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSentenceFieldBuilder() : null;
            } else {
              sentenceBuilder_.addAllMessages(other.sentence_);
            }
          }
        }
        internalGetMutableEntity().mergeFrom(
            other.internalGetEntity());
        internalGetMutableRelation().mergeFrom(
            other.internalGetRelation());
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        edu.delaware.nlp.DocumentProto.Document parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (edu.delaware.nlp.DocumentProto.Document) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object docId_ = "";
      /**
       * <code>string doc_id = 1;</code>
       */
      public java.lang.String getDocId() {
        java.lang.Object ref = docId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          docId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string doc_id = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDocIdBytes() {
        java.lang.Object ref = docId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          docId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string doc_id = 1;</code>
       */
      public Builder setDocId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        docId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string doc_id = 1;</code>
       */
      public Builder clearDocId() {
        
        docId_ = getDefaultInstance().getDocId();
        onChanged();
        return this;
      }
      /**
       * <code>string doc_id = 1;</code>
       */
      public Builder setDocIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        docId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object text_ = "";
      /**
       * <code>string text = 2;</code>
       */
      public java.lang.String getText() {
        java.lang.Object ref = text_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          text_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string text = 2;</code>
       */
      public com.google.protobuf.ByteString
          getTextBytes() {
        java.lang.Object ref = text_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          text_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string text = 2;</code>
       */
      public Builder setText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        text_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string text = 2;</code>
       */
      public Builder clearText() {
        
        text_ = getDefaultInstance().getText();
        onChanged();
        return this;
      }
      /**
       * <code>string text = 2;</code>
       */
      public Builder setTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        text_ = value;
        onChanged();
        return this;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Token> token_ =
        java.util.Collections.emptyList();
      private void ensureTokenIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          token_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Token>(token_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Token, edu.delaware.nlp.DocumentProto.Token.Builder, edu.delaware.nlp.DocumentProto.TokenOrBuilder> tokenBuilder_;

      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Token> getTokenList() {
        if (tokenBuilder_ == null) {
          return java.util.Collections.unmodifiableList(token_);
        } else {
          return tokenBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public int getTokenCount() {
        if (tokenBuilder_ == null) {
          return token_.size();
        } else {
          return tokenBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Token getToken(int index) {
        if (tokenBuilder_ == null) {
          return token_.get(index);
        } else {
          return tokenBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder setToken(
          int index, edu.delaware.nlp.DocumentProto.Token value) {
        if (tokenBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokenIsMutable();
          token_.set(index, value);
          onChanged();
        } else {
          tokenBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder setToken(
          int index, edu.delaware.nlp.DocumentProto.Token.Builder builderForValue) {
        if (tokenBuilder_ == null) {
          ensureTokenIsMutable();
          token_.set(index, builderForValue.build());
          onChanged();
        } else {
          tokenBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder addToken(edu.delaware.nlp.DocumentProto.Token value) {
        if (tokenBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokenIsMutable();
          token_.add(value);
          onChanged();
        } else {
          tokenBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder addToken(
          int index, edu.delaware.nlp.DocumentProto.Token value) {
        if (tokenBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokenIsMutable();
          token_.add(index, value);
          onChanged();
        } else {
          tokenBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder addToken(
          edu.delaware.nlp.DocumentProto.Token.Builder builderForValue) {
        if (tokenBuilder_ == null) {
          ensureTokenIsMutable();
          token_.add(builderForValue.build());
          onChanged();
        } else {
          tokenBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder addToken(
          int index, edu.delaware.nlp.DocumentProto.Token.Builder builderForValue) {
        if (tokenBuilder_ == null) {
          ensureTokenIsMutable();
          token_.add(index, builderForValue.build());
          onChanged();
        } else {
          tokenBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder addAllToken(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Token> values) {
        if (tokenBuilder_ == null) {
          ensureTokenIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, token_);
          onChanged();
        } else {
          tokenBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder clearToken() {
        if (tokenBuilder_ == null) {
          token_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          tokenBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public Builder removeToken(int index) {
        if (tokenBuilder_ == null) {
          ensureTokenIsMutable();
          token_.remove(index);
          onChanged();
        } else {
          tokenBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Token.Builder getTokenBuilder(
          int index) {
        return getTokenFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.TokenOrBuilder getTokenOrBuilder(
          int index) {
        if (tokenBuilder_ == null) {
          return token_.get(index);  } else {
          return tokenBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.TokenOrBuilder> 
           getTokenOrBuilderList() {
        if (tokenBuilder_ != null) {
          return tokenBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(token_);
        }
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Token.Builder addTokenBuilder() {
        return getTokenFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Token.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public edu.delaware.nlp.DocumentProto.Token.Builder addTokenBuilder(
          int index) {
        return getTokenFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Token.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Token token = 3;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Token.Builder> 
           getTokenBuilderList() {
        return getTokenFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Token, edu.delaware.nlp.DocumentProto.Token.Builder, edu.delaware.nlp.DocumentProto.TokenOrBuilder> 
          getTokenFieldBuilder() {
        if (tokenBuilder_ == null) {
          tokenBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Token, edu.delaware.nlp.DocumentProto.Token.Builder, edu.delaware.nlp.DocumentProto.TokenOrBuilder>(
                  token_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          token_ = null;
        }
        return tokenBuilder_;
      }

      private java.util.List<edu.delaware.nlp.DocumentProto.Sentence> sentence_ =
        java.util.Collections.emptyList();
      private void ensureSentenceIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          sentence_ = new java.util.ArrayList<edu.delaware.nlp.DocumentProto.Sentence>(sentence_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence, edu.delaware.nlp.DocumentProto.Sentence.Builder, edu.delaware.nlp.DocumentProto.SentenceOrBuilder> sentenceBuilder_;

      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence> getSentenceList() {
        if (sentenceBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sentence_);
        } else {
          return sentenceBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public int getSentenceCount() {
        if (sentenceBuilder_ == null) {
          return sentence_.size();
        } else {
          return sentenceBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence getSentence(int index) {
        if (sentenceBuilder_ == null) {
          return sentence_.get(index);
        } else {
          return sentenceBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder setSentence(
          int index, edu.delaware.nlp.DocumentProto.Sentence value) {
        if (sentenceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentenceIsMutable();
          sentence_.set(index, value);
          onChanged();
        } else {
          sentenceBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder setSentence(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Builder builderForValue) {
        if (sentenceBuilder_ == null) {
          ensureSentenceIsMutable();
          sentence_.set(index, builderForValue.build());
          onChanged();
        } else {
          sentenceBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder addSentence(edu.delaware.nlp.DocumentProto.Sentence value) {
        if (sentenceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentenceIsMutable();
          sentence_.add(value);
          onChanged();
        } else {
          sentenceBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder addSentence(
          int index, edu.delaware.nlp.DocumentProto.Sentence value) {
        if (sentenceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentenceIsMutable();
          sentence_.add(index, value);
          onChanged();
        } else {
          sentenceBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder addSentence(
          edu.delaware.nlp.DocumentProto.Sentence.Builder builderForValue) {
        if (sentenceBuilder_ == null) {
          ensureSentenceIsMutable();
          sentence_.add(builderForValue.build());
          onChanged();
        } else {
          sentenceBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder addSentence(
          int index, edu.delaware.nlp.DocumentProto.Sentence.Builder builderForValue) {
        if (sentenceBuilder_ == null) {
          ensureSentenceIsMutable();
          sentence_.add(index, builderForValue.build());
          onChanged();
        } else {
          sentenceBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder addAllSentence(
          java.lang.Iterable<? extends edu.delaware.nlp.DocumentProto.Sentence> values) {
        if (sentenceBuilder_ == null) {
          ensureSentenceIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sentence_);
          onChanged();
        } else {
          sentenceBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder clearSentence() {
        if (sentenceBuilder_ == null) {
          sentence_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          sentenceBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public Builder removeSentence(int index) {
        if (sentenceBuilder_ == null) {
          ensureSentenceIsMutable();
          sentence_.remove(index);
          onChanged();
        } else {
          sentenceBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Builder getSentenceBuilder(
          int index) {
        return getSentenceFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.SentenceOrBuilder getSentenceOrBuilder(
          int index) {
        if (sentenceBuilder_ == null) {
          return sentence_.get(index);  } else {
          return sentenceBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public java.util.List<? extends edu.delaware.nlp.DocumentProto.SentenceOrBuilder> 
           getSentenceOrBuilderList() {
        if (sentenceBuilder_ != null) {
          return sentenceBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sentence_);
        }
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Builder addSentenceBuilder() {
        return getSentenceFieldBuilder().addBuilder(
            edu.delaware.nlp.DocumentProto.Sentence.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public edu.delaware.nlp.DocumentProto.Sentence.Builder addSentenceBuilder(
          int index) {
        return getSentenceFieldBuilder().addBuilder(
            index, edu.delaware.nlp.DocumentProto.Sentence.getDefaultInstance());
      }
      /**
       * <code>repeated .udelnlp.Sentence sentence = 4;</code>
       */
      public java.util.List<edu.delaware.nlp.DocumentProto.Sentence.Builder> 
           getSentenceBuilderList() {
        return getSentenceFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          edu.delaware.nlp.DocumentProto.Sentence, edu.delaware.nlp.DocumentProto.Sentence.Builder, edu.delaware.nlp.DocumentProto.SentenceOrBuilder> 
          getSentenceFieldBuilder() {
        if (sentenceBuilder_ == null) {
          sentenceBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              edu.delaware.nlp.DocumentProto.Sentence, edu.delaware.nlp.DocumentProto.Sentence.Builder, edu.delaware.nlp.DocumentProto.SentenceOrBuilder>(
                  sentence_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          sentence_ = null;
        }
        return sentenceBuilder_;
      }

      private com.google.protobuf.MapField<
          java.lang.String, edu.delaware.nlp.DocumentProto.Entity> entity_;
      private com.google.protobuf.MapField<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>
      internalGetEntity() {
        if (entity_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              EntityDefaultEntryHolder.defaultEntry);
        }
        return entity_;
      }
      private com.google.protobuf.MapField<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>
      internalGetMutableEntity() {
        onChanged();;
        if (entity_ == null) {
          entity_ = com.google.protobuf.MapField.newMapField(
              EntityDefaultEntryHolder.defaultEntry);
        }
        if (!entity_.isMutable()) {
          entity_ = entity_.copy();
        }
        return entity_;
      }

      public int getEntityCount() {
        return internalGetEntity().getMap().size();
      }
      /**
       * <pre>
       * Use map and duid to locate entity or relation instead of using a list.
       * This is for convinience deletion.
       * </pre>
       *
       * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
       */

      public boolean containsEntity(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetEntity().getMap().containsKey(key);
      }
      /**
       * Use {@link #getEntityMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> getEntity() {
        return getEntityMap();
      }
      /**
       * <pre>
       * Use map and duid to locate entity or relation instead of using a list.
       * This is for convinience deletion.
       * </pre>
       *
       * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
       */

      public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> getEntityMap() {
        return internalGetEntity().getMap();
      }
      /**
       * <pre>
       * Use map and duid to locate entity or relation instead of using a list.
       * This is for convinience deletion.
       * </pre>
       *
       * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
       */

      public edu.delaware.nlp.DocumentProto.Entity getEntityOrDefault(
          java.lang.String key,
          edu.delaware.nlp.DocumentProto.Entity defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> map =
            internalGetEntity().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <pre>
       * Use map and duid to locate entity or relation instead of using a list.
       * This is for convinience deletion.
       * </pre>
       *
       * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
       */

      public edu.delaware.nlp.DocumentProto.Entity getEntityOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> map =
            internalGetEntity().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearEntity() {
        internalGetMutableEntity().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <pre>
       * Use map and duid to locate entity or relation instead of using a list.
       * This is for convinience deletion.
       * </pre>
       *
       * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
       */

      public Builder removeEntity(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableEntity().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity>
      getMutableEntity() {
        return internalGetMutableEntity().getMutableMap();
      }
      /**
       * <pre>
       * Use map and duid to locate entity or relation instead of using a list.
       * This is for convinience deletion.
       * </pre>
       *
       * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
       */
      public Builder putEntity(
          java.lang.String key,
          edu.delaware.nlp.DocumentProto.Entity value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableEntity().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <pre>
       * Use map and duid to locate entity or relation instead of using a list.
       * This is for convinience deletion.
       * </pre>
       *
       * <code>map&lt;string, .udelnlp.Entity&gt; entity = 5;</code>
       */

      public Builder putAllEntity(
          java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Entity> values) {
        internalGetMutableEntity().getMutableMap()
            .putAll(values);
        return this;
      }

      private com.google.protobuf.MapField<
          java.lang.String, edu.delaware.nlp.DocumentProto.Relation> relation_;
      private com.google.protobuf.MapField<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>
      internalGetRelation() {
        if (relation_ == null) {
          return com.google.protobuf.MapField.emptyMapField(
              RelationDefaultEntryHolder.defaultEntry);
        }
        return relation_;
      }
      private com.google.protobuf.MapField<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>
      internalGetMutableRelation() {
        onChanged();;
        if (relation_ == null) {
          relation_ = com.google.protobuf.MapField.newMapField(
              RelationDefaultEntryHolder.defaultEntry);
        }
        if (!relation_.isMutable()) {
          relation_ = relation_.copy();
        }
        return relation_;
      }

      public int getRelationCount() {
        return internalGetRelation().getMap().size();
      }
      /**
       * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
       */

      public boolean containsRelation(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        return internalGetRelation().getMap().containsKey(key);
      }
      /**
       * Use {@link #getRelationMap()} instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> getRelation() {
        return getRelationMap();
      }
      /**
       * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
       */

      public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> getRelationMap() {
        return internalGetRelation().getMap();
      }
      /**
       * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
       */

      public edu.delaware.nlp.DocumentProto.Relation getRelationOrDefault(
          java.lang.String key,
          edu.delaware.nlp.DocumentProto.Relation defaultValue) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> map =
            internalGetRelation().getMap();
        return map.containsKey(key) ? map.get(key) : defaultValue;
      }
      /**
       * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
       */

      public edu.delaware.nlp.DocumentProto.Relation getRelationOrThrow(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> map =
            internalGetRelation().getMap();
        if (!map.containsKey(key)) {
          throw new java.lang.IllegalArgumentException();
        }
        return map.get(key);
      }

      public Builder clearRelation() {
        internalGetMutableRelation().getMutableMap()
            .clear();
        return this;
      }
      /**
       * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
       */

      public Builder removeRelation(
          java.lang.String key) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableRelation().getMutableMap()
            .remove(key);
        return this;
      }
      /**
       * Use alternate mutation accessors instead.
       */
      @java.lang.Deprecated
      public java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation>
      getMutableRelation() {
        return internalGetMutableRelation().getMutableMap();
      }
      /**
       * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
       */
      public Builder putRelation(
          java.lang.String key,
          edu.delaware.nlp.DocumentProto.Relation value) {
        if (key == null) { throw new java.lang.NullPointerException(); }
        if (value == null) { throw new java.lang.NullPointerException(); }
        internalGetMutableRelation().getMutableMap()
            .put(key, value);
        return this;
      }
      /**
       * <code>map&lt;string, .udelnlp.Relation&gt; relation = 6;</code>
       */

      public Builder putAllRelation(
          java.util.Map<java.lang.String, edu.delaware.nlp.DocumentProto.Relation> values) {
        internalGetMutableRelation().getMutableMap()
            .putAll(values);
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }


      // @@protoc_insertion_point(builder_scope:udelnlp.Document)
    }

    // @@protoc_insertion_point(class_scope:udelnlp.Document)
    private static final edu.delaware.nlp.DocumentProto.Document DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new edu.delaware.nlp.DocumentProto.Document();
    }

    public static edu.delaware.nlp.DocumentProto.Document getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser<Document>
        PARSER = new com.google.protobuf.AbstractParser<Document>() {
      @java.lang.Override
      public Document parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Document(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Document> parser() {
      return PARSER;
    }

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

    @java.lang.Override
    public edu.delaware.nlp.DocumentProto.Document getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Token_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Token_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Sentence_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Sentence_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Sentence_Constituent_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Sentence_Constituent_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Sentence_Dependency_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Sentence_Dependency_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Sentence_DependencyExtra_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Sentence_DependencyExtra_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Sentence_TokenExtra_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Sentence_TokenExtra_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Entity_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Entity_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Entity_EntityId_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Entity_EntityId_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Relation_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Relation_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Relation_Argument_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Relation_Argument_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Relation_Attribute_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Relation_Attribute_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Document_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Document_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Document_EntityEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Document_EntityEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_udelnlp_Document_RelationEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_udelnlp_Document_RelationEntry_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\016document.proto\022\007udelnlp\"f\n\005Token\022\r\n\005in" +
      "dex\030\001 \001(\005\022\014\n\004word\030\002 \001(\t\022\r\n\005lemma\030\003 \001(\t\022\013" +
      "\n\003pos\030\004 \001(\t\022\022\n\nchar_start\030\005 \001(\005\022\020\n\010char_" +
      "end\030\006 \001(\005\"\274\005\n\010Sentence\022\r\n\005index\030\001 \001(\005\022\023\n" +
      "\013token_start\030\002 \001(\005\022\021\n\ttoken_end\030\003 \001(\005\022\r\n" +
      "\005parse\030\004 \001(\t\0222\n\013constituent\030\005 \003(\0132\035.udel" +
      "nlp.Sentence.Constituent\0220\n\ndependency\030\006" +
      " \003(\0132\034.udelnlp.Sentence.Dependency\022;\n\020de" +
      "pendency_extra\030\007 \003(\0132!.udelnlp.Sentence." +
      "DependencyExtra\0221\n\013token_extra\030\010 \003(\0132\034.u" +
      "delnlp.Sentence.TokenExtra\022\022\n\nchar_start" +
      "\030\t \001(\005\022\020\n\010char_end\030\n \001(\005\032\217\001\n\013Constituent" +
      "\022\r\n\005index\030\001 \001(\005\022\023\n\013token_start\030\002 \001(\005\022\021\n\t" +
      "token_end\030\003 \001(\005\022\030\n\020head_token_index\030\004 \001(" +
      "\005\022\r\n\005label\030\005 \001(\t\022\016\n\006parent\030\006 \001(\005\022\020\n\010chil" +
      "dren\030\007 \003(\005\032U\n\nDependency\022\021\n\tgov_index\030\001 " +
      "\001(\005\022\021\n\tdep_index\030\002 \001(\005\022\020\n\010relation\030\003 \001(\t" +
      "\022\017\n\007isExtra\030\004 \001(\010\032Z\n\017DependencyExtra\022\021\n\t" +
      "gov_index\030\001 \001(\005\022\021\n\tdep_index\030\002 \001(\005\022\020\n\010re" +
      "lation\030\003 \001(\t\022\017\n\007rule_id\030\004 \001(\t\032)\n\nTokenEx" +
      "tra\022\014\n\004name\030\001 \001(\t\022\r\n\005index\030\002 \001(\005\"\375\001\n\006Ent" +
      "ity\022\014\n\004duid\030\001 \001(\t\022\022\n\nchar_start\030\002 \001(\005\022\020\n" +
      "\010char_end\030\003 \001(\005\022\023\n\013token_start\030\004 \001(\005\022\021\n\t" +
      "token_end\030\005 \001(\005\022\023\n\013entity_type\030\006 \001(\t\022+\n\t" +
      "entity_id\030\007 \003(\0132\030.udelnlp.Entity.EntityI" +
      "d\022\026\n\016sentence_index\030\010 \001(\005\022\016\n\006source\030\t \001(" +
      "\t\032-\n\010EntityId\022\016\n\006source\030\001 \001(\t\022\021\n\tid_stri" +
      "ng\030\002 \001(\t\"\345\001\n\010Relation\022\014\n\004duid\030\001 \001(\t\022\025\n\rr" +
      "elation_type\030\002 \001(\t\022,\n\010argument\030\003 \003(\0132\032.u" +
      "delnlp.Relation.Argument\022.\n\tattribute\030\004 " +
      "\003(\0132\033.udelnlp.Relation.Attribute\032-\n\010Argu" +
      "ment\022\014\n\004role\030\001 \001(\t\022\023\n\013entity_duid\030\002 \001(\t\032" +
      "\'\n\tAttribute\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t" +
      "\"\322\002\n\010Document\022\016\n\006doc_id\030\001 \001(\t\022\014\n\004text\030\002 " +
      "\001(\t\022\035\n\005token\030\003 \003(\0132\016.udelnlp.Token\022#\n\010se" +
      "ntence\030\004 \003(\0132\021.udelnlp.Sentence\022-\n\006entit" +
      "y\030\005 \003(\0132\035.udelnlp.Document.EntityEntry\0221" +
      "\n\010relation\030\006 \003(\0132\037.udelnlp.Document.Rela" +
      "tionEntry\032>\n\013EntityEntry\022\013\n\003key\030\001 \001(\t\022\036\n" +
      "\005value\030\002 \001(\0132\017.udelnlp.Entity:\0028\001\032B\n\rRel" +
      "ationEntry\022\013\n\003key\030\001 \001(\t\022 \n\005value\030\002 \001(\0132\021" +
      ".udelnlp.Relation:\0028\001B!\n\020edu.delaware.nl" +
      "pB\rDocumentProtob\006proto3"
    };
    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_udelnlp_Token_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_udelnlp_Token_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Token_descriptor,
        new java.lang.String[] { "Index", "Word", "Lemma", "Pos", "CharStart", "CharEnd", });
    internal_static_udelnlp_Sentence_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_udelnlp_Sentence_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Sentence_descriptor,
        new java.lang.String[] { "Index", "TokenStart", "TokenEnd", "Parse", "Constituent", "Dependency", "DependencyExtra", "TokenExtra", "CharStart", "CharEnd", });
    internal_static_udelnlp_Sentence_Constituent_descriptor =
      internal_static_udelnlp_Sentence_descriptor.getNestedTypes().get(0);
    internal_static_udelnlp_Sentence_Constituent_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Sentence_Constituent_descriptor,
        new java.lang.String[] { "Index", "TokenStart", "TokenEnd", "HeadTokenIndex", "Label", "Parent", "Children", });
    internal_static_udelnlp_Sentence_Dependency_descriptor =
      internal_static_udelnlp_Sentence_descriptor.getNestedTypes().get(1);
    internal_static_udelnlp_Sentence_Dependency_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Sentence_Dependency_descriptor,
        new java.lang.String[] { "GovIndex", "DepIndex", "Relation", "IsExtra", });
    internal_static_udelnlp_Sentence_DependencyExtra_descriptor =
      internal_static_udelnlp_Sentence_descriptor.getNestedTypes().get(2);
    internal_static_udelnlp_Sentence_DependencyExtra_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Sentence_DependencyExtra_descriptor,
        new java.lang.String[] { "GovIndex", "DepIndex", "Relation", "RuleId", });
    internal_static_udelnlp_Sentence_TokenExtra_descriptor =
      internal_static_udelnlp_Sentence_descriptor.getNestedTypes().get(3);
    internal_static_udelnlp_Sentence_TokenExtra_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Sentence_TokenExtra_descriptor,
        new java.lang.String[] { "Name", "Index", });
    internal_static_udelnlp_Entity_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_udelnlp_Entity_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Entity_descriptor,
        new java.lang.String[] { "Duid", "CharStart", "CharEnd", "TokenStart", "TokenEnd", "EntityType", "EntityId", "SentenceIndex", "Source", });
    internal_static_udelnlp_Entity_EntityId_descriptor =
      internal_static_udelnlp_Entity_descriptor.getNestedTypes().get(0);
    internal_static_udelnlp_Entity_EntityId_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Entity_EntityId_descriptor,
        new java.lang.String[] { "Source", "IdString", });
    internal_static_udelnlp_Relation_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_udelnlp_Relation_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Relation_descriptor,
        new java.lang.String[] { "Duid", "RelationType", "Argument", "Attribute", });
    internal_static_udelnlp_Relation_Argument_descriptor =
      internal_static_udelnlp_Relation_descriptor.getNestedTypes().get(0);
    internal_static_udelnlp_Relation_Argument_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Relation_Argument_descriptor,
        new java.lang.String[] { "Role", "EntityDuid", });
    internal_static_udelnlp_Relation_Attribute_descriptor =
      internal_static_udelnlp_Relation_descriptor.getNestedTypes().get(1);
    internal_static_udelnlp_Relation_Attribute_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Relation_Attribute_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_udelnlp_Document_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_udelnlp_Document_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Document_descriptor,
        new java.lang.String[] { "DocId", "Text", "Token", "Sentence", "Entity", "Relation", });
    internal_static_udelnlp_Document_EntityEntry_descriptor =
      internal_static_udelnlp_Document_descriptor.getNestedTypes().get(0);
    internal_static_udelnlp_Document_EntityEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Document_EntityEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_udelnlp_Document_RelationEntry_descriptor =
      internal_static_udelnlp_Document_descriptor.getNestedTypes().get(1);
    internal_static_udelnlp_Document_RelationEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_udelnlp_Document_RelationEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
