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

package org.languagetool.rules.ml;

public final class MLServerProto {
  private MLServerProto() {}
  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 AnalyzeRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.AnalyzeRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string text = 1;</code>
     * @return The text.
     */
    java.lang.String getText();
    /**
     * <code>string text = 1;</code>
     * @return The bytes for text.
     */
    com.google.protobuf.ByteString
        getTextBytes();

    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     * @return Whether the options field is set.
     */
    boolean hasOptions();
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     * @return The options.
     */
    org.languagetool.rules.ml.MLServerProto.ProcessingOptions getOptions();
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     */
    org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder getOptionsOrBuilder();
  }
  /**
   * <pre>
   * NOTE: should this be split this up into different packages?
   * </pre>
   *
   * Protobuf type {@code lt_ml_server.AnalyzeRequest}
   */
  public static final class AnalyzeRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.AnalyzeRequest)
      AnalyzeRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AnalyzeRequest.newBuilder() to construct.
    private AnalyzeRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AnalyzeRequest() {
      text_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AnalyzeRequest();
    }

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

              text_ = s;
              break;
            }
            case 18: {
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder subBuilder = null;
              if (options_ != null) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(org.languagetool.rules.ml.MLServerProto.ProcessingOptions.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }

              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 org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.AnalyzeRequest.class, org.languagetool.rules.ml.MLServerProto.AnalyzeRequest.Builder.class);
    }

    public static final int TEXT_FIELD_NUMBER = 1;
    private volatile java.lang.Object text_;
    /**
     * <code>string text = 1;</code>
     * @return The text.
     */
    @java.lang.Override
    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 = 1;</code>
     * @return The bytes for text.
     */
    @java.lang.Override
    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 OPTIONS_FIELD_NUMBER = 2;
    private org.languagetool.rules.ml.MLServerProto.ProcessingOptions options_;
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     * @return Whether the options field is set.
     */
    @java.lang.Override
    public boolean hasOptions() {
      return options_ != null;
    }
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     * @return The options.
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.ProcessingOptions getOptions() {
      return options_ == null ? org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDefaultInstance() : options_;
    }
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder getOptionsOrBuilder() {
      return getOptions();
    }

    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 (!getTextBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, text_);
      }
      if (options_ != null) {
        output.writeMessage(2, getOptions());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getTextBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, text_);
      }
      if (options_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getOptions());
      }
      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 org.languagetool.rules.ml.MLServerProto.AnalyzeRequest)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.AnalyzeRequest other = (org.languagetool.rules.ml.MLServerProto.AnalyzeRequest) obj;

      if (!getText()
          .equals(other.getText())) return false;
      if (hasOptions() != other.hasOptions()) return false;
      if (hasOptions()) {
        if (!getOptions()
            .equals(other.getOptions())) 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) + TEXT_FIELD_NUMBER;
      hash = (53 * hash) + getText().hashCode();
      if (hasOptions()) {
        hash = (37 * hash) + OPTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getOptions().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest 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 org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest 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 org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest 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(org.languagetool.rules.ml.MLServerProto.AnalyzeRequest 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;
    }
    /**
     * <pre>
     * NOTE: should this be split this up into different packages?
     * </pre>
     *
     * Protobuf type {@code lt_ml_server.AnalyzeRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.AnalyzeRequest)
        org.languagetool.rules.ml.MLServerProto.AnalyzeRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.AnalyzeRequest.class, org.languagetool.rules.ml.MLServerProto.AnalyzeRequest.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.AnalyzeRequest.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();
        text_ = "";

        if (optionsBuilder_ == null) {
          options_ = null;
        } else {
          options_ = null;
          optionsBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeRequest_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzeRequest getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.AnalyzeRequest.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzeRequest build() {
        org.languagetool.rules.ml.MLServerProto.AnalyzeRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzeRequest buildPartial() {
        org.languagetool.rules.ml.MLServerProto.AnalyzeRequest result = new org.languagetool.rules.ml.MLServerProto.AnalyzeRequest(this);
        result.text_ = text_;
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        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 org.languagetool.rules.ml.MLServerProto.AnalyzeRequest) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.AnalyzeRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.AnalyzeRequest other) {
        if (other == org.languagetool.rules.ml.MLServerProto.AnalyzeRequest.getDefaultInstance()) return this;
        if (!other.getText().isEmpty()) {
          text_ = other.text_;
          onChanged();
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.AnalyzeRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.AnalyzeRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object text_ = "";
      /**
       * <code>string text = 1;</code>
       * @return The text.
       */
      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 = 1;</code>
       * @return The bytes for text.
       */
      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 = 1;</code>
       * @param value The text to set.
       * @return This builder for chaining.
       */
      public Builder setText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        text_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string text = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearText() {
        
        text_ = getDefaultInstance().getText();
        onChanged();
        return this;
      }
      /**
       * <code>string text = 1;</code>
       * @param value The bytes for text to set.
       * @return This builder for chaining.
       */
      public Builder setTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        text_ = value;
        onChanged();
        return this;
      }

      private org.languagetool.rules.ml.MLServerProto.ProcessingOptions options_;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.ProcessingOptions, org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder, org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       * @return Whether the options field is set.
       */
      public boolean hasOptions() {
        return optionsBuilder_ != null || options_ != null;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       * @return The options.
       */
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_ == null ? org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDefaultInstance() : options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public Builder setOptions(org.languagetool.rules.ml.MLServerProto.ProcessingOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public Builder setOptions(
          org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public Builder mergeOptions(org.languagetool.rules.ml.MLServerProto.ProcessingOptions value) {
        if (optionsBuilder_ == null) {
          if (options_ != null) {
            options_ =
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = null;
          onChanged();
        } else {
          options_ = null;
          optionsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder getOptionsBuilder() {
        
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_ == null ?
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDefaultInstance() : options_;
        }
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.ProcessingOptions, org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder, org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions, org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder, org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }
      @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:lt_ml_server.AnalyzeRequest)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.AnalyzeRequest)
    private static final org.languagetool.rules.ml.MLServerProto.AnalyzeRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.AnalyzeRequest();
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzeRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzeRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ProcessingOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.ProcessingOptions)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string language = 1;</code>
     * @return The language.
     */
    java.lang.String getLanguage();
    /**
     * <code>string language = 1;</code>
     * @return The bytes for language.
     */
    com.google.protobuf.ByteString
        getLanguageBytes();

    /**
     * <code>bool tempOff = 2;</code>
     * @return The tempOff.
     */
    boolean getTempOff();

    /**
     * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
     * @return The enum numeric value on the wire for level.
     */
    int getLevelValue();
    /**
     * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
     * @return The level.
     */
    org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level getLevel();

    /**
     * <code>bool premium = 4;</code>
     * @return The premium.
     */
    boolean getPremium();

    /**
     * <code>bool enabledOnly = 5;</code>
     * @return The enabledOnly.
     */
    boolean getEnabledOnly();

    /**
     * <code>repeated string enabledRules = 6;</code>
     * @return A list containing the enabledRules.
     */
    java.util.List<java.lang.String>
        getEnabledRulesList();
    /**
     * <code>repeated string enabledRules = 6;</code>
     * @return The count of enabledRules.
     */
    int getEnabledRulesCount();
    /**
     * <code>repeated string enabledRules = 6;</code>
     * @param index The index of the element to return.
     * @return The enabledRules at the given index.
     */
    java.lang.String getEnabledRules(int index);
    /**
     * <code>repeated string enabledRules = 6;</code>
     * @param index The index of the value to return.
     * @return The bytes of the enabledRules at the given index.
     */
    com.google.protobuf.ByteString
        getEnabledRulesBytes(int index);

    /**
     * <code>repeated string disabledRules = 7;</code>
     * @return A list containing the disabledRules.
     */
    java.util.List<java.lang.String>
        getDisabledRulesList();
    /**
     * <code>repeated string disabledRules = 7;</code>
     * @return The count of disabledRules.
     */
    int getDisabledRulesCount();
    /**
     * <code>repeated string disabledRules = 7;</code>
     * @param index The index of the element to return.
     * @return The disabledRules at the given index.
     */
    java.lang.String getDisabledRules(int index);
    /**
     * <code>repeated string disabledRules = 7;</code>
     * @param index The index of the value to return.
     * @return The bytes of the disabledRules at the given index.
     */
    com.google.protobuf.ByteString
        getDisabledRulesBytes(int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.ProcessingOptions}
   */
  public static final class ProcessingOptions extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.ProcessingOptions)
      ProcessingOptionsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ProcessingOptions.newBuilder() to construct.
    private ProcessingOptions(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ProcessingOptions() {
      language_ = "";
      level_ = 0;
      enabledRules_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      disabledRules_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ProcessingOptions();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ProcessingOptions(
        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();

              language_ = s;
              break;
            }
            case 16: {

              tempOff_ = input.readBool();
              break;
            }
            case 24: {
              int rawValue = input.readEnum();

              level_ = rawValue;
              break;
            }
            case 32: {

              premium_ = input.readBool();
              break;
            }
            case 40: {

              enabledOnly_ = input.readBool();
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                enabledRules_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              enabledRules_.add(s);
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                disabledRules_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              disabledRules_.add(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_ & 0x00000001) != 0)) {
          enabledRules_ = enabledRules_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          disabledRules_ = disabledRules_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessingOptions_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessingOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions.class, org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder.class);
    }

    /**
     * Protobuf enum {@code lt_ml_server.ProcessingOptions.Level}
     */
    public enum Level
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>picky = 0;</code>
       */
      picky(0),
      /**
       * <code>academic = 1;</code>
       */
      academic(1),
      /**
       * <code>clarity = 2;</code>
       */
      clarity(2),
      /**
       * <code>professional = 3;</code>
       */
      professional(3),
      /**
       * <code>creative = 4;</code>
       */
      creative(4),
      /**
       * <code>customer = 5;</code>
       */
      customer(5),
      /**
       * <code>jobapp = 6;</code>
       */
      jobapp(6),
      /**
       * <code>objective = 7;</code>
       */
      objective(7),
      /**
       * <code>elegant = 8;</code>
       */
      elegant(8),
      /**
       * <code>defaultLevel = 9;</code>
       */
      defaultLevel(9),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>picky = 0;</code>
       */
      public static final int picky_VALUE = 0;
      /**
       * <code>academic = 1;</code>
       */
      public static final int academic_VALUE = 1;
      /**
       * <code>clarity = 2;</code>
       */
      public static final int clarity_VALUE = 2;
      /**
       * <code>professional = 3;</code>
       */
      public static final int professional_VALUE = 3;
      /**
       * <code>creative = 4;</code>
       */
      public static final int creative_VALUE = 4;
      /**
       * <code>customer = 5;</code>
       */
      public static final int customer_VALUE = 5;
      /**
       * <code>jobapp = 6;</code>
       */
      public static final int jobapp_VALUE = 6;
      /**
       * <code>objective = 7;</code>
       */
      public static final int objective_VALUE = 7;
      /**
       * <code>elegant = 8;</code>
       */
      public static final int elegant_VALUE = 8;
      /**
       * <code>defaultLevel = 9;</code>
       */
      public static final int defaultLevel_VALUE = 9;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Level valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Level forNumber(int value) {
        switch (value) {
          case 0: return picky;
          case 1: return academic;
          case 2: return clarity;
          case 3: return professional;
          case 4: return creative;
          case 5: return customer;
          case 6: return jobapp;
          case 7: return objective;
          case 8: return elegant;
          case 9: return defaultLevel;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int value;

      private Level(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:lt_ml_server.ProcessingOptions.Level)
    }

    public static final int LANGUAGE_FIELD_NUMBER = 1;
    private volatile java.lang.Object language_;
    /**
     * <code>string language = 1;</code>
     * @return The language.
     */
    @java.lang.Override
    public java.lang.String getLanguage() {
      java.lang.Object ref = language_;
      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();
        language_ = s;
        return s;
      }
    }
    /**
     * <code>string language = 1;</code>
     * @return The bytes for language.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getLanguageBytes() {
      java.lang.Object ref = language_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        language_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TEMPOFF_FIELD_NUMBER = 2;
    private boolean tempOff_;
    /**
     * <code>bool tempOff = 2;</code>
     * @return The tempOff.
     */
    @java.lang.Override
    public boolean getTempOff() {
      return tempOff_;
    }

    public static final int LEVEL_FIELD_NUMBER = 3;
    private int level_;
    /**
     * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
     * @return The enum numeric value on the wire for level.
     */
    @java.lang.Override public int getLevelValue() {
      return level_;
    }
    /**
     * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
     * @return The level.
     */
    @java.lang.Override public org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level getLevel() {
      @SuppressWarnings("deprecation")
      org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level result = org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level.valueOf(level_);
      return result == null ? org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level.UNRECOGNIZED : result;
    }

    public static final int PREMIUM_FIELD_NUMBER = 4;
    private boolean premium_;
    /**
     * <code>bool premium = 4;</code>
     * @return The premium.
     */
    @java.lang.Override
    public boolean getPremium() {
      return premium_;
    }

    public static final int ENABLEDONLY_FIELD_NUMBER = 5;
    private boolean enabledOnly_;
    /**
     * <code>bool enabledOnly = 5;</code>
     * @return The enabledOnly.
     */
    @java.lang.Override
    public boolean getEnabledOnly() {
      return enabledOnly_;
    }

    public static final int ENABLEDRULES_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList enabledRules_;
    /**
     * <code>repeated string enabledRules = 6;</code>
     * @return A list containing the enabledRules.
     */
    public com.google.protobuf.ProtocolStringList
        getEnabledRulesList() {
      return enabledRules_;
    }
    /**
     * <code>repeated string enabledRules = 6;</code>
     * @return The count of enabledRules.
     */
    public int getEnabledRulesCount() {
      return enabledRules_.size();
    }
    /**
     * <code>repeated string enabledRules = 6;</code>
     * @param index The index of the element to return.
     * @return The enabledRules at the given index.
     */
    public java.lang.String getEnabledRules(int index) {
      return enabledRules_.get(index);
    }
    /**
     * <code>repeated string enabledRules = 6;</code>
     * @param index The index of the value to return.
     * @return The bytes of the enabledRules at the given index.
     */
    public com.google.protobuf.ByteString
        getEnabledRulesBytes(int index) {
      return enabledRules_.getByteString(index);
    }

    public static final int DISABLEDRULES_FIELD_NUMBER = 7;
    private com.google.protobuf.LazyStringList disabledRules_;
    /**
     * <code>repeated string disabledRules = 7;</code>
     * @return A list containing the disabledRules.
     */
    public com.google.protobuf.ProtocolStringList
        getDisabledRulesList() {
      return disabledRules_;
    }
    /**
     * <code>repeated string disabledRules = 7;</code>
     * @return The count of disabledRules.
     */
    public int getDisabledRulesCount() {
      return disabledRules_.size();
    }
    /**
     * <code>repeated string disabledRules = 7;</code>
     * @param index The index of the element to return.
     * @return The disabledRules at the given index.
     */
    public java.lang.String getDisabledRules(int index) {
      return disabledRules_.get(index);
    }
    /**
     * <code>repeated string disabledRules = 7;</code>
     * @param index The index of the value to return.
     * @return The bytes of the disabledRules at the given index.
     */
    public com.google.protobuf.ByteString
        getDisabledRulesBytes(int index) {
      return disabledRules_.getByteString(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 (!getLanguageBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, language_);
      }
      if (tempOff_ != false) {
        output.writeBool(2, tempOff_);
      }
      if (level_ != org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level.picky.getNumber()) {
        output.writeEnum(3, level_);
      }
      if (premium_ != false) {
        output.writeBool(4, premium_);
      }
      if (enabledOnly_ != false) {
        output.writeBool(5, enabledOnly_);
      }
      for (int i = 0; i < enabledRules_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, enabledRules_.getRaw(i));
      }
      for (int i = 0; i < disabledRules_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, disabledRules_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getLanguageBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, language_);
      }
      if (tempOff_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, tempOff_);
      }
      if (level_ != org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level.picky.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, level_);
      }
      if (premium_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, premium_);
      }
      if (enabledOnly_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, enabledOnly_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < enabledRules_.size(); i++) {
          dataSize += computeStringSizeNoTag(enabledRules_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getEnabledRulesList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < disabledRules_.size(); i++) {
          dataSize += computeStringSizeNoTag(disabledRules_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getDisabledRulesList().size();
      }
      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 org.languagetool.rules.ml.MLServerProto.ProcessingOptions)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.ProcessingOptions other = (org.languagetool.rules.ml.MLServerProto.ProcessingOptions) obj;

      if (!getLanguage()
          .equals(other.getLanguage())) return false;
      if (getTempOff()
          != other.getTempOff()) return false;
      if (level_ != other.level_) return false;
      if (getPremium()
          != other.getPremium()) return false;
      if (getEnabledOnly()
          != other.getEnabledOnly()) return false;
      if (!getEnabledRulesList()
          .equals(other.getEnabledRulesList())) return false;
      if (!getDisabledRulesList()
          .equals(other.getDisabledRulesList())) 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) + LANGUAGE_FIELD_NUMBER;
      hash = (53 * hash) + getLanguage().hashCode();
      hash = (37 * hash) + TEMPOFF_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTempOff());
      hash = (37 * hash) + LEVEL_FIELD_NUMBER;
      hash = (53 * hash) + level_;
      hash = (37 * hash) + PREMIUM_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getPremium());
      hash = (37 * hash) + ENABLEDONLY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getEnabledOnly());
      if (getEnabledRulesCount() > 0) {
        hash = (37 * hash) + ENABLEDRULES_FIELD_NUMBER;
        hash = (53 * hash) + getEnabledRulesList().hashCode();
      }
      if (getDisabledRulesCount() > 0) {
        hash = (37 * hash) + DISABLEDRULES_FIELD_NUMBER;
        hash = (53 * hash) + getDisabledRulesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions 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 org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions 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 org.languagetool.rules.ml.MLServerProto.ProcessingOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions 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(org.languagetool.rules.ml.MLServerProto.ProcessingOptions 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 lt_ml_server.ProcessingOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.ProcessingOptions)
        org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessingOptions_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessingOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.ProcessingOptions.class, org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.ProcessingOptions.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();
        language_ = "";

        tempOff_ = false;

        level_ = 0;

        premium_ = false;

        enabledOnly_ = false;

        enabledRules_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        disabledRules_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessingOptions_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptions getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptions build() {
        org.languagetool.rules.ml.MLServerProto.ProcessingOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptions buildPartial() {
        org.languagetool.rules.ml.MLServerProto.ProcessingOptions result = new org.languagetool.rules.ml.MLServerProto.ProcessingOptions(this);
        int from_bitField0_ = bitField0_;
        result.language_ = language_;
        result.tempOff_ = tempOff_;
        result.level_ = level_;
        result.premium_ = premium_;
        result.enabledOnly_ = enabledOnly_;
        if (((bitField0_ & 0x00000001) != 0)) {
          enabledRules_ = enabledRules_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.enabledRules_ = enabledRules_;
        if (((bitField0_ & 0x00000002) != 0)) {
          disabledRules_ = disabledRules_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.disabledRules_ = disabledRules_;
        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 org.languagetool.rules.ml.MLServerProto.ProcessingOptions) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.ProcessingOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.ProcessingOptions other) {
        if (other == org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDefaultInstance()) return this;
        if (!other.getLanguage().isEmpty()) {
          language_ = other.language_;
          onChanged();
        }
        if (other.getTempOff() != false) {
          setTempOff(other.getTempOff());
        }
        if (other.level_ != 0) {
          setLevelValue(other.getLevelValue());
        }
        if (other.getPremium() != false) {
          setPremium(other.getPremium());
        }
        if (other.getEnabledOnly() != false) {
          setEnabledOnly(other.getEnabledOnly());
        }
        if (!other.enabledRules_.isEmpty()) {
          if (enabledRules_.isEmpty()) {
            enabledRules_ = other.enabledRules_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureEnabledRulesIsMutable();
            enabledRules_.addAll(other.enabledRules_);
          }
          onChanged();
        }
        if (!other.disabledRules_.isEmpty()) {
          if (disabledRules_.isEmpty()) {
            disabledRules_ = other.disabledRules_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureDisabledRulesIsMutable();
            disabledRules_.addAll(other.disabledRules_);
          }
          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 {
        org.languagetool.rules.ml.MLServerProto.ProcessingOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.ProcessingOptions) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object language_ = "";
      /**
       * <code>string language = 1;</code>
       * @return The language.
       */
      public java.lang.String getLanguage() {
        java.lang.Object ref = language_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          language_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string language = 1;</code>
       * @return The bytes for language.
       */
      public com.google.protobuf.ByteString
          getLanguageBytes() {
        java.lang.Object ref = language_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          language_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string language = 1;</code>
       * @param value The language to set.
       * @return This builder for chaining.
       */
      public Builder setLanguage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        language_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string language = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearLanguage() {
        
        language_ = getDefaultInstance().getLanguage();
        onChanged();
        return this;
      }
      /**
       * <code>string language = 1;</code>
       * @param value The bytes for language to set.
       * @return This builder for chaining.
       */
      public Builder setLanguageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        language_ = value;
        onChanged();
        return this;
      }

      private boolean tempOff_ ;
      /**
       * <code>bool tempOff = 2;</code>
       * @return The tempOff.
       */
      @java.lang.Override
      public boolean getTempOff() {
        return tempOff_;
      }
      /**
       * <code>bool tempOff = 2;</code>
       * @param value The tempOff to set.
       * @return This builder for chaining.
       */
      public Builder setTempOff(boolean value) {
        
        tempOff_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool tempOff = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearTempOff() {
        
        tempOff_ = false;
        onChanged();
        return this;
      }

      private int level_ = 0;
      /**
       * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
       * @return The enum numeric value on the wire for level.
       */
      @java.lang.Override public int getLevelValue() {
        return level_;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
       * @param value The enum numeric value on the wire for level to set.
       * @return This builder for chaining.
       */
      public Builder setLevelValue(int value) {
        
        level_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
       * @return The level.
       */
      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level getLevel() {
        @SuppressWarnings("deprecation")
        org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level result = org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level.valueOf(level_);
        return result == null ? org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level.UNRECOGNIZED : result;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
       * @param value The level to set.
       * @return This builder for chaining.
       */
      public Builder setLevel(org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Level value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        level_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions.Level level = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearLevel() {
        
        level_ = 0;
        onChanged();
        return this;
      }

      private boolean premium_ ;
      /**
       * <code>bool premium = 4;</code>
       * @return The premium.
       */
      @java.lang.Override
      public boolean getPremium() {
        return premium_;
      }
      /**
       * <code>bool premium = 4;</code>
       * @param value The premium to set.
       * @return This builder for chaining.
       */
      public Builder setPremium(boolean value) {
        
        premium_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool premium = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearPremium() {
        
        premium_ = false;
        onChanged();
        return this;
      }

      private boolean enabledOnly_ ;
      /**
       * <code>bool enabledOnly = 5;</code>
       * @return The enabledOnly.
       */
      @java.lang.Override
      public boolean getEnabledOnly() {
        return enabledOnly_;
      }
      /**
       * <code>bool enabledOnly = 5;</code>
       * @param value The enabledOnly to set.
       * @return This builder for chaining.
       */
      public Builder setEnabledOnly(boolean value) {
        
        enabledOnly_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool enabledOnly = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearEnabledOnly() {
        
        enabledOnly_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList enabledRules_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureEnabledRulesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          enabledRules_ = new com.google.protobuf.LazyStringArrayList(enabledRules_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @return A list containing the enabledRules.
       */
      public com.google.protobuf.ProtocolStringList
          getEnabledRulesList() {
        return enabledRules_.getUnmodifiableView();
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @return The count of enabledRules.
       */
      public int getEnabledRulesCount() {
        return enabledRules_.size();
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @param index The index of the element to return.
       * @return The enabledRules at the given index.
       */
      public java.lang.String getEnabledRules(int index) {
        return enabledRules_.get(index);
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @param index The index of the value to return.
       * @return The bytes of the enabledRules at the given index.
       */
      public com.google.protobuf.ByteString
          getEnabledRulesBytes(int index) {
        return enabledRules_.getByteString(index);
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @param index The index to set the value at.
       * @param value The enabledRules to set.
       * @return This builder for chaining.
       */
      public Builder setEnabledRules(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureEnabledRulesIsMutable();
        enabledRules_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @param value The enabledRules to add.
       * @return This builder for chaining.
       */
      public Builder addEnabledRules(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureEnabledRulesIsMutable();
        enabledRules_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @param values The enabledRules to add.
       * @return This builder for chaining.
       */
      public Builder addAllEnabledRules(
          java.lang.Iterable<java.lang.String> values) {
        ensureEnabledRulesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, enabledRules_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearEnabledRules() {
        enabledRules_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string enabledRules = 6;</code>
       * @param value The bytes of the enabledRules to add.
       * @return This builder for chaining.
       */
      public Builder addEnabledRulesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureEnabledRulesIsMutable();
        enabledRules_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList disabledRules_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDisabledRulesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          disabledRules_ = new com.google.protobuf.LazyStringArrayList(disabledRules_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @return A list containing the disabledRules.
       */
      public com.google.protobuf.ProtocolStringList
          getDisabledRulesList() {
        return disabledRules_.getUnmodifiableView();
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @return The count of disabledRules.
       */
      public int getDisabledRulesCount() {
        return disabledRules_.size();
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @param index The index of the element to return.
       * @return The disabledRules at the given index.
       */
      public java.lang.String getDisabledRules(int index) {
        return disabledRules_.get(index);
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @param index The index of the value to return.
       * @return The bytes of the disabledRules at the given index.
       */
      public com.google.protobuf.ByteString
          getDisabledRulesBytes(int index) {
        return disabledRules_.getByteString(index);
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @param index The index to set the value at.
       * @param value The disabledRules to set.
       * @return This builder for chaining.
       */
      public Builder setDisabledRules(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDisabledRulesIsMutable();
        disabledRules_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @param value The disabledRules to add.
       * @return This builder for chaining.
       */
      public Builder addDisabledRules(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDisabledRulesIsMutable();
        disabledRules_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @param values The disabledRules to add.
       * @return This builder for chaining.
       */
      public Builder addAllDisabledRules(
          java.lang.Iterable<java.lang.String> values) {
        ensureDisabledRulesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, disabledRules_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearDisabledRules() {
        disabledRules_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string disabledRules = 7;</code>
       * @param value The bytes of the disabledRules to add.
       * @return This builder for chaining.
       */
      public Builder addDisabledRulesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureDisabledRulesIsMutable();
        disabledRules_.add(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:lt_ml_server.ProcessingOptions)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.ProcessingOptions)
    private static final org.languagetool.rules.ml.MLServerProto.ProcessingOptions DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.ProcessingOptions();
    }

    public static org.languagetool.rules.ml.MLServerProto.ProcessingOptions getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.ProcessingOptions getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AnalyzeResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.AnalyzeResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> 
        getSentencesList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index);
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    int getSentencesCount();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
        getSentencesOrBuilderList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.AnalyzeResponse}
   */
  public static final class AnalyzeResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.AnalyzeResponse)
      AnalyzeResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AnalyzeResponse.newBuilder() to construct.
    private AnalyzeResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AnalyzeResponse() {
      sentences_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AnalyzeResponse();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AnalyzeResponse(
        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: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                sentences_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence>();
                mutable_bitField0_ |= 0x00000001;
              }
              sentences_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.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_ & 0x00000001) != 0)) {
          sentences_ = java.util.Collections.unmodifiableList(sentences_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.AnalyzeResponse.class, org.languagetool.rules.ml.MLServerProto.AnalyzeResponse.Builder.class);
    }

    public static final int SENTENCES_FIELD_NUMBER = 1;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> sentences_;
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> getSentencesList() {
      return sentences_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
        getSentencesOrBuilderList() {
      return sentences_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public int getSentencesCount() {
      return sentences_.size();
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index) {
      return sentences_.get(index);
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
        int index) {
      return sentences_.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 {
      for (int i = 0; i < sentences_.size(); i++) {
        output.writeMessage(1, sentences_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < sentences_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, sentences_.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 org.languagetool.rules.ml.MLServerProto.AnalyzeResponse)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.AnalyzeResponse other = (org.languagetool.rules.ml.MLServerProto.AnalyzeResponse) obj;

      if (!getSentencesList()
          .equals(other.getSentencesList())) 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();
      if (getSentencesCount() > 0) {
        hash = (37 * hash) + SENTENCES_FIELD_NUMBER;
        hash = (53 * hash) + getSentencesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse 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 org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse 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 org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse 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(org.languagetool.rules.ml.MLServerProto.AnalyzeResponse 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 lt_ml_server.AnalyzeResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.AnalyzeResponse)
        org.languagetool.rules.ml.MLServerProto.AnalyzeResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.AnalyzeResponse.class, org.languagetool.rules.ml.MLServerProto.AnalyzeResponse.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.AnalyzeResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSentencesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (sentencesBuilder_ == null) {
          sentences_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          sentencesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzeResponse_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzeResponse getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.AnalyzeResponse.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzeResponse build() {
        org.languagetool.rules.ml.MLServerProto.AnalyzeResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzeResponse buildPartial() {
        org.languagetool.rules.ml.MLServerProto.AnalyzeResponse result = new org.languagetool.rules.ml.MLServerProto.AnalyzeResponse(this);
        int from_bitField0_ = bitField0_;
        if (sentencesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            sentences_ = java.util.Collections.unmodifiableList(sentences_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.sentences_ = sentences_;
        } else {
          result.sentences_ = sentencesBuilder_.build();
        }
        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 org.languagetool.rules.ml.MLServerProto.AnalyzeResponse) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.AnalyzeResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.AnalyzeResponse other) {
        if (other == org.languagetool.rules.ml.MLServerProto.AnalyzeResponse.getDefaultInstance()) return this;
        if (sentencesBuilder_ == null) {
          if (!other.sentences_.isEmpty()) {
            if (sentences_.isEmpty()) {
              sentences_ = other.sentences_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureSentencesIsMutable();
              sentences_.addAll(other.sentences_);
            }
            onChanged();
          }
        } else {
          if (!other.sentences_.isEmpty()) {
            if (sentencesBuilder_.isEmpty()) {
              sentencesBuilder_.dispose();
              sentencesBuilder_ = null;
              sentences_ = other.sentences_;
              bitField0_ = (bitField0_ & ~0x00000001);
              sentencesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSentencesFieldBuilder() : null;
            } else {
              sentencesBuilder_.addAllMessages(other.sentences_);
            }
          }
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.AnalyzeResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.AnalyzeResponse) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> sentences_ =
        java.util.Collections.emptyList();
      private void ensureSentencesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          sentences_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence>(sentences_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> sentencesBuilder_;

      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> getSentencesList() {
        if (sentencesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sentences_);
        } else {
          return sentencesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public int getSentencesCount() {
        if (sentencesBuilder_ == null) {
          return sentences_.size();
        } else {
          return sentencesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index) {
        if (sentencesBuilder_ == null) {
          return sentences_.get(index);
        } else {
          return sentencesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder setSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.set(index, value);
          onChanged();
        } else {
          sentencesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder setSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.set(index, builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.add(value);
          onChanged();
        } else {
          sentencesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.add(index, value);
          onChanged();
        } else {
          sentencesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.add(builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.add(index, builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addAllSentences(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> values) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sentences_);
          onChanged();
        } else {
          sentencesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder clearSentences() {
        if (sentencesBuilder_ == null) {
          sentences_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          sentencesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder removeSentences(int index) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.remove(index);
          onChanged();
        } else {
          sentencesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder getSentencesBuilder(
          int index) {
        return getSentencesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
          int index) {
        if (sentencesBuilder_ == null) {
          return sentences_.get(index);  } else {
          return sentencesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
           getSentencesOrBuilderList() {
        if (sentencesBuilder_ != null) {
          return sentencesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sentences_);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder addSentencesBuilder() {
        return getSentencesFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder addSentencesBuilder(
          int index) {
        return getSentencesFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder> 
           getSentencesBuilderList() {
        return getSentencesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
          getSentencesFieldBuilder() {
        if (sentencesBuilder_ == null) {
          sentencesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder>(
                  sentences_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          sentences_ = null;
        }
        return sentencesBuilder_;
      }
      @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:lt_ml_server.AnalyzeResponse)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.AnalyzeResponse)
    private static final org.languagetool.rules.ml.MLServerProto.AnalyzeResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.AnalyzeResponse();
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzeResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzeResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ProcessRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.ProcessRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> 
        getSentencesList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index);
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    int getSentencesCount();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
        getSentencesOrBuilderList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
        int index);

    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     * @return Whether the options field is set.
     */
    boolean hasOptions();
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     * @return The options.
     */
    org.languagetool.rules.ml.MLServerProto.ProcessingOptions getOptions();
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     */
    org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder getOptionsOrBuilder();
  }
  /**
   * Protobuf type {@code lt_ml_server.ProcessRequest}
   */
  public static final class ProcessRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.ProcessRequest)
      ProcessRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ProcessRequest.newBuilder() to construct.
    private ProcessRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ProcessRequest() {
      sentences_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ProcessRequest();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ProcessRequest(
        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: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                sentences_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence>();
                mutable_bitField0_ |= 0x00000001;
              }
              sentences_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.parser(), extensionRegistry));
              break;
            }
            case 18: {
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder subBuilder = null;
              if (options_ != null) {
                subBuilder = options_.toBuilder();
              }
              options_ = input.readMessage(org.languagetool.rules.ml.MLServerProto.ProcessingOptions.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(options_);
                options_ = subBuilder.buildPartial();
              }

              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_ & 0x00000001) != 0)) {
          sentences_ = java.util.Collections.unmodifiableList(sentences_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.ProcessRequest.class, org.languagetool.rules.ml.MLServerProto.ProcessRequest.Builder.class);
    }

    public static final int SENTENCES_FIELD_NUMBER = 1;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> sentences_;
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> getSentencesList() {
      return sentences_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
        getSentencesOrBuilderList() {
      return sentences_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public int getSentencesCount() {
      return sentences_.size();
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index) {
      return sentences_.get(index);
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
        int index) {
      return sentences_.get(index);
    }

    public static final int OPTIONS_FIELD_NUMBER = 2;
    private org.languagetool.rules.ml.MLServerProto.ProcessingOptions options_;
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     * @return Whether the options field is set.
     */
    @java.lang.Override
    public boolean hasOptions() {
      return options_ != null;
    }
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     * @return The options.
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.ProcessingOptions getOptions() {
      return options_ == null ? org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDefaultInstance() : options_;
    }
    /**
     * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder getOptionsOrBuilder() {
      return getOptions();
    }

    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 {
      for (int i = 0; i < sentences_.size(); i++) {
        output.writeMessage(1, sentences_.get(i));
      }
      if (options_ != null) {
        output.writeMessage(2, getOptions());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < sentences_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, sentences_.get(i));
      }
      if (options_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getOptions());
      }
      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 org.languagetool.rules.ml.MLServerProto.ProcessRequest)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.ProcessRequest other = (org.languagetool.rules.ml.MLServerProto.ProcessRequest) obj;

      if (!getSentencesList()
          .equals(other.getSentencesList())) return false;
      if (hasOptions() != other.hasOptions()) return false;
      if (hasOptions()) {
        if (!getOptions()
            .equals(other.getOptions())) 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();
      if (getSentencesCount() > 0) {
        hash = (37 * hash) + SENTENCES_FIELD_NUMBER;
        hash = (53 * hash) + getSentencesList().hashCode();
      }
      if (hasOptions()) {
        hash = (37 * hash) + OPTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getOptions().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest 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 org.languagetool.rules.ml.MLServerProto.ProcessRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest 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 org.languagetool.rules.ml.MLServerProto.ProcessRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest 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(org.languagetool.rules.ml.MLServerProto.ProcessRequest 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 lt_ml_server.ProcessRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.ProcessRequest)
        org.languagetool.rules.ml.MLServerProto.ProcessRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.ProcessRequest.class, org.languagetool.rules.ml.MLServerProto.ProcessRequest.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.ProcessRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSentencesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (sentencesBuilder_ == null) {
          sentences_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          sentencesBuilder_.clear();
        }
        if (optionsBuilder_ == null) {
          options_ = null;
        } else {
          options_ = null;
          optionsBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessRequest_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessRequest getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.ProcessRequest.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessRequest build() {
        org.languagetool.rules.ml.MLServerProto.ProcessRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessRequest buildPartial() {
        org.languagetool.rules.ml.MLServerProto.ProcessRequest result = new org.languagetool.rules.ml.MLServerProto.ProcessRequest(this);
        int from_bitField0_ = bitField0_;
        if (sentencesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            sentences_ = java.util.Collections.unmodifiableList(sentences_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.sentences_ = sentences_;
        } else {
          result.sentences_ = sentencesBuilder_.build();
        }
        if (optionsBuilder_ == null) {
          result.options_ = options_;
        } else {
          result.options_ = optionsBuilder_.build();
        }
        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 org.languagetool.rules.ml.MLServerProto.ProcessRequest) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.ProcessRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.ProcessRequest other) {
        if (other == org.languagetool.rules.ml.MLServerProto.ProcessRequest.getDefaultInstance()) return this;
        if (sentencesBuilder_ == null) {
          if (!other.sentences_.isEmpty()) {
            if (sentences_.isEmpty()) {
              sentences_ = other.sentences_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureSentencesIsMutable();
              sentences_.addAll(other.sentences_);
            }
            onChanged();
          }
        } else {
          if (!other.sentences_.isEmpty()) {
            if (sentencesBuilder_.isEmpty()) {
              sentencesBuilder_.dispose();
              sentencesBuilder_ = null;
              sentences_ = other.sentences_;
              bitField0_ = (bitField0_ & ~0x00000001);
              sentencesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSentencesFieldBuilder() : null;
            } else {
              sentencesBuilder_.addAllMessages(other.sentences_);
            }
          }
        }
        if (other.hasOptions()) {
          mergeOptions(other.getOptions());
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.ProcessRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.ProcessRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> sentences_ =
        java.util.Collections.emptyList();
      private void ensureSentencesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          sentences_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence>(sentences_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> sentencesBuilder_;

      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> getSentencesList() {
        if (sentencesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sentences_);
        } else {
          return sentencesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public int getSentencesCount() {
        if (sentencesBuilder_ == null) {
          return sentences_.size();
        } else {
          return sentencesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index) {
        if (sentencesBuilder_ == null) {
          return sentences_.get(index);
        } else {
          return sentencesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder setSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.set(index, value);
          onChanged();
        } else {
          sentencesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder setSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.set(index, builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.add(value);
          onChanged();
        } else {
          sentencesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.add(index, value);
          onChanged();
        } else {
          sentencesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.add(builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.add(index, builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addAllSentences(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> values) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sentences_);
          onChanged();
        } else {
          sentencesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder clearSentences() {
        if (sentencesBuilder_ == null) {
          sentences_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          sentencesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder removeSentences(int index) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.remove(index);
          onChanged();
        } else {
          sentencesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder getSentencesBuilder(
          int index) {
        return getSentencesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
          int index) {
        if (sentencesBuilder_ == null) {
          return sentences_.get(index);  } else {
          return sentencesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
           getSentencesOrBuilderList() {
        if (sentencesBuilder_ != null) {
          return sentencesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sentences_);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder addSentencesBuilder() {
        return getSentencesFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder addSentencesBuilder(
          int index) {
        return getSentencesFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder> 
           getSentencesBuilderList() {
        return getSentencesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
          getSentencesFieldBuilder() {
        if (sentencesBuilder_ == null) {
          sentencesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder>(
                  sentences_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          sentences_ = null;
        }
        return sentencesBuilder_;
      }

      private org.languagetool.rules.ml.MLServerProto.ProcessingOptions options_;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.ProcessingOptions, org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder, org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder> optionsBuilder_;
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       * @return Whether the options field is set.
       */
      public boolean hasOptions() {
        return optionsBuilder_ != null || options_ != null;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       * @return The options.
       */
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptions getOptions() {
        if (optionsBuilder_ == null) {
          return options_ == null ? org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDefaultInstance() : options_;
        } else {
          return optionsBuilder_.getMessage();
        }
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public Builder setOptions(org.languagetool.rules.ml.MLServerProto.ProcessingOptions value) {
        if (optionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          options_ = value;
          onChanged();
        } else {
          optionsBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public Builder setOptions(
          org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder builderForValue) {
        if (optionsBuilder_ == null) {
          options_ = builderForValue.build();
          onChanged();
        } else {
          optionsBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public Builder mergeOptions(org.languagetool.rules.ml.MLServerProto.ProcessingOptions value) {
        if (optionsBuilder_ == null) {
          if (options_ != null) {
            options_ =
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions.newBuilder(options_).mergeFrom(value).buildPartial();
          } else {
            options_ = value;
          }
          onChanged();
        } else {
          optionsBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public Builder clearOptions() {
        if (optionsBuilder_ == null) {
          options_ = null;
          onChanged();
        } else {
          options_ = null;
          optionsBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder getOptionsBuilder() {
        
        onChanged();
        return getOptionsFieldBuilder().getBuilder();
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder getOptionsOrBuilder() {
        if (optionsBuilder_ != null) {
          return optionsBuilder_.getMessageOrBuilder();
        } else {
          return options_ == null ?
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions.getDefaultInstance() : options_;
        }
      }
      /**
       * <code>.lt_ml_server.ProcessingOptions options = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.ProcessingOptions, org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder, org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder> 
          getOptionsFieldBuilder() {
        if (optionsBuilder_ == null) {
          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.ProcessingOptions, org.languagetool.rules.ml.MLServerProto.ProcessingOptions.Builder, org.languagetool.rules.ml.MLServerProto.ProcessingOptionsOrBuilder>(
                  getOptions(),
                  getParentForChildren(),
                  isClean());
          options_ = null;
        }
        return optionsBuilder_;
      }
      @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:lt_ml_server.ProcessRequest)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.ProcessRequest)
    private static final org.languagetool.rules.ml.MLServerProto.ProcessRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.ProcessRequest();
    }

    public static org.languagetool.rules.ml.MLServerProto.ProcessRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.ProcessRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ProcessResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.ProcessResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.Match> 
        getRawMatchesList();
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.Match getRawMatches(int index);
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    int getRawMatchesCount();
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
        getRawMatchesOrBuilderList();
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getRawMatchesOrBuilder(
        int index);

    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.Match> 
        getMatchesList();
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    org.languagetool.rules.ml.MLServerProto.Match getMatches(int index);
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    int getMatchesCount();
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
        getMatchesOrBuilderList();
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getMatchesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.ProcessResponse}
   */
  public static final class ProcessResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.ProcessResponse)
      ProcessResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ProcessResponse.newBuilder() to construct.
    private ProcessResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ProcessResponse() {
      rawMatches_ = java.util.Collections.emptyList();
      matches_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new ProcessResponse();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ProcessResponse(
        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: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                rawMatches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.Match>();
                mutable_bitField0_ |= 0x00000001;
              }
              rawMatches_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.Match.parser(), extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                matches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.Match>();
                mutable_bitField0_ |= 0x00000002;
              }
              matches_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.Match.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_ & 0x00000001) != 0)) {
          rawMatches_ = java.util.Collections.unmodifiableList(rawMatches_);
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          matches_ = java.util.Collections.unmodifiableList(matches_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.ProcessResponse.class, org.languagetool.rules.ml.MLServerProto.ProcessResponse.Builder.class);
    }

    public static final int RAWMATCHES_FIELD_NUMBER = 1;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.Match> rawMatches_;
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.Match> getRawMatchesList() {
      return rawMatches_;
    }
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
        getRawMatchesOrBuilderList() {
      return rawMatches_;
    }
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    @java.lang.Override
    public int getRawMatchesCount() {
      return rawMatches_.size();
    }
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.Match getRawMatches(int index) {
      return rawMatches_.get(index);
    }
    /**
     * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getRawMatchesOrBuilder(
        int index) {
      return rawMatches_.get(index);
    }

    public static final int MATCHES_FIELD_NUMBER = 2;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.Match> matches_;
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.Match> getMatchesList() {
      return matches_;
    }
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
        getMatchesOrBuilderList() {
      return matches_;
    }
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    @java.lang.Override
    public int getMatchesCount() {
      return matches_.size();
    }
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.Match getMatches(int index) {
      return matches_.get(index);
    }
    /**
     * <code>repeated .lt_ml_server.Match matches = 2;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getMatchesOrBuilder(
        int index) {
      return matches_.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 {
      for (int i = 0; i < rawMatches_.size(); i++) {
        output.writeMessage(1, rawMatches_.get(i));
      }
      for (int i = 0; i < matches_.size(); i++) {
        output.writeMessage(2, matches_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < rawMatches_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, rawMatches_.get(i));
      }
      for (int i = 0; i < matches_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, matches_.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 org.languagetool.rules.ml.MLServerProto.ProcessResponse)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.ProcessResponse other = (org.languagetool.rules.ml.MLServerProto.ProcessResponse) obj;

      if (!getRawMatchesList()
          .equals(other.getRawMatchesList())) return false;
      if (!getMatchesList()
          .equals(other.getMatchesList())) 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();
      if (getRawMatchesCount() > 0) {
        hash = (37 * hash) + RAWMATCHES_FIELD_NUMBER;
        hash = (53 * hash) + getRawMatchesList().hashCode();
      }
      if (getMatchesCount() > 0) {
        hash = (37 * hash) + MATCHES_FIELD_NUMBER;
        hash = (53 * hash) + getMatchesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse 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 org.languagetool.rules.ml.MLServerProto.ProcessResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse 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 org.languagetool.rules.ml.MLServerProto.ProcessResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse 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(org.languagetool.rules.ml.MLServerProto.ProcessResponse 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 lt_ml_server.ProcessResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.ProcessResponse)
        org.languagetool.rules.ml.MLServerProto.ProcessResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.ProcessResponse.class, org.languagetool.rules.ml.MLServerProto.ProcessResponse.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.ProcessResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getRawMatchesFieldBuilder();
          getMatchesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (rawMatchesBuilder_ == null) {
          rawMatches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          rawMatchesBuilder_.clear();
        }
        if (matchesBuilder_ == null) {
          matches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          matchesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_ProcessResponse_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessResponse getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.ProcessResponse.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessResponse build() {
        org.languagetool.rules.ml.MLServerProto.ProcessResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.ProcessResponse buildPartial() {
        org.languagetool.rules.ml.MLServerProto.ProcessResponse result = new org.languagetool.rules.ml.MLServerProto.ProcessResponse(this);
        int from_bitField0_ = bitField0_;
        if (rawMatchesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            rawMatches_ = java.util.Collections.unmodifiableList(rawMatches_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.rawMatches_ = rawMatches_;
        } else {
          result.rawMatches_ = rawMatchesBuilder_.build();
        }
        if (matchesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            matches_ = java.util.Collections.unmodifiableList(matches_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.matches_ = matches_;
        } else {
          result.matches_ = matchesBuilder_.build();
        }
        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 org.languagetool.rules.ml.MLServerProto.ProcessResponse) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.ProcessResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.ProcessResponse other) {
        if (other == org.languagetool.rules.ml.MLServerProto.ProcessResponse.getDefaultInstance()) return this;
        if (rawMatchesBuilder_ == null) {
          if (!other.rawMatches_.isEmpty()) {
            if (rawMatches_.isEmpty()) {
              rawMatches_ = other.rawMatches_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureRawMatchesIsMutable();
              rawMatches_.addAll(other.rawMatches_);
            }
            onChanged();
          }
        } else {
          if (!other.rawMatches_.isEmpty()) {
            if (rawMatchesBuilder_.isEmpty()) {
              rawMatchesBuilder_.dispose();
              rawMatchesBuilder_ = null;
              rawMatches_ = other.rawMatches_;
              bitField0_ = (bitField0_ & ~0x00000001);
              rawMatchesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getRawMatchesFieldBuilder() : null;
            } else {
              rawMatchesBuilder_.addAllMessages(other.rawMatches_);
            }
          }
        }
        if (matchesBuilder_ == null) {
          if (!other.matches_.isEmpty()) {
            if (matches_.isEmpty()) {
              matches_ = other.matches_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureMatchesIsMutable();
              matches_.addAll(other.matches_);
            }
            onChanged();
          }
        } else {
          if (!other.matches_.isEmpty()) {
            if (matchesBuilder_.isEmpty()) {
              matchesBuilder_.dispose();
              matchesBuilder_ = null;
              matches_ = other.matches_;
              bitField0_ = (bitField0_ & ~0x00000002);
              matchesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMatchesFieldBuilder() : null;
            } else {
              matchesBuilder_.addAllMessages(other.matches_);
            }
          }
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.ProcessResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.ProcessResponse) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<org.languagetool.rules.ml.MLServerProto.Match> rawMatches_ =
        java.util.Collections.emptyList();
      private void ensureRawMatchesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          rawMatches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.Match>(rawMatches_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> rawMatchesBuilder_;

      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.Match> getRawMatchesList() {
        if (rawMatchesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(rawMatches_);
        } else {
          return rawMatchesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public int getRawMatchesCount() {
        if (rawMatchesBuilder_ == null) {
          return rawMatches_.size();
        } else {
          return rawMatchesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match getRawMatches(int index) {
        if (rawMatchesBuilder_ == null) {
          return rawMatches_.get(index);
        } else {
          return rawMatchesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder setRawMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match value) {
        if (rawMatchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRawMatchesIsMutable();
          rawMatches_.set(index, value);
          onChanged();
        } else {
          rawMatchesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder setRawMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (rawMatchesBuilder_ == null) {
          ensureRawMatchesIsMutable();
          rawMatches_.set(index, builderForValue.build());
          onChanged();
        } else {
          rawMatchesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder addRawMatches(org.languagetool.rules.ml.MLServerProto.Match value) {
        if (rawMatchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRawMatchesIsMutable();
          rawMatches_.add(value);
          onChanged();
        } else {
          rawMatchesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder addRawMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match value) {
        if (rawMatchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRawMatchesIsMutable();
          rawMatches_.add(index, value);
          onChanged();
        } else {
          rawMatchesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder addRawMatches(
          org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (rawMatchesBuilder_ == null) {
          ensureRawMatchesIsMutable();
          rawMatches_.add(builderForValue.build());
          onChanged();
        } else {
          rawMatchesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder addRawMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (rawMatchesBuilder_ == null) {
          ensureRawMatchesIsMutable();
          rawMatches_.add(index, builderForValue.build());
          onChanged();
        } else {
          rawMatchesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder addAllRawMatches(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.Match> values) {
        if (rawMatchesBuilder_ == null) {
          ensureRawMatchesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, rawMatches_);
          onChanged();
        } else {
          rawMatchesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder clearRawMatches() {
        if (rawMatchesBuilder_ == null) {
          rawMatches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          rawMatchesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public Builder removeRawMatches(int index) {
        if (rawMatchesBuilder_ == null) {
          ensureRawMatchesIsMutable();
          rawMatches_.remove(index);
          onChanged();
        } else {
          rawMatchesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder getRawMatchesBuilder(
          int index) {
        return getRawMatchesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getRawMatchesOrBuilder(
          int index) {
        if (rawMatchesBuilder_ == null) {
          return rawMatches_.get(index);  } else {
          return rawMatchesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
           getRawMatchesOrBuilderList() {
        if (rawMatchesBuilder_ != null) {
          return rawMatchesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(rawMatches_);
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder addRawMatchesBuilder() {
        return getRawMatchesFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.Match.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder addRawMatchesBuilder(
          int index) {
        return getRawMatchesFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.Match.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.Match rawMatches = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.Match.Builder> 
           getRawMatchesBuilderList() {
        return getRawMatchesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
          getRawMatchesFieldBuilder() {
        if (rawMatchesBuilder_ == null) {
          rawMatchesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder>(
                  rawMatches_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          rawMatches_ = null;
        }
        return rawMatchesBuilder_;
      }

      private java.util.List<org.languagetool.rules.ml.MLServerProto.Match> matches_ =
        java.util.Collections.emptyList();
      private void ensureMatchesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          matches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.Match>(matches_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> matchesBuilder_;

      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.Match> getMatchesList() {
        if (matchesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(matches_);
        } else {
          return matchesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public int getMatchesCount() {
        if (matchesBuilder_ == null) {
          return matches_.size();
        } else {
          return matchesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match getMatches(int index) {
        if (matchesBuilder_ == null) {
          return matches_.get(index);
        } else {
          return matchesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder setMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.set(index, value);
          onChanged();
        } else {
          matchesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder setMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.set(index, builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder addMatches(org.languagetool.rules.ml.MLServerProto.Match value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.add(value);
          onChanged();
        } else {
          matchesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder addMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.add(index, value);
          onChanged();
        } else {
          matchesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder addMatches(
          org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.add(builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder addMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.add(index, builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder addAllMatches(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.Match> values) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, matches_);
          onChanged();
        } else {
          matchesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder clearMatches() {
        if (matchesBuilder_ == null) {
          matches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          matchesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public Builder removeMatches(int index) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.remove(index);
          onChanged();
        } else {
          matchesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder getMatchesBuilder(
          int index) {
        return getMatchesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getMatchesOrBuilder(
          int index) {
        if (matchesBuilder_ == null) {
          return matches_.get(index);  } else {
          return matchesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
           getMatchesOrBuilderList() {
        if (matchesBuilder_ != null) {
          return matchesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(matches_);
        }
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder addMatchesBuilder() {
        return getMatchesFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.Match.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder addMatchesBuilder(
          int index) {
        return getMatchesFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.Match.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.Match matches = 2;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.Match.Builder> 
           getMatchesBuilderList() {
        return getMatchesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
          getMatchesFieldBuilder() {
        if (matchesBuilder_ == null) {
          matchesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder>(
                  matches_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          matches_ = null;
        }
        return matchesBuilder_;
      }
      @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:lt_ml_server.ProcessResponse)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.ProcessResponse)
    private static final org.languagetool.rules.ml.MLServerProto.ProcessResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.ProcessResponse();
    }

    public static org.languagetool.rules.ml.MLServerProto.ProcessResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.ProcessResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AnalyzedMatchRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.AnalyzedMatchRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> 
        getSentencesList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index);
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    int getSentencesCount();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
        getSentencesOrBuilderList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
        int index);

    /**
     * <pre>
     * allow logging of input on error
     * </pre>
     *
     * <code>bool inputLogging = 2;</code>
     * @return The inputLogging.
     */
    boolean getInputLogging();

    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @return A list containing the textSessionID.
     */
    java.util.List<java.lang.Long> getTextSessionIDList();
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @return The count of textSessionID.
     */
    int getTextSessionIDCount();
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @param index The index of the element to return.
     * @return The textSessionID at the given index.
     */
    long getTextSessionID(int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.AnalyzedMatchRequest}
   */
  public static final class AnalyzedMatchRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.AnalyzedMatchRequest)
      AnalyzedMatchRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AnalyzedMatchRequest.newBuilder() to construct.
    private AnalyzedMatchRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AnalyzedMatchRequest() {
      sentences_ = java.util.Collections.emptyList();
      textSessionID_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AnalyzedMatchRequest();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AnalyzedMatchRequest(
        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: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                sentences_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence>();
                mutable_bitField0_ |= 0x00000001;
              }
              sentences_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.parser(), extensionRegistry));
              break;
            }
            case 16: {

              inputLogging_ = input.readBool();
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                textSessionID_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              textSessionID_.addLong(input.readInt64());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) != 0) && input.getBytesUntilLimit() > 0) {
                textSessionID_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                textSessionID_.addLong(input.readInt64());
              }
              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_ & 0x00000001) != 0)) {
          sentences_ = java.util.Collections.unmodifiableList(sentences_);
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          textSessionID_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedMatchRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedMatchRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest.class, org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest.Builder.class);
    }

    public static final int SENTENCES_FIELD_NUMBER = 1;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> sentences_;
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> getSentencesList() {
      return sentences_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
        getSentencesOrBuilderList() {
      return sentences_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public int getSentencesCount() {
      return sentences_.size();
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index) {
      return sentences_.get(index);
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
        int index) {
      return sentences_.get(index);
    }

    public static final int INPUTLOGGING_FIELD_NUMBER = 2;
    private boolean inputLogging_;
    /**
     * <pre>
     * allow logging of input on error
     * </pre>
     *
     * <code>bool inputLogging = 2;</code>
     * @return The inputLogging.
     */
    @java.lang.Override
    public boolean getInputLogging() {
      return inputLogging_;
    }

    public static final int TEXTSESSIONID_FIELD_NUMBER = 3;
    private com.google.protobuf.Internal.LongList textSessionID_;
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @return A list containing the textSessionID.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getTextSessionIDList() {
      return textSessionID_;
    }
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @return The count of textSessionID.
     */
    public int getTextSessionIDCount() {
      return textSessionID_.size();
    }
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @param index The index of the element to return.
     * @return The textSessionID at the given index.
     */
    public long getTextSessionID(int index) {
      return textSessionID_.getLong(index);
    }
    private int textSessionIDMemoizedSerializedSize = -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();
      for (int i = 0; i < sentences_.size(); i++) {
        output.writeMessage(1, sentences_.get(i));
      }
      if (inputLogging_ != false) {
        output.writeBool(2, inputLogging_);
      }
      if (getTextSessionIDList().size() > 0) {
        output.writeUInt32NoTag(26);
        output.writeUInt32NoTag(textSessionIDMemoizedSerializedSize);
      }
      for (int i = 0; i < textSessionID_.size(); i++) {
        output.writeInt64NoTag(textSessionID_.getLong(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < sentences_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, sentences_.get(i));
      }
      if (inputLogging_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, inputLogging_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < textSessionID_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt64SizeNoTag(textSessionID_.getLong(i));
        }
        size += dataSize;
        if (!getTextSessionIDList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        textSessionIDMemoizedSerializedSize = 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 org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest other = (org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest) obj;

      if (!getSentencesList()
          .equals(other.getSentencesList())) return false;
      if (getInputLogging()
          != other.getInputLogging()) return false;
      if (!getTextSessionIDList()
          .equals(other.getTextSessionIDList())) 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();
      if (getSentencesCount() > 0) {
        hash = (37 * hash) + SENTENCES_FIELD_NUMBER;
        hash = (53 * hash) + getSentencesList().hashCode();
      }
      hash = (37 * hash) + INPUTLOGGING_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getInputLogging());
      if (getTextSessionIDCount() > 0) {
        hash = (37 * hash) + TEXTSESSIONID_FIELD_NUMBER;
        hash = (53 * hash) + getTextSessionIDList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest 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 org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest 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 org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest 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(org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest 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 lt_ml_server.AnalyzedMatchRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.AnalyzedMatchRequest)
        org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedMatchRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedMatchRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest.class, org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSentencesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (sentencesBuilder_ == null) {
          sentences_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          sentencesBuilder_.clear();
        }
        inputLogging_ = false;

        textSessionID_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedMatchRequest_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest build() {
        org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest buildPartial() {
        org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest result = new org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest(this);
        int from_bitField0_ = bitField0_;
        if (sentencesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            sentences_ = java.util.Collections.unmodifiableList(sentences_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.sentences_ = sentences_;
        } else {
          result.sentences_ = sentencesBuilder_.build();
        }
        result.inputLogging_ = inputLogging_;
        if (((bitField0_ & 0x00000002) != 0)) {
          textSessionID_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.textSessionID_ = textSessionID_;
        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 org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest other) {
        if (other == org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest.getDefaultInstance()) return this;
        if (sentencesBuilder_ == null) {
          if (!other.sentences_.isEmpty()) {
            if (sentences_.isEmpty()) {
              sentences_ = other.sentences_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureSentencesIsMutable();
              sentences_.addAll(other.sentences_);
            }
            onChanged();
          }
        } else {
          if (!other.sentences_.isEmpty()) {
            if (sentencesBuilder_.isEmpty()) {
              sentencesBuilder_.dispose();
              sentencesBuilder_ = null;
              sentences_ = other.sentences_;
              bitField0_ = (bitField0_ & ~0x00000001);
              sentencesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSentencesFieldBuilder() : null;
            } else {
              sentencesBuilder_.addAllMessages(other.sentences_);
            }
          }
        }
        if (other.getInputLogging() != false) {
          setInputLogging(other.getInputLogging());
        }
        if (!other.textSessionID_.isEmpty()) {
          if (textSessionID_.isEmpty()) {
            textSessionID_ = other.textSessionID_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTextSessionIDIsMutable();
            textSessionID_.addAll(other.textSessionID_);
          }
          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 {
        org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> sentences_ =
        java.util.Collections.emptyList();
      private void ensureSentencesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          sentences_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence>(sentences_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> sentencesBuilder_;

      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> getSentencesList() {
        if (sentencesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sentences_);
        } else {
          return sentencesBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public int getSentencesCount() {
        if (sentencesBuilder_ == null) {
          return sentences_.size();
        } else {
          return sentencesBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getSentences(int index) {
        if (sentencesBuilder_ == null) {
          return sentences_.get(index);
        } else {
          return sentencesBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder setSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.set(index, value);
          onChanged();
        } else {
          sentencesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder setSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.set(index, builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.add(value);
          onChanged();
        } else {
          sentencesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence value) {
        if (sentencesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentencesIsMutable();
          sentences_.add(index, value);
          onChanged();
        } else {
          sentencesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.add(builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addSentences(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder builderForValue) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.add(index, builderForValue.build());
          onChanged();
        } else {
          sentencesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder addAllSentences(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentence> values) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sentences_);
          onChanged();
        } else {
          sentencesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder clearSentences() {
        if (sentencesBuilder_ == null) {
          sentences_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          sentencesBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public Builder removeSentences(int index) {
        if (sentencesBuilder_ == null) {
          ensureSentencesIsMutable();
          sentences_.remove(index);
          onChanged();
        } else {
          sentencesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder getSentencesBuilder(
          int index) {
        return getSentencesFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder getSentencesOrBuilder(
          int index) {
        if (sentencesBuilder_ == null) {
          return sentences_.get(index);  } else {
          return sentencesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
           getSentencesOrBuilderList() {
        if (sentencesBuilder_ != null) {
          return sentencesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sentences_);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder addSentencesBuilder() {
        return getSentencesFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder addSentencesBuilder(
          int index) {
        return getSentencesFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedSentence sentences = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder> 
           getSentencesBuilderList() {
        return getSentencesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder> 
          getSentencesFieldBuilder() {
        if (sentencesBuilder_ == null) {
          sentencesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.AnalyzedSentence, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder>(
                  sentences_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          sentences_ = null;
        }
        return sentencesBuilder_;
      }

      private boolean inputLogging_ ;
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 2;</code>
       * @return The inputLogging.
       */
      @java.lang.Override
      public boolean getInputLogging() {
        return inputLogging_;
      }
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 2;</code>
       * @param value The inputLogging to set.
       * @return This builder for chaining.
       */
      public Builder setInputLogging(boolean value) {
        
        inputLogging_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearInputLogging() {
        
        inputLogging_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList textSessionID_ = emptyLongList();
      private void ensureTextSessionIDIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          textSessionID_ = mutableCopy(textSessionID_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @return A list containing the textSessionID.
       */
      public java.util.List<java.lang.Long>
          getTextSessionIDList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(textSessionID_) : textSessionID_;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @return The count of textSessionID.
       */
      public int getTextSessionIDCount() {
        return textSessionID_.size();
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @param index The index of the element to return.
       * @return The textSessionID at the given index.
       */
      public long getTextSessionID(int index) {
        return textSessionID_.getLong(index);
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @param index The index to set the value at.
       * @param value The textSessionID to set.
       * @return This builder for chaining.
       */
      public Builder setTextSessionID(
          int index, long value) {
        ensureTextSessionIDIsMutable();
        textSessionID_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @param value The textSessionID to add.
       * @return This builder for chaining.
       */
      public Builder addTextSessionID(long value) {
        ensureTextSessionIDIsMutable();
        textSessionID_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @param values The textSessionID to add.
       * @return This builder for chaining.
       */
      public Builder addAllTextSessionID(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTextSessionIDIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, textSessionID_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearTextSessionID() {
        textSessionID_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        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:lt_ml_server.AnalyzedMatchRequest)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.AnalyzedMatchRequest)
    private static final org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest();
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedMatchRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AnalyzedSentenceOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.AnalyzedSentence)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string text = 1;</code>
     * @return The text.
     */
    java.lang.String getText();
    /**
     * <code>string text = 1;</code>
     * @return The bytes for text.
     */
    com.google.protobuf.ByteString
        getTextBytes();

    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings> 
        getTokensList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings getTokens(int index);
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    int getTokensCount();
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder> 
        getTokensOrBuilderList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder getTokensOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.AnalyzedSentence}
   */
  public static final class AnalyzedSentence extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.AnalyzedSentence)
      AnalyzedSentenceOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AnalyzedSentence.newBuilder() to construct.
    private AnalyzedSentence(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AnalyzedSentence() {
      text_ = "";
      tokens_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AnalyzedSentence();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AnalyzedSentence(
        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();

              text_ = s;
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                tokens_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings>();
                mutable_bitField0_ |= 0x00000001;
              }
              tokens_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.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_ & 0x00000001) != 0)) {
          tokens_ = java.util.Collections.unmodifiableList(tokens_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedSentence_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedSentence_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.class, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder.class);
    }

    public static final int TEXT_FIELD_NUMBER = 1;
    private volatile java.lang.Object text_;
    /**
     * <code>string text = 1;</code>
     * @return The text.
     */
    @java.lang.Override
    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 = 1;</code>
     * @return The bytes for text.
     */
    @java.lang.Override
    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 TOKENS_FIELD_NUMBER = 2;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings> tokens_;
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings> getTokensList() {
      return tokens_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder> 
        getTokensOrBuilderList() {
      return tokens_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    @java.lang.Override
    public int getTokensCount() {
      return tokens_.size();
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings getTokens(int index) {
      return tokens_.get(index);
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder getTokensOrBuilder(
        int index) {
      return tokens_.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 (!getTextBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, text_);
      }
      for (int i = 0; i < tokens_.size(); i++) {
        output.writeMessage(2, tokens_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getTextBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, text_);
      }
      for (int i = 0; i < tokens_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, tokens_.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 org.languagetool.rules.ml.MLServerProto.AnalyzedSentence)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.AnalyzedSentence other = (org.languagetool.rules.ml.MLServerProto.AnalyzedSentence) obj;

      if (!getText()
          .equals(other.getText())) return false;
      if (!getTokensList()
          .equals(other.getTokensList())) 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) + TEXT_FIELD_NUMBER;
      hash = (53 * hash) + getText().hashCode();
      if (getTokensCount() > 0) {
        hash = (37 * hash) + TOKENS_FIELD_NUMBER;
        hash = (53 * hash) + getTokensList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence 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 org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence 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 org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence 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(org.languagetool.rules.ml.MLServerProto.AnalyzedSentence 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 lt_ml_server.AnalyzedSentence}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.AnalyzedSentence)
        org.languagetool.rules.ml.MLServerProto.AnalyzedSentenceOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedSentence_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedSentence_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.class, org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

        if (tokensBuilder_ == null) {
          tokens_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          tokensBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedSentence_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence build() {
        org.languagetool.rules.ml.MLServerProto.AnalyzedSentence result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence buildPartial() {
        org.languagetool.rules.ml.MLServerProto.AnalyzedSentence result = new org.languagetool.rules.ml.MLServerProto.AnalyzedSentence(this);
        int from_bitField0_ = bitField0_;
        result.text_ = text_;
        if (tokensBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            tokens_ = java.util.Collections.unmodifiableList(tokens_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.tokens_ = tokens_;
        } else {
          result.tokens_ = tokensBuilder_.build();
        }
        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 org.languagetool.rules.ml.MLServerProto.AnalyzedSentence) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.AnalyzedSentence)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.AnalyzedSentence other) {
        if (other == org.languagetool.rules.ml.MLServerProto.AnalyzedSentence.getDefaultInstance()) return this;
        if (!other.getText().isEmpty()) {
          text_ = other.text_;
          onChanged();
        }
        if (tokensBuilder_ == null) {
          if (!other.tokens_.isEmpty()) {
            if (tokens_.isEmpty()) {
              tokens_ = other.tokens_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureTokensIsMutable();
              tokens_.addAll(other.tokens_);
            }
            onChanged();
          }
        } else {
          if (!other.tokens_.isEmpty()) {
            if (tokensBuilder_.isEmpty()) {
              tokensBuilder_.dispose();
              tokensBuilder_ = null;
              tokens_ = other.tokens_;
              bitField0_ = (bitField0_ & ~0x00000001);
              tokensBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTokensFieldBuilder() : null;
            } else {
              tokensBuilder_.addAllMessages(other.tokens_);
            }
          }
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.AnalyzedSentence parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.AnalyzedSentence) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object text_ = "";
      /**
       * <code>string text = 1;</code>
       * @return The text.
       */
      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 = 1;</code>
       * @return The bytes for text.
       */
      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 = 1;</code>
       * @param value The text to set.
       * @return This builder for chaining.
       */
      public Builder setText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        text_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string text = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearText() {
        
        text_ = getDefaultInstance().getText();
        onChanged();
        return this;
      }
      /**
       * <code>string text = 1;</code>
       * @param value The bytes for text to set.
       * @return This builder for chaining.
       */
      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<org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings> tokens_ =
        java.util.Collections.emptyList();
      private void ensureTokensIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          tokens_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings>(tokens_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder> tokensBuilder_;

      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings> getTokensList() {
        if (tokensBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tokens_);
        } else {
          return tokensBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public int getTokensCount() {
        if (tokensBuilder_ == null) {
          return tokens_.size();
        } else {
          return tokensBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings getTokens(int index) {
        if (tokensBuilder_ == null) {
          return tokens_.get(index);
        } else {
          return tokensBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder setTokens(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings value) {
        if (tokensBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokensIsMutable();
          tokens_.set(index, value);
          onChanged();
        } else {
          tokensBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder setTokens(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder builderForValue) {
        if (tokensBuilder_ == null) {
          ensureTokensIsMutable();
          tokens_.set(index, builderForValue.build());
          onChanged();
        } else {
          tokensBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder addTokens(org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings value) {
        if (tokensBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokensIsMutable();
          tokens_.add(value);
          onChanged();
        } else {
          tokensBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder addTokens(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings value) {
        if (tokensBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTokensIsMutable();
          tokens_.add(index, value);
          onChanged();
        } else {
          tokensBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder addTokens(
          org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder builderForValue) {
        if (tokensBuilder_ == null) {
          ensureTokensIsMutable();
          tokens_.add(builderForValue.build());
          onChanged();
        } else {
          tokensBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder addTokens(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder builderForValue) {
        if (tokensBuilder_ == null) {
          ensureTokensIsMutable();
          tokens_.add(index, builderForValue.build());
          onChanged();
        } else {
          tokensBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder addAllTokens(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings> values) {
        if (tokensBuilder_ == null) {
          ensureTokensIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, tokens_);
          onChanged();
        } else {
          tokensBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder clearTokens() {
        if (tokensBuilder_ == null) {
          tokens_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          tokensBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public Builder removeTokens(int index) {
        if (tokensBuilder_ == null) {
          ensureTokensIsMutable();
          tokens_.remove(index);
          onChanged();
        } else {
          tokensBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder getTokensBuilder(
          int index) {
        return getTokensFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder getTokensOrBuilder(
          int index) {
        if (tokensBuilder_ == null) {
          return tokens_.get(index);  } else {
          return tokensBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder> 
           getTokensOrBuilderList() {
        if (tokensBuilder_ != null) {
          return tokensBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tokens_);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder addTokensBuilder() {
        return getTokensFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder addTokensBuilder(
          int index) {
        return getTokensFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedTokenReadings tokens = 2;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder> 
           getTokensBuilderList() {
        return getTokensFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder> 
          getTokensFieldBuilder() {
        if (tokensBuilder_ == null) {
          tokensBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder>(
                  tokens_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          tokens_ = null;
        }
        return tokensBuilder_;
      }
      @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:lt_ml_server.AnalyzedSentence)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.AnalyzedSentence)
    private static final org.languagetool.rules.ml.MLServerProto.AnalyzedSentence DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.AnalyzedSentence();
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedSentence getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AnalyzedTokenReadingsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.AnalyzedTokenReadings)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedToken> 
        getReadingsList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedToken getReadings(int index);
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    int getReadingsCount();
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder> 
        getReadingsOrBuilderList();
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder getReadingsOrBuilder(
        int index);

    /**
     * <code>repeated string chunkTags = 2;</code>
     * @return A list containing the chunkTags.
     */
    java.util.List<java.lang.String>
        getChunkTagsList();
    /**
     * <code>repeated string chunkTags = 2;</code>
     * @return The count of chunkTags.
     */
    int getChunkTagsCount();
    /**
     * <code>repeated string chunkTags = 2;</code>
     * @param index The index of the element to return.
     * @return The chunkTags at the given index.
     */
    java.lang.String getChunkTags(int index);
    /**
     * <code>repeated string chunkTags = 2;</code>
     * @param index The index of the value to return.
     * @return The bytes of the chunkTags at the given index.
     */
    com.google.protobuf.ByteString
        getChunkTagsBytes(int index);

    /**
     * <code>int32 startPos = 3;</code>
     * @return The startPos.
     */
    int getStartPos();
  }
  /**
   * Protobuf type {@code lt_ml_server.AnalyzedTokenReadings}
   */
  public static final class AnalyzedTokenReadings extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.AnalyzedTokenReadings)
      AnalyzedTokenReadingsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AnalyzedTokenReadings.newBuilder() to construct.
    private AnalyzedTokenReadings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AnalyzedTokenReadings() {
      readings_ = java.util.Collections.emptyList();
      chunkTags_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AnalyzedTokenReadings();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private AnalyzedTokenReadings(
        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: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                readings_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedToken>();
                mutable_bitField0_ |= 0x00000001;
              }
              readings_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.AnalyzedToken.parser(), extensionRegistry));
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                chunkTags_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              chunkTags_.add(s);
              break;
            }
            case 24: {

              startPos_ = 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_ & 0x00000001) != 0)) {
          readings_ = java.util.Collections.unmodifiableList(readings_);
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          chunkTags_ = chunkTags_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedTokenReadings_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedTokenReadings_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.class, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder.class);
    }

    public static final int READINGS_FIELD_NUMBER = 1;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedToken> readings_;
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedToken> getReadingsList() {
      return readings_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder> 
        getReadingsOrBuilderList() {
      return readings_;
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    @java.lang.Override
    public int getReadingsCount() {
      return readings_.size();
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedToken getReadings(int index) {
      return readings_.get(index);
    }
    /**
     * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder getReadingsOrBuilder(
        int index) {
      return readings_.get(index);
    }

    public static final int CHUNKTAGS_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList chunkTags_;
    /**
     * <code>repeated string chunkTags = 2;</code>
     * @return A list containing the chunkTags.
     */
    public com.google.protobuf.ProtocolStringList
        getChunkTagsList() {
      return chunkTags_;
    }
    /**
     * <code>repeated string chunkTags = 2;</code>
     * @return The count of chunkTags.
     */
    public int getChunkTagsCount() {
      return chunkTags_.size();
    }
    /**
     * <code>repeated string chunkTags = 2;</code>
     * @param index The index of the element to return.
     * @return The chunkTags at the given index.
     */
    public java.lang.String getChunkTags(int index) {
      return chunkTags_.get(index);
    }
    /**
     * <code>repeated string chunkTags = 2;</code>
     * @param index The index of the value to return.
     * @return The bytes of the chunkTags at the given index.
     */
    public com.google.protobuf.ByteString
        getChunkTagsBytes(int index) {
      return chunkTags_.getByteString(index);
    }

    public static final int STARTPOS_FIELD_NUMBER = 3;
    private int startPos_;
    /**
     * <code>int32 startPos = 3;</code>
     * @return The startPos.
     */
    @java.lang.Override
    public int getStartPos() {
      return startPos_;
    }

    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 {
      for (int i = 0; i < readings_.size(); i++) {
        output.writeMessage(1, readings_.get(i));
      }
      for (int i = 0; i < chunkTags_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, chunkTags_.getRaw(i));
      }
      if (startPos_ != 0) {
        output.writeInt32(3, startPos_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < readings_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, readings_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < chunkTags_.size(); i++) {
          dataSize += computeStringSizeNoTag(chunkTags_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getChunkTagsList().size();
      }
      if (startPos_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, startPos_);
      }
      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 org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings other = (org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings) obj;

      if (!getReadingsList()
          .equals(other.getReadingsList())) return false;
      if (!getChunkTagsList()
          .equals(other.getChunkTagsList())) return false;
      if (getStartPos()
          != other.getStartPos()) 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();
      if (getReadingsCount() > 0) {
        hash = (37 * hash) + READINGS_FIELD_NUMBER;
        hash = (53 * hash) + getReadingsList().hashCode();
      }
      if (getChunkTagsCount() > 0) {
        hash = (37 * hash) + CHUNKTAGS_FIELD_NUMBER;
        hash = (53 * hash) + getChunkTagsList().hashCode();
      }
      hash = (37 * hash) + STARTPOS_FIELD_NUMBER;
      hash = (53 * hash) + getStartPos();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings 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 org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings 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 org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings 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(org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings 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 lt_ml_server.AnalyzedTokenReadings}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.AnalyzedTokenReadings)
        org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadingsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedTokenReadings_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedTokenReadings_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.class, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getReadingsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (readingsBuilder_ == null) {
          readings_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          readingsBuilder_.clear();
        }
        chunkTags_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        startPos_ = 0;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedTokenReadings_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings build() {
        org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings buildPartial() {
        org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings result = new org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings(this);
        int from_bitField0_ = bitField0_;
        if (readingsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            readings_ = java.util.Collections.unmodifiableList(readings_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.readings_ = readings_;
        } else {
          result.readings_ = readingsBuilder_.build();
        }
        if (((bitField0_ & 0x00000002) != 0)) {
          chunkTags_ = chunkTags_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.chunkTags_ = chunkTags_;
        result.startPos_ = startPos_;
        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 org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings other) {
        if (other == org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings.getDefaultInstance()) return this;
        if (readingsBuilder_ == null) {
          if (!other.readings_.isEmpty()) {
            if (readings_.isEmpty()) {
              readings_ = other.readings_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureReadingsIsMutable();
              readings_.addAll(other.readings_);
            }
            onChanged();
          }
        } else {
          if (!other.readings_.isEmpty()) {
            if (readingsBuilder_.isEmpty()) {
              readingsBuilder_.dispose();
              readingsBuilder_ = null;
              readings_ = other.readings_;
              bitField0_ = (bitField0_ & ~0x00000001);
              readingsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getReadingsFieldBuilder() : null;
            } else {
              readingsBuilder_.addAllMessages(other.readings_);
            }
          }
        }
        if (!other.chunkTags_.isEmpty()) {
          if (chunkTags_.isEmpty()) {
            chunkTags_ = other.chunkTags_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureChunkTagsIsMutable();
            chunkTags_.addAll(other.chunkTags_);
          }
          onChanged();
        }
        if (other.getStartPos() != 0) {
          setStartPos(other.getStartPos());
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedToken> readings_ =
        java.util.Collections.emptyList();
      private void ensureReadingsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          readings_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.AnalyzedToken>(readings_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedToken, org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder> readingsBuilder_;

      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedToken> getReadingsList() {
        if (readingsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(readings_);
        } else {
          return readingsBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public int getReadingsCount() {
        if (readingsBuilder_ == null) {
          return readings_.size();
        } else {
          return readingsBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedToken getReadings(int index) {
        if (readingsBuilder_ == null) {
          return readings_.get(index);
        } else {
          return readingsBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder setReadings(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedToken value) {
        if (readingsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReadingsIsMutable();
          readings_.set(index, value);
          onChanged();
        } else {
          readingsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder setReadings(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder builderForValue) {
        if (readingsBuilder_ == null) {
          ensureReadingsIsMutable();
          readings_.set(index, builderForValue.build());
          onChanged();
        } else {
          readingsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder addReadings(org.languagetool.rules.ml.MLServerProto.AnalyzedToken value) {
        if (readingsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReadingsIsMutable();
          readings_.add(value);
          onChanged();
        } else {
          readingsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder addReadings(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedToken value) {
        if (readingsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReadingsIsMutable();
          readings_.add(index, value);
          onChanged();
        } else {
          readingsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder addReadings(
          org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder builderForValue) {
        if (readingsBuilder_ == null) {
          ensureReadingsIsMutable();
          readings_.add(builderForValue.build());
          onChanged();
        } else {
          readingsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder addReadings(
          int index, org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder builderForValue) {
        if (readingsBuilder_ == null) {
          ensureReadingsIsMutable();
          readings_.add(index, builderForValue.build());
          onChanged();
        } else {
          readingsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder addAllReadings(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedToken> values) {
        if (readingsBuilder_ == null) {
          ensureReadingsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, readings_);
          onChanged();
        } else {
          readingsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder clearReadings() {
        if (readingsBuilder_ == null) {
          readings_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          readingsBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public Builder removeReadings(int index) {
        if (readingsBuilder_ == null) {
          ensureReadingsIsMutable();
          readings_.remove(index);
          onChanged();
        } else {
          readingsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder getReadingsBuilder(
          int index) {
        return getReadingsFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder getReadingsOrBuilder(
          int index) {
        if (readingsBuilder_ == null) {
          return readings_.get(index);  } else {
          return readingsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder> 
           getReadingsOrBuilderList() {
        if (readingsBuilder_ != null) {
          return readingsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(readings_);
        }
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder addReadingsBuilder() {
        return getReadingsFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.AnalyzedToken.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder addReadingsBuilder(
          int index) {
        return getReadingsFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.AnalyzedToken.getDefaultInstance());
      }
      /**
       * <code>repeated .lt_ml_server.AnalyzedToken readings = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder> 
           getReadingsBuilderList() {
        return getReadingsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.AnalyzedToken, org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder> 
          getReadingsFieldBuilder() {
        if (readingsBuilder_ == null) {
          readingsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.AnalyzedToken, org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder, org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder>(
                  readings_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          readings_ = null;
        }
        return readingsBuilder_;
      }

      private com.google.protobuf.LazyStringList chunkTags_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureChunkTagsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          chunkTags_ = new com.google.protobuf.LazyStringArrayList(chunkTags_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @return A list containing the chunkTags.
       */
      public com.google.protobuf.ProtocolStringList
          getChunkTagsList() {
        return chunkTags_.getUnmodifiableView();
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @return The count of chunkTags.
       */
      public int getChunkTagsCount() {
        return chunkTags_.size();
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @param index The index of the element to return.
       * @return The chunkTags at the given index.
       */
      public java.lang.String getChunkTags(int index) {
        return chunkTags_.get(index);
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @param index The index of the value to return.
       * @return The bytes of the chunkTags at the given index.
       */
      public com.google.protobuf.ByteString
          getChunkTagsBytes(int index) {
        return chunkTags_.getByteString(index);
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @param index The index to set the value at.
       * @param value The chunkTags to set.
       * @return This builder for chaining.
       */
      public Builder setChunkTags(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureChunkTagsIsMutable();
        chunkTags_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @param value The chunkTags to add.
       * @return This builder for chaining.
       */
      public Builder addChunkTags(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureChunkTagsIsMutable();
        chunkTags_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @param values The chunkTags to add.
       * @return This builder for chaining.
       */
      public Builder addAllChunkTags(
          java.lang.Iterable<java.lang.String> values) {
        ensureChunkTagsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, chunkTags_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearChunkTags() {
        chunkTags_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string chunkTags = 2;</code>
       * @param value The bytes of the chunkTags to add.
       * @return This builder for chaining.
       */
      public Builder addChunkTagsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureChunkTagsIsMutable();
        chunkTags_.add(value);
        onChanged();
        return this;
      }

      private int startPos_ ;
      /**
       * <code>int32 startPos = 3;</code>
       * @return The startPos.
       */
      @java.lang.Override
      public int getStartPos() {
        return startPos_;
      }
      /**
       * <code>int32 startPos = 3;</code>
       * @param value The startPos to set.
       * @return This builder for chaining.
       */
      public Builder setStartPos(int value) {
        
        startPos_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>int32 startPos = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearStartPos() {
        
        startPos_ = 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:lt_ml_server.AnalyzedTokenReadings)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.AnalyzedTokenReadings)
    private static final org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings();
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedTokenReadings getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface AnalyzedTokenOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.AnalyzedToken)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string token = 1;</code>
     * @return The token.
     */
    java.lang.String getToken();
    /**
     * <code>string token = 1;</code>
     * @return The bytes for token.
     */
    com.google.protobuf.ByteString
        getTokenBytes();

    /**
     * <code>string posTag = 2;</code>
     * @return The posTag.
     */
    java.lang.String getPosTag();
    /**
     * <code>string posTag = 2;</code>
     * @return The bytes for posTag.
     */
    com.google.protobuf.ByteString
        getPosTagBytes();

    /**
     * <code>string lemma = 3;</code>
     * @return The lemma.
     */
    java.lang.String getLemma();
    /**
     * <code>string lemma = 3;</code>
     * @return The bytes for lemma.
     */
    com.google.protobuf.ByteString
        getLemmaBytes();
  }
  /**
   * Protobuf type {@code lt_ml_server.AnalyzedToken}
   */
  public static final class AnalyzedToken extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.AnalyzedToken)
      AnalyzedTokenOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use AnalyzedToken.newBuilder() to construct.
    private AnalyzedToken(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private AnalyzedToken() {
      token_ = "";
      posTag_ = "";
      lemma_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new AnalyzedToken();
    }

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

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

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

              lemma_ = 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 org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedToken_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedToken_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.AnalyzedToken.class, org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder.class);
    }

    public static final int TOKEN_FIELD_NUMBER = 1;
    private volatile java.lang.Object token_;
    /**
     * <code>string token = 1;</code>
     * @return The token.
     */
    @java.lang.Override
    public java.lang.String getToken() {
      java.lang.Object ref = token_;
      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();
        token_ = s;
        return s;
      }
    }
    /**
     * <code>string token = 1;</code>
     * @return The bytes for token.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getTokenBytes() {
      java.lang.Object ref = token_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        token_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int POSTAG_FIELD_NUMBER = 2;
    private volatile java.lang.Object posTag_;
    /**
     * <code>string posTag = 2;</code>
     * @return The posTag.
     */
    @java.lang.Override
    public java.lang.String getPosTag() {
      java.lang.Object ref = posTag_;
      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();
        posTag_ = s;
        return s;
      }
    }
    /**
     * <code>string posTag = 2;</code>
     * @return The bytes for posTag.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPosTagBytes() {
      java.lang.Object ref = posTag_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        posTag_ = 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>
     * @return The lemma.
     */
    @java.lang.Override
    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>
     * @return The bytes for lemma.
     */
    @java.lang.Override
    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;
      }
    }

    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 (!getTokenBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, token_);
      }
      if (!getPosTagBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, posTag_);
      }
      if (!getLemmaBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, lemma_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getTokenBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, token_);
      }
      if (!getPosTagBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, posTag_);
      }
      if (!getLemmaBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, lemma_);
      }
      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 org.languagetool.rules.ml.MLServerProto.AnalyzedToken)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.AnalyzedToken other = (org.languagetool.rules.ml.MLServerProto.AnalyzedToken) obj;

      if (!getToken()
          .equals(other.getToken())) return false;
      if (!getPosTag()
          .equals(other.getPosTag())) return false;
      if (!getLemma()
          .equals(other.getLemma())) 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) + TOKEN_FIELD_NUMBER;
      hash = (53 * hash) + getToken().hashCode();
      hash = (37 * hash) + POSTAG_FIELD_NUMBER;
      hash = (53 * hash) + getPosTag().hashCode();
      hash = (37 * hash) + LEMMA_FIELD_NUMBER;
      hash = (53 * hash) + getLemma().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken 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 org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken 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 org.languagetool.rules.ml.MLServerProto.AnalyzedToken parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken 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(org.languagetool.rules.ml.MLServerProto.AnalyzedToken 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 lt_ml_server.AnalyzedToken}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.AnalyzedToken)
        org.languagetool.rules.ml.MLServerProto.AnalyzedTokenOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedToken_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedToken_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.AnalyzedToken.class, org.languagetool.rules.ml.MLServerProto.AnalyzedToken.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.AnalyzedToken.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();
        token_ = "";

        posTag_ = "";

        lemma_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_AnalyzedToken_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedToken getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.AnalyzedToken.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedToken build() {
        org.languagetool.rules.ml.MLServerProto.AnalyzedToken result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.AnalyzedToken buildPartial() {
        org.languagetool.rules.ml.MLServerProto.AnalyzedToken result = new org.languagetool.rules.ml.MLServerProto.AnalyzedToken(this);
        result.token_ = token_;
        result.posTag_ = posTag_;
        result.lemma_ = lemma_;
        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 org.languagetool.rules.ml.MLServerProto.AnalyzedToken) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.AnalyzedToken)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.AnalyzedToken other) {
        if (other == org.languagetool.rules.ml.MLServerProto.AnalyzedToken.getDefaultInstance()) return this;
        if (!other.getToken().isEmpty()) {
          token_ = other.token_;
          onChanged();
        }
        if (!other.getPosTag().isEmpty()) {
          posTag_ = other.posTag_;
          onChanged();
        }
        if (!other.getLemma().isEmpty()) {
          lemma_ = other.lemma_;
          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 {
        org.languagetool.rules.ml.MLServerProto.AnalyzedToken parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.AnalyzedToken) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object token_ = "";
      /**
       * <code>string token = 1;</code>
       * @return The token.
       */
      public java.lang.String getToken() {
        java.lang.Object ref = token_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          token_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string token = 1;</code>
       * @return The bytes for token.
       */
      public com.google.protobuf.ByteString
          getTokenBytes() {
        java.lang.Object ref = token_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          token_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string token = 1;</code>
       * @param value The token to set.
       * @return This builder for chaining.
       */
      public Builder setToken(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        token_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string token = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearToken() {
        
        token_ = getDefaultInstance().getToken();
        onChanged();
        return this;
      }
      /**
       * <code>string token = 1;</code>
       * @param value The bytes for token to set.
       * @return This builder for chaining.
       */
      public Builder setTokenBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        token_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object posTag_ = "";
      /**
       * <code>string posTag = 2;</code>
       * @return The posTag.
       */
      public java.lang.String getPosTag() {
        java.lang.Object ref = posTag_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          posTag_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string posTag = 2;</code>
       * @return The bytes for posTag.
       */
      public com.google.protobuf.ByteString
          getPosTagBytes() {
        java.lang.Object ref = posTag_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          posTag_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string posTag = 2;</code>
       * @param value The posTag to set.
       * @return This builder for chaining.
       */
      public Builder setPosTag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        posTag_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string posTag = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearPosTag() {
        
        posTag_ = getDefaultInstance().getPosTag();
        onChanged();
        return this;
      }
      /**
       * <code>string posTag = 2;</code>
       * @param value The bytes for posTag to set.
       * @return This builder for chaining.
       */
      public Builder setPosTagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        posTag_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object lemma_ = "";
      /**
       * <code>string lemma = 3;</code>
       * @return The lemma.
       */
      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>
       * @return The bytes for lemma.
       */
      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>
       * @param value The lemma to set.
       * @return This builder for chaining.
       */
      public Builder setLemma(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        lemma_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string lemma = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearLemma() {
        
        lemma_ = getDefaultInstance().getLemma();
        onChanged();
        return this;
      }
      /**
       * <code>string lemma = 3;</code>
       * @param value The bytes for lemma to set.
       * @return This builder for chaining.
       */
      public Builder setLemmaBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        lemma_ = 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:lt_ml_server.AnalyzedToken)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.AnalyzedToken)
    private static final org.languagetool.rules.ml.MLServerProto.AnalyzedToken DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.AnalyzedToken();
    }

    public static org.languagetool.rules.ml.MLServerProto.AnalyzedToken getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.AnalyzedToken getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface PostProcessingRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.PostProcessingRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @return A list containing the sentences.
     */
    java.util.List<java.lang.String>
        getSentencesList();
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @return The count of sentences.
     */
    int getSentencesCount();
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @param index The index of the element to return.
     * @return The sentences at the given index.
     */
    java.lang.String getSentences(int index);
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @param index The index of the value to return.
     * @return The bytes of the sentences at the given index.
     */
    com.google.protobuf.ByteString
        getSentencesBytes(int index);

    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> 
        getMatchesList();
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    org.languagetool.rules.ml.MLServerProto.MatchList getMatches(int index);
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    int getMatchesCount();
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> 
        getMatchesOrBuilderList();
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder getMatchesOrBuilder(
        int index);

    /**
     * <pre>
     * allow logging of input on error
     * </pre>
     *
     * <code>bool inputLogging = 3;</code>
     * @return The inputLogging.
     */
    boolean getInputLogging();

    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 4;</code>
     * @return A list containing the textSessionID.
     */
    java.util.List<java.lang.Long> getTextSessionIDList();
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 4;</code>
     * @return The count of textSessionID.
     */
    int getTextSessionIDCount();
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 4;</code>
     * @param index The index of the element to return.
     * @return The textSessionID at the given index.
     */
    long getTextSessionID(int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.PostProcessingRequest}
   */
  public static final class PostProcessingRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.PostProcessingRequest)
      PostProcessingRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use PostProcessingRequest.newBuilder() to construct.
    private PostProcessingRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private PostProcessingRequest() {
      sentences_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      matches_ = java.util.Collections.emptyList();
      textSessionID_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new PostProcessingRequest();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private PostProcessingRequest(
        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();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                sentences_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              sentences_.add(s);
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                matches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.MatchList>();
                mutable_bitField0_ |= 0x00000002;
              }
              matches_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.MatchList.parser(), extensionRegistry));
              break;
            }
            case 24: {

              inputLogging_ = input.readBool();
              break;
            }
            case 32: {
              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
                textSessionID_ = newLongList();
                mutable_bitField0_ |= 0x00000004;
              }
              textSessionID_.addLong(input.readInt64());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000004) != 0) && input.getBytesUntilLimit() > 0) {
                textSessionID_ = newLongList();
                mutable_bitField0_ |= 0x00000004;
              }
              while (input.getBytesUntilLimit() > 0) {
                textSessionID_.addLong(input.readInt64());
              }
              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_ & 0x00000001) != 0)) {
          sentences_ = sentences_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          matches_ = java.util.Collections.unmodifiableList(matches_);
        }
        if (((mutable_bitField0_ & 0x00000004) != 0)) {
          textSessionID_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_PostProcessingRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_PostProcessingRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.PostProcessingRequest.class, org.languagetool.rules.ml.MLServerProto.PostProcessingRequest.Builder.class);
    }

    public static final int SENTENCES_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList sentences_;
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @return A list containing the sentences.
     */
    public com.google.protobuf.ProtocolStringList
        getSentencesList() {
      return sentences_;
    }
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @return The count of sentences.
     */
    public int getSentencesCount() {
      return sentences_.size();
    }
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @param index The index of the element to return.
     * @return The sentences at the given index.
     */
    public java.lang.String getSentences(int index) {
      return sentences_.get(index);
    }
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @param index The index of the value to return.
     * @return The bytes of the sentences at the given index.
     */
    public com.google.protobuf.ByteString
        getSentencesBytes(int index) {
      return sentences_.getByteString(index);
    }

    public static final int MATCHES_FIELD_NUMBER = 2;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> matches_;
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> getMatchesList() {
      return matches_;
    }
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> 
        getMatchesOrBuilderList() {
      return matches_;
    }
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    @java.lang.Override
    public int getMatchesCount() {
      return matches_.size();
    }
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchList getMatches(int index) {
      return matches_.get(index);
    }
    /**
     * <pre>
     * matches of input text, to be transformed
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder getMatchesOrBuilder(
        int index) {
      return matches_.get(index);
    }

    public static final int INPUTLOGGING_FIELD_NUMBER = 3;
    private boolean inputLogging_;
    /**
     * <pre>
     * allow logging of input on error
     * </pre>
     *
     * <code>bool inputLogging = 3;</code>
     * @return The inputLogging.
     */
    @java.lang.Override
    public boolean getInputLogging() {
      return inputLogging_;
    }

    public static final int TEXTSESSIONID_FIELD_NUMBER = 4;
    private com.google.protobuf.Internal.LongList textSessionID_;
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 4;</code>
     * @return A list containing the textSessionID.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getTextSessionIDList() {
      return textSessionID_;
    }
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 4;</code>
     * @return The count of textSessionID.
     */
    public int getTextSessionIDCount() {
      return textSessionID_.size();
    }
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 4;</code>
     * @param index The index of the element to return.
     * @return The textSessionID at the given index.
     */
    public long getTextSessionID(int index) {
      return textSessionID_.getLong(index);
    }
    private int textSessionIDMemoizedSerializedSize = -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();
      for (int i = 0; i < sentences_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sentences_.getRaw(i));
      }
      for (int i = 0; i < matches_.size(); i++) {
        output.writeMessage(2, matches_.get(i));
      }
      if (inputLogging_ != false) {
        output.writeBool(3, inputLogging_);
      }
      if (getTextSessionIDList().size() > 0) {
        output.writeUInt32NoTag(34);
        output.writeUInt32NoTag(textSessionIDMemoizedSerializedSize);
      }
      for (int i = 0; i < textSessionID_.size(); i++) {
        output.writeInt64NoTag(textSessionID_.getLong(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < sentences_.size(); i++) {
          dataSize += computeStringSizeNoTag(sentences_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getSentencesList().size();
      }
      for (int i = 0; i < matches_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, matches_.get(i));
      }
      if (inputLogging_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, inputLogging_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < textSessionID_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt64SizeNoTag(textSessionID_.getLong(i));
        }
        size += dataSize;
        if (!getTextSessionIDList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        textSessionIDMemoizedSerializedSize = 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 org.languagetool.rules.ml.MLServerProto.PostProcessingRequest)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.PostProcessingRequest other = (org.languagetool.rules.ml.MLServerProto.PostProcessingRequest) obj;

      if (!getSentencesList()
          .equals(other.getSentencesList())) return false;
      if (!getMatchesList()
          .equals(other.getMatchesList())) return false;
      if (getInputLogging()
          != other.getInputLogging()) return false;
      if (!getTextSessionIDList()
          .equals(other.getTextSessionIDList())) 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();
      if (getSentencesCount() > 0) {
        hash = (37 * hash) + SENTENCES_FIELD_NUMBER;
        hash = (53 * hash) + getSentencesList().hashCode();
      }
      if (getMatchesCount() > 0) {
        hash = (37 * hash) + MATCHES_FIELD_NUMBER;
        hash = (53 * hash) + getMatchesList().hashCode();
      }
      hash = (37 * hash) + INPUTLOGGING_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getInputLogging());
      if (getTextSessionIDCount() > 0) {
        hash = (37 * hash) + TEXTSESSIONID_FIELD_NUMBER;
        hash = (53 * hash) + getTextSessionIDList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest 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 org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest 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 org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest 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(org.languagetool.rules.ml.MLServerProto.PostProcessingRequest 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 lt_ml_server.PostProcessingRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.PostProcessingRequest)
        org.languagetool.rules.ml.MLServerProto.PostProcessingRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_PostProcessingRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_PostProcessingRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.PostProcessingRequest.class, org.languagetool.rules.ml.MLServerProto.PostProcessingRequest.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.PostProcessingRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMatchesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        sentences_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (matchesBuilder_ == null) {
          matches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          matchesBuilder_.clear();
        }
        inputLogging_ = false;

        textSessionID_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_PostProcessingRequest_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.PostProcessingRequest getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.PostProcessingRequest.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.PostProcessingRequest build() {
        org.languagetool.rules.ml.MLServerProto.PostProcessingRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.PostProcessingRequest buildPartial() {
        org.languagetool.rules.ml.MLServerProto.PostProcessingRequest result = new org.languagetool.rules.ml.MLServerProto.PostProcessingRequest(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) != 0)) {
          sentences_ = sentences_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.sentences_ = sentences_;
        if (matchesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            matches_ = java.util.Collections.unmodifiableList(matches_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.matches_ = matches_;
        } else {
          result.matches_ = matchesBuilder_.build();
        }
        result.inputLogging_ = inputLogging_;
        if (((bitField0_ & 0x00000004) != 0)) {
          textSessionID_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.textSessionID_ = textSessionID_;
        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 org.languagetool.rules.ml.MLServerProto.PostProcessingRequest) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.PostProcessingRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.PostProcessingRequest other) {
        if (other == org.languagetool.rules.ml.MLServerProto.PostProcessingRequest.getDefaultInstance()) return this;
        if (!other.sentences_.isEmpty()) {
          if (sentences_.isEmpty()) {
            sentences_ = other.sentences_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureSentencesIsMutable();
            sentences_.addAll(other.sentences_);
          }
          onChanged();
        }
        if (matchesBuilder_ == null) {
          if (!other.matches_.isEmpty()) {
            if (matches_.isEmpty()) {
              matches_ = other.matches_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureMatchesIsMutable();
              matches_.addAll(other.matches_);
            }
            onChanged();
          }
        } else {
          if (!other.matches_.isEmpty()) {
            if (matchesBuilder_.isEmpty()) {
              matchesBuilder_.dispose();
              matchesBuilder_ = null;
              matches_ = other.matches_;
              bitField0_ = (bitField0_ & ~0x00000002);
              matchesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMatchesFieldBuilder() : null;
            } else {
              matchesBuilder_.addAllMessages(other.matches_);
            }
          }
        }
        if (other.getInputLogging() != false) {
          setInputLogging(other.getInputLogging());
        }
        if (!other.textSessionID_.isEmpty()) {
          if (textSessionID_.isEmpty()) {
            textSessionID_ = other.textSessionID_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureTextSessionIDIsMutable();
            textSessionID_.addAll(other.textSessionID_);
          }
          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 {
        org.languagetool.rules.ml.MLServerProto.PostProcessingRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.PostProcessingRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList sentences_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSentencesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          sentences_ = new com.google.protobuf.LazyStringArrayList(sentences_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @return A list containing the sentences.
       */
      public com.google.protobuf.ProtocolStringList
          getSentencesList() {
        return sentences_.getUnmodifiableView();
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @return The count of sentences.
       */
      public int getSentencesCount() {
        return sentences_.size();
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param index The index of the element to return.
       * @return The sentences at the given index.
       */
      public java.lang.String getSentences(int index) {
        return sentences_.get(index);
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param index The index of the value to return.
       * @return The bytes of the sentences at the given index.
       */
      public com.google.protobuf.ByteString
          getSentencesBytes(int index) {
        return sentences_.getByteString(index);
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param index The index to set the value at.
       * @param value The sentences to set.
       * @return This builder for chaining.
       */
      public Builder setSentences(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSentencesIsMutable();
        sentences_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param value The sentences to add.
       * @return This builder for chaining.
       */
      public Builder addSentences(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSentencesIsMutable();
        sentences_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param values The sentences to add.
       * @return This builder for chaining.
       */
      public Builder addAllSentences(
          java.lang.Iterable<java.lang.String> values) {
        ensureSentencesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, sentences_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSentences() {
        sentences_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param value The bytes of the sentences to add.
       * @return This builder for chaining.
       */
      public Builder addSentencesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureSentencesIsMutable();
        sentences_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> matches_ =
        java.util.Collections.emptyList();
      private void ensureMatchesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          matches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.MatchList>(matches_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.MatchList, org.languagetool.rules.ml.MLServerProto.MatchList.Builder, org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> matchesBuilder_;

      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> getMatchesList() {
        if (matchesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(matches_);
        } else {
          return matchesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public int getMatchesCount() {
        if (matchesBuilder_ == null) {
          return matches_.size();
        } else {
          return matchesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchList getMatches(int index) {
        if (matchesBuilder_ == null) {
          return matches_.get(index);
        } else {
          return matchesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder setMatches(
          int index, org.languagetool.rules.ml.MLServerProto.MatchList value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.set(index, value);
          onChanged();
        } else {
          matchesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder setMatches(
          int index, org.languagetool.rules.ml.MLServerProto.MatchList.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.set(index, builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder addMatches(org.languagetool.rules.ml.MLServerProto.MatchList value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.add(value);
          onChanged();
        } else {
          matchesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder addMatches(
          int index, org.languagetool.rules.ml.MLServerProto.MatchList value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.add(index, value);
          onChanged();
        } else {
          matchesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder addMatches(
          org.languagetool.rules.ml.MLServerProto.MatchList.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.add(builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder addMatches(
          int index, org.languagetool.rules.ml.MLServerProto.MatchList.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.add(index, builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder addAllMatches(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.MatchList> values) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, matches_);
          onChanged();
        } else {
          matchesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder clearMatches() {
        if (matchesBuilder_ == null) {
          matches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          matchesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public Builder removeMatches(int index) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.remove(index);
          onChanged();
        } else {
          matchesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchList.Builder getMatchesBuilder(
          int index) {
        return getMatchesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder getMatchesOrBuilder(
          int index) {
        if (matchesBuilder_ == null) {
          return matches_.get(index);  } else {
          return matchesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> 
           getMatchesOrBuilderList() {
        if (matchesBuilder_ != null) {
          return matchesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(matches_);
        }
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchList.Builder addMatchesBuilder() {
        return getMatchesFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.MatchList.getDefaultInstance());
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchList.Builder addMatchesBuilder(
          int index) {
        return getMatchesFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.MatchList.getDefaultInstance());
      }
      /**
       * <pre>
       * matches of input text, to be transformed
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList matches = 2;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList.Builder> 
           getMatchesBuilderList() {
        return getMatchesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.MatchList, org.languagetool.rules.ml.MLServerProto.MatchList.Builder, org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> 
          getMatchesFieldBuilder() {
        if (matchesBuilder_ == null) {
          matchesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.MatchList, org.languagetool.rules.ml.MLServerProto.MatchList.Builder, org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder>(
                  matches_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          matches_ = null;
        }
        return matchesBuilder_;
      }

      private boolean inputLogging_ ;
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 3;</code>
       * @return The inputLogging.
       */
      @java.lang.Override
      public boolean getInputLogging() {
        return inputLogging_;
      }
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 3;</code>
       * @param value The inputLogging to set.
       * @return This builder for chaining.
       */
      public Builder setInputLogging(boolean value) {
        
        inputLogging_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearInputLogging() {
        
        inputLogging_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList textSessionID_ = emptyLongList();
      private void ensureTextSessionIDIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          textSessionID_ = mutableCopy(textSessionID_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 4;</code>
       * @return A list containing the textSessionID.
       */
      public java.util.List<java.lang.Long>
          getTextSessionIDList() {
        return ((bitField0_ & 0x00000004) != 0) ?
                 java.util.Collections.unmodifiableList(textSessionID_) : textSessionID_;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 4;</code>
       * @return The count of textSessionID.
       */
      public int getTextSessionIDCount() {
        return textSessionID_.size();
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 4;</code>
       * @param index The index of the element to return.
       * @return The textSessionID at the given index.
       */
      public long getTextSessionID(int index) {
        return textSessionID_.getLong(index);
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 4;</code>
       * @param index The index to set the value at.
       * @param value The textSessionID to set.
       * @return This builder for chaining.
       */
      public Builder setTextSessionID(
          int index, long value) {
        ensureTextSessionIDIsMutable();
        textSessionID_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 4;</code>
       * @param value The textSessionID to add.
       * @return This builder for chaining.
       */
      public Builder addTextSessionID(long value) {
        ensureTextSessionIDIsMutable();
        textSessionID_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 4;</code>
       * @param values The textSessionID to add.
       * @return This builder for chaining.
       */
      public Builder addAllTextSessionID(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTextSessionIDIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, textSessionID_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearTextSessionID() {
        textSessionID_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000004);
        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:lt_ml_server.PostProcessingRequest)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.PostProcessingRequest)
    private static final org.languagetool.rules.ml.MLServerProto.PostProcessingRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.PostProcessingRequest();
    }

    public static org.languagetool.rules.ml.MLServerProto.PostProcessingRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.PostProcessingRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MatchRequestOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.MatchRequest)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @return A list containing the sentences.
     */
    java.util.List<java.lang.String>
        getSentencesList();
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @return The count of sentences.
     */
    int getSentencesCount();
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @param index The index of the element to return.
     * @return The sentences at the given index.
     */
    java.lang.String getSentences(int index);
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @param index The index of the value to return.
     * @return The bytes of the sentences at the given index.
     */
    com.google.protobuf.ByteString
        getSentencesBytes(int index);

    /**
     * <pre>
     * allow logging of input on error
     * </pre>
     *
     * <code>bool inputLogging = 2;</code>
     * @return The inputLogging.
     */
    boolean getInputLogging();

    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @return A list containing the textSessionID.
     */
    java.util.List<java.lang.Long> getTextSessionIDList();
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @return The count of textSessionID.
     */
    int getTextSessionIDCount();
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @param index The index of the element to return.
     * @return The textSessionID at the given index.
     */
    long getTextSessionID(int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.MatchRequest}
   */
  public static final class MatchRequest extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.MatchRequest)
      MatchRequestOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MatchRequest.newBuilder() to construct.
    private MatchRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MatchRequest() {
      sentences_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      textSessionID_ = emptyLongList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new MatchRequest();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MatchRequest(
        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();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                sentences_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              sentences_.add(s);
              break;
            }
            case 16: {

              inputLogging_ = input.readBool();
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                textSessionID_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              textSessionID_.addLong(input.readInt64());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) != 0) && input.getBytesUntilLimit() > 0) {
                textSessionID_ = newLongList();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                textSessionID_.addLong(input.readInt64());
              }
              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_ & 0x00000001) != 0)) {
          sentences_ = sentences_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          textSessionID_.makeImmutable(); // C
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchRequest_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.MatchRequest.class, org.languagetool.rules.ml.MLServerProto.MatchRequest.Builder.class);
    }

    public static final int SENTENCES_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList sentences_;
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @return A list containing the sentences.
     */
    public com.google.protobuf.ProtocolStringList
        getSentencesList() {
      return sentences_;
    }
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @return The count of sentences.
     */
    public int getSentencesCount() {
      return sentences_.size();
    }
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @param index The index of the element to return.
     * @return The sentences at the given index.
     */
    public java.lang.String getSentences(int index) {
      return sentences_.get(index);
    }
    /**
     * <pre>
     * input text to be analyzed
     * </pre>
     *
     * <code>repeated string sentences = 1;</code>
     * @param index The index of the value to return.
     * @return The bytes of the sentences at the given index.
     */
    public com.google.protobuf.ByteString
        getSentencesBytes(int index) {
      return sentences_.getByteString(index);
    }

    public static final int INPUTLOGGING_FIELD_NUMBER = 2;
    private boolean inputLogging_;
    /**
     * <pre>
     * allow logging of input on error
     * </pre>
     *
     * <code>bool inputLogging = 2;</code>
     * @return The inputLogging.
     */
    @java.lang.Override
    public boolean getInputLogging() {
      return inputLogging_;
    }

    public static final int TEXTSESSIONID_FIELD_NUMBER = 3;
    private com.google.protobuf.Internal.LongList textSessionID_;
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @return A list containing the textSessionID.
     */
    @java.lang.Override
    public java.util.List<java.lang.Long>
        getTextSessionIDList() {
      return textSessionID_;
    }
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @return The count of textSessionID.
     */
    public int getTextSessionIDCount() {
      return textSessionID_.size();
    }
    /**
     * <pre>
     * session ID, for partial rollout &amp; A/B tests
     * </pre>
     *
     * <code>repeated int64 textSessionID = 3;</code>
     * @param index The index of the element to return.
     * @return The textSessionID at the given index.
     */
    public long getTextSessionID(int index) {
      return textSessionID_.getLong(index);
    }
    private int textSessionIDMemoizedSerializedSize = -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();
      for (int i = 0; i < sentences_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sentences_.getRaw(i));
      }
      if (inputLogging_ != false) {
        output.writeBool(2, inputLogging_);
      }
      if (getTextSessionIDList().size() > 0) {
        output.writeUInt32NoTag(26);
        output.writeUInt32NoTag(textSessionIDMemoizedSerializedSize);
      }
      for (int i = 0; i < textSessionID_.size(); i++) {
        output.writeInt64NoTag(textSessionID_.getLong(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < sentences_.size(); i++) {
          dataSize += computeStringSizeNoTag(sentences_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getSentencesList().size();
      }
      if (inputLogging_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, inputLogging_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < textSessionID_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt64SizeNoTag(textSessionID_.getLong(i));
        }
        size += dataSize;
        if (!getTextSessionIDList().isEmpty()) {
          size += 1;
          size += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(dataSize);
        }
        textSessionIDMemoizedSerializedSize = 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 org.languagetool.rules.ml.MLServerProto.MatchRequest)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.MatchRequest other = (org.languagetool.rules.ml.MLServerProto.MatchRequest) obj;

      if (!getSentencesList()
          .equals(other.getSentencesList())) return false;
      if (getInputLogging()
          != other.getInputLogging()) return false;
      if (!getTextSessionIDList()
          .equals(other.getTextSessionIDList())) 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();
      if (getSentencesCount() > 0) {
        hash = (37 * hash) + SENTENCES_FIELD_NUMBER;
        hash = (53 * hash) + getSentencesList().hashCode();
      }
      hash = (37 * hash) + INPUTLOGGING_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getInputLogging());
      if (getTextSessionIDCount() > 0) {
        hash = (37 * hash) + TEXTSESSIONID_FIELD_NUMBER;
        hash = (53 * hash) + getTextSessionIDList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.MatchRequest parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest 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 org.languagetool.rules.ml.MLServerProto.MatchRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest 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 org.languagetool.rules.ml.MLServerProto.MatchRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchRequest 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(org.languagetool.rules.ml.MLServerProto.MatchRequest 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 lt_ml_server.MatchRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.MatchRequest)
        org.languagetool.rules.ml.MLServerProto.MatchRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchRequest_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.MatchRequest.class, org.languagetool.rules.ml.MLServerProto.MatchRequest.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.MatchRequest.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();
        sentences_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        inputLogging_ = false;

        textSessionID_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchRequest_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchRequest getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.MatchRequest.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchRequest build() {
        org.languagetool.rules.ml.MLServerProto.MatchRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchRequest buildPartial() {
        org.languagetool.rules.ml.MLServerProto.MatchRequest result = new org.languagetool.rules.ml.MLServerProto.MatchRequest(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) != 0)) {
          sentences_ = sentences_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.sentences_ = sentences_;
        result.inputLogging_ = inputLogging_;
        if (((bitField0_ & 0x00000002) != 0)) {
          textSessionID_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.textSessionID_ = textSessionID_;
        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 org.languagetool.rules.ml.MLServerProto.MatchRequest) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.MatchRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.MatchRequest other) {
        if (other == org.languagetool.rules.ml.MLServerProto.MatchRequest.getDefaultInstance()) return this;
        if (!other.sentences_.isEmpty()) {
          if (sentences_.isEmpty()) {
            sentences_ = other.sentences_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureSentencesIsMutable();
            sentences_.addAll(other.sentences_);
          }
          onChanged();
        }
        if (other.getInputLogging() != false) {
          setInputLogging(other.getInputLogging());
        }
        if (!other.textSessionID_.isEmpty()) {
          if (textSessionID_.isEmpty()) {
            textSessionID_ = other.textSessionID_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureTextSessionIDIsMutable();
            textSessionID_.addAll(other.textSessionID_);
          }
          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 {
        org.languagetool.rules.ml.MLServerProto.MatchRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.MatchRequest) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private com.google.protobuf.LazyStringList sentences_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSentencesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          sentences_ = new com.google.protobuf.LazyStringArrayList(sentences_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @return A list containing the sentences.
       */
      public com.google.protobuf.ProtocolStringList
          getSentencesList() {
        return sentences_.getUnmodifiableView();
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @return The count of sentences.
       */
      public int getSentencesCount() {
        return sentences_.size();
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param index The index of the element to return.
       * @return The sentences at the given index.
       */
      public java.lang.String getSentences(int index) {
        return sentences_.get(index);
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param index The index of the value to return.
       * @return The bytes of the sentences at the given index.
       */
      public com.google.protobuf.ByteString
          getSentencesBytes(int index) {
        return sentences_.getByteString(index);
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param index The index to set the value at.
       * @param value The sentences to set.
       * @return This builder for chaining.
       */
      public Builder setSentences(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSentencesIsMutable();
        sentences_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param value The sentences to add.
       * @return This builder for chaining.
       */
      public Builder addSentences(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSentencesIsMutable();
        sentences_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param values The sentences to add.
       * @return This builder for chaining.
       */
      public Builder addAllSentences(
          java.lang.Iterable<java.lang.String> values) {
        ensureSentencesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, sentences_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSentences() {
        sentences_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * input text to be analyzed
       * </pre>
       *
       * <code>repeated string sentences = 1;</code>
       * @param value The bytes of the sentences to add.
       * @return This builder for chaining.
       */
      public Builder addSentencesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureSentencesIsMutable();
        sentences_.add(value);
        onChanged();
        return this;
      }

      private boolean inputLogging_ ;
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 2;</code>
       * @return The inputLogging.
       */
      @java.lang.Override
      public boolean getInputLogging() {
        return inputLogging_;
      }
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 2;</code>
       * @param value The inputLogging to set.
       * @return This builder for chaining.
       */
      public Builder setInputLogging(boolean value) {
        
        inputLogging_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * allow logging of input on error
       * </pre>
       *
       * <code>bool inputLogging = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearInputLogging() {
        
        inputLogging_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.LongList textSessionID_ = emptyLongList();
      private void ensureTextSessionIDIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          textSessionID_ = mutableCopy(textSessionID_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @return A list containing the textSessionID.
       */
      public java.util.List<java.lang.Long>
          getTextSessionIDList() {
        return ((bitField0_ & 0x00000002) != 0) ?
                 java.util.Collections.unmodifiableList(textSessionID_) : textSessionID_;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @return The count of textSessionID.
       */
      public int getTextSessionIDCount() {
        return textSessionID_.size();
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @param index The index of the element to return.
       * @return The textSessionID at the given index.
       */
      public long getTextSessionID(int index) {
        return textSessionID_.getLong(index);
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @param index The index to set the value at.
       * @param value The textSessionID to set.
       * @return This builder for chaining.
       */
      public Builder setTextSessionID(
          int index, long value) {
        ensureTextSessionIDIsMutable();
        textSessionID_.setLong(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @param value The textSessionID to add.
       * @return This builder for chaining.
       */
      public Builder addTextSessionID(long value) {
        ensureTextSessionIDIsMutable();
        textSessionID_.addLong(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @param values The textSessionID to add.
       * @return This builder for chaining.
       */
      public Builder addAllTextSessionID(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureTextSessionIDIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, textSessionID_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * session ID, for partial rollout &amp; A/B tests
       * </pre>
       *
       * <code>repeated int64 textSessionID = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearTextSessionID() {
        textSessionID_ = emptyLongList();
        bitField0_ = (bitField0_ & ~0x00000002);
        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:lt_ml_server.MatchRequest)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.MatchRequest)
    private static final org.languagetool.rules.ml.MLServerProto.MatchRequest DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.MatchRequest();
    }

    public static org.languagetool.rules.ml.MLServerProto.MatchRequest getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchRequest getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MatchResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.MatchResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> 
        getSentenceMatchesList();
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.MatchList getSentenceMatches(int index);
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    int getSentenceMatchesCount();
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> 
        getSentenceMatchesOrBuilderList();
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder getSentenceMatchesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.MatchResponse}
   */
  public static final class MatchResponse extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.MatchResponse)
      MatchResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MatchResponse.newBuilder() to construct.
    private MatchResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MatchResponse() {
      sentenceMatches_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new MatchResponse();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MatchResponse(
        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: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                sentenceMatches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.MatchList>();
                mutable_bitField0_ |= 0x00000001;
              }
              sentenceMatches_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.MatchList.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_ & 0x00000001) != 0)) {
          sentenceMatches_ = java.util.Collections.unmodifiableList(sentenceMatches_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.MatchResponse.class, org.languagetool.rules.ml.MLServerProto.MatchResponse.Builder.class);
    }

    public static final int SENTENCEMATCHES_FIELD_NUMBER = 1;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> sentenceMatches_;
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> getSentenceMatchesList() {
      return sentenceMatches_;
    }
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> 
        getSentenceMatchesOrBuilderList() {
      return sentenceMatches_;
    }
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    @java.lang.Override
    public int getSentenceMatchesCount() {
      return sentenceMatches_.size();
    }
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchList getSentenceMatches(int index) {
      return sentenceMatches_.get(index);
    }
    /**
     * <pre>
     * results for each corresponding sentence in MatchRequest (aligned)
     * </pre>
     *
     * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder getSentenceMatchesOrBuilder(
        int index) {
      return sentenceMatches_.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 {
      for (int i = 0; i < sentenceMatches_.size(); i++) {
        output.writeMessage(1, sentenceMatches_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < sentenceMatches_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, sentenceMatches_.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 org.languagetool.rules.ml.MLServerProto.MatchResponse)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.MatchResponse other = (org.languagetool.rules.ml.MLServerProto.MatchResponse) obj;

      if (!getSentenceMatchesList()
          .equals(other.getSentenceMatchesList())) 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();
      if (getSentenceMatchesCount() > 0) {
        hash = (37 * hash) + SENTENCEMATCHES_FIELD_NUMBER;
        hash = (53 * hash) + getSentenceMatchesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.MatchResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse 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 org.languagetool.rules.ml.MLServerProto.MatchResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse 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 org.languagetool.rules.ml.MLServerProto.MatchResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchResponse 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(org.languagetool.rules.ml.MLServerProto.MatchResponse 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 lt_ml_server.MatchResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.MatchResponse)
        org.languagetool.rules.ml.MLServerProto.MatchResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.MatchResponse.class, org.languagetool.rules.ml.MLServerProto.MatchResponse.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.MatchResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getSentenceMatchesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (sentenceMatchesBuilder_ == null) {
          sentenceMatches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          sentenceMatchesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchResponse_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchResponse getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.MatchResponse.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchResponse build() {
        org.languagetool.rules.ml.MLServerProto.MatchResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchResponse buildPartial() {
        org.languagetool.rules.ml.MLServerProto.MatchResponse result = new org.languagetool.rules.ml.MLServerProto.MatchResponse(this);
        int from_bitField0_ = bitField0_;
        if (sentenceMatchesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            sentenceMatches_ = java.util.Collections.unmodifiableList(sentenceMatches_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.sentenceMatches_ = sentenceMatches_;
        } else {
          result.sentenceMatches_ = sentenceMatchesBuilder_.build();
        }
        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 org.languagetool.rules.ml.MLServerProto.MatchResponse) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.MatchResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.MatchResponse other) {
        if (other == org.languagetool.rules.ml.MLServerProto.MatchResponse.getDefaultInstance()) return this;
        if (sentenceMatchesBuilder_ == null) {
          if (!other.sentenceMatches_.isEmpty()) {
            if (sentenceMatches_.isEmpty()) {
              sentenceMatches_ = other.sentenceMatches_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureSentenceMatchesIsMutable();
              sentenceMatches_.addAll(other.sentenceMatches_);
            }
            onChanged();
          }
        } else {
          if (!other.sentenceMatches_.isEmpty()) {
            if (sentenceMatchesBuilder_.isEmpty()) {
              sentenceMatchesBuilder_.dispose();
              sentenceMatchesBuilder_ = null;
              sentenceMatches_ = other.sentenceMatches_;
              bitField0_ = (bitField0_ & ~0x00000001);
              sentenceMatchesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSentenceMatchesFieldBuilder() : null;
            } else {
              sentenceMatchesBuilder_.addAllMessages(other.sentenceMatches_);
            }
          }
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.MatchResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.MatchResponse) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> sentenceMatches_ =
        java.util.Collections.emptyList();
      private void ensureSentenceMatchesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          sentenceMatches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.MatchList>(sentenceMatches_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.MatchList, org.languagetool.rules.ml.MLServerProto.MatchList.Builder, org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> sentenceMatchesBuilder_;

      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList> getSentenceMatchesList() {
        if (sentenceMatchesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sentenceMatches_);
        } else {
          return sentenceMatchesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public int getSentenceMatchesCount() {
        if (sentenceMatchesBuilder_ == null) {
          return sentenceMatches_.size();
        } else {
          return sentenceMatchesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchList getSentenceMatches(int index) {
        if (sentenceMatchesBuilder_ == null) {
          return sentenceMatches_.get(index);
        } else {
          return sentenceMatchesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder setSentenceMatches(
          int index, org.languagetool.rules.ml.MLServerProto.MatchList value) {
        if (sentenceMatchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentenceMatchesIsMutable();
          sentenceMatches_.set(index, value);
          onChanged();
        } else {
          sentenceMatchesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder setSentenceMatches(
          int index, org.languagetool.rules.ml.MLServerProto.MatchList.Builder builderForValue) {
        if (sentenceMatchesBuilder_ == null) {
          ensureSentenceMatchesIsMutable();
          sentenceMatches_.set(index, builderForValue.build());
          onChanged();
        } else {
          sentenceMatchesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder addSentenceMatches(org.languagetool.rules.ml.MLServerProto.MatchList value) {
        if (sentenceMatchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentenceMatchesIsMutable();
          sentenceMatches_.add(value);
          onChanged();
        } else {
          sentenceMatchesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder addSentenceMatches(
          int index, org.languagetool.rules.ml.MLServerProto.MatchList value) {
        if (sentenceMatchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSentenceMatchesIsMutable();
          sentenceMatches_.add(index, value);
          onChanged();
        } else {
          sentenceMatchesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder addSentenceMatches(
          org.languagetool.rules.ml.MLServerProto.MatchList.Builder builderForValue) {
        if (sentenceMatchesBuilder_ == null) {
          ensureSentenceMatchesIsMutable();
          sentenceMatches_.add(builderForValue.build());
          onChanged();
        } else {
          sentenceMatchesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder addSentenceMatches(
          int index, org.languagetool.rules.ml.MLServerProto.MatchList.Builder builderForValue) {
        if (sentenceMatchesBuilder_ == null) {
          ensureSentenceMatchesIsMutable();
          sentenceMatches_.add(index, builderForValue.build());
          onChanged();
        } else {
          sentenceMatchesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder addAllSentenceMatches(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.MatchList> values) {
        if (sentenceMatchesBuilder_ == null) {
          ensureSentenceMatchesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, sentenceMatches_);
          onChanged();
        } else {
          sentenceMatchesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder clearSentenceMatches() {
        if (sentenceMatchesBuilder_ == null) {
          sentenceMatches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          sentenceMatchesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public Builder removeSentenceMatches(int index) {
        if (sentenceMatchesBuilder_ == null) {
          ensureSentenceMatchesIsMutable();
          sentenceMatches_.remove(index);
          onChanged();
        } else {
          sentenceMatchesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchList.Builder getSentenceMatchesBuilder(
          int index) {
        return getSentenceMatchesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder getSentenceMatchesOrBuilder(
          int index) {
        if (sentenceMatchesBuilder_ == null) {
          return sentenceMatches_.get(index);  } else {
          return sentenceMatchesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> 
           getSentenceMatchesOrBuilderList() {
        if (sentenceMatchesBuilder_ != null) {
          return sentenceMatchesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sentenceMatches_);
        }
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchList.Builder addSentenceMatchesBuilder() {
        return getSentenceMatchesFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.MatchList.getDefaultInstance());
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchList.Builder addSentenceMatchesBuilder(
          int index) {
        return getSentenceMatchesFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.MatchList.getDefaultInstance());
      }
      /**
       * <pre>
       * results for each corresponding sentence in MatchRequest (aligned)
       * </pre>
       *
       * <code>repeated .lt_ml_server.MatchList sentenceMatches = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.MatchList.Builder> 
           getSentenceMatchesBuilderList() {
        return getSentenceMatchesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.MatchList, org.languagetool.rules.ml.MLServerProto.MatchList.Builder, org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder> 
          getSentenceMatchesFieldBuilder() {
        if (sentenceMatchesBuilder_ == null) {
          sentenceMatchesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.MatchList, org.languagetool.rules.ml.MLServerProto.MatchList.Builder, org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder>(
                  sentenceMatches_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          sentenceMatches_ = null;
        }
        return sentenceMatchesBuilder_;
      }
      @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:lt_ml_server.MatchResponse)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.MatchResponse)
    private static final org.languagetool.rules.ml.MLServerProto.MatchResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.MatchResponse();
    }

    public static org.languagetool.rules.ml.MLServerProto.MatchResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MatchListOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.MatchList)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.Match> 
        getMatchesList();
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.Match getMatches(int index);
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    int getMatchesCount();
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
        getMatchesOrBuilderList();
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getMatchesOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.MatchList}
   */
  public static final class MatchList extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.MatchList)
      MatchListOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MatchList.newBuilder() to construct.
    private MatchList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MatchList() {
      matches_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new MatchList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MatchList(
        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: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                matches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.Match>();
                mutable_bitField0_ |= 0x00000001;
              }
              matches_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.Match.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_ & 0x00000001) != 0)) {
          matches_ = java.util.Collections.unmodifiableList(matches_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchList_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchList_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.MatchList.class, org.languagetool.rules.ml.MLServerProto.MatchList.Builder.class);
    }

    public static final int MATCHES_FIELD_NUMBER = 1;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.Match> matches_;
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.Match> getMatchesList() {
      return matches_;
    }
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
        getMatchesOrBuilderList() {
      return matches_;
    }
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    @java.lang.Override
    public int getMatchesCount() {
      return matches_.size();
    }
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.Match getMatches(int index) {
      return matches_.get(index);
    }
    /**
     * <pre>
     * list of matches
     * </pre>
     *
     * <code>repeated .lt_ml_server.Match matches = 1;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getMatchesOrBuilder(
        int index) {
      return matches_.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 {
      for (int i = 0; i < matches_.size(); i++) {
        output.writeMessage(1, matches_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < matches_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, matches_.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 org.languagetool.rules.ml.MLServerProto.MatchList)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.MatchList other = (org.languagetool.rules.ml.MLServerProto.MatchList) obj;

      if (!getMatchesList()
          .equals(other.getMatchesList())) 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();
      if (getMatchesCount() > 0) {
        hash = (37 * hash) + MATCHES_FIELD_NUMBER;
        hash = (53 * hash) + getMatchesList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.MatchList parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList 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 org.languagetool.rules.ml.MLServerProto.MatchList parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList 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 org.languagetool.rules.ml.MLServerProto.MatchList parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.MatchList 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(org.languagetool.rules.ml.MLServerProto.MatchList 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 lt_ml_server.MatchList}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.MatchList)
        org.languagetool.rules.ml.MLServerProto.MatchListOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchList_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchList_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.MatchList.class, org.languagetool.rules.ml.MLServerProto.MatchList.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.MatchList.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMatchesFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (matchesBuilder_ == null) {
          matches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          matchesBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_MatchList_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchList getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.MatchList.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchList build() {
        org.languagetool.rules.ml.MLServerProto.MatchList result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.MatchList buildPartial() {
        org.languagetool.rules.ml.MLServerProto.MatchList result = new org.languagetool.rules.ml.MLServerProto.MatchList(this);
        int from_bitField0_ = bitField0_;
        if (matchesBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            matches_ = java.util.Collections.unmodifiableList(matches_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.matches_ = matches_;
        } else {
          result.matches_ = matchesBuilder_.build();
        }
        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 org.languagetool.rules.ml.MLServerProto.MatchList) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.MatchList)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.MatchList other) {
        if (other == org.languagetool.rules.ml.MLServerProto.MatchList.getDefaultInstance()) return this;
        if (matchesBuilder_ == null) {
          if (!other.matches_.isEmpty()) {
            if (matches_.isEmpty()) {
              matches_ = other.matches_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureMatchesIsMutable();
              matches_.addAll(other.matches_);
            }
            onChanged();
          }
        } else {
          if (!other.matches_.isEmpty()) {
            if (matchesBuilder_.isEmpty()) {
              matchesBuilder_.dispose();
              matchesBuilder_ = null;
              matches_ = other.matches_;
              bitField0_ = (bitField0_ & ~0x00000001);
              matchesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMatchesFieldBuilder() : null;
            } else {
              matchesBuilder_.addAllMessages(other.matches_);
            }
          }
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.MatchList parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.MatchList) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<org.languagetool.rules.ml.MLServerProto.Match> matches_ =
        java.util.Collections.emptyList();
      private void ensureMatchesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          matches_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.Match>(matches_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> matchesBuilder_;

      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.Match> getMatchesList() {
        if (matchesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(matches_);
        } else {
          return matchesBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public int getMatchesCount() {
        if (matchesBuilder_ == null) {
          return matches_.size();
        } else {
          return matchesBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match getMatches(int index) {
        if (matchesBuilder_ == null) {
          return matches_.get(index);
        } else {
          return matchesBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder setMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.set(index, value);
          onChanged();
        } else {
          matchesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder setMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.set(index, builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder addMatches(org.languagetool.rules.ml.MLServerProto.Match value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.add(value);
          onChanged();
        } else {
          matchesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder addMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match value) {
        if (matchesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMatchesIsMutable();
          matches_.add(index, value);
          onChanged();
        } else {
          matchesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder addMatches(
          org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.add(builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder addMatches(
          int index, org.languagetool.rules.ml.MLServerProto.Match.Builder builderForValue) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.add(index, builderForValue.build());
          onChanged();
        } else {
          matchesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder addAllMatches(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.Match> values) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, matches_);
          onChanged();
        } else {
          matchesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder clearMatches() {
        if (matchesBuilder_ == null) {
          matches_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          matchesBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public Builder removeMatches(int index) {
        if (matchesBuilder_ == null) {
          ensureMatchesIsMutable();
          matches_.remove(index);
          onChanged();
        } else {
          matchesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder getMatchesBuilder(
          int index) {
        return getMatchesFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.MatchOrBuilder getMatchesOrBuilder(
          int index) {
        if (matchesBuilder_ == null) {
          return matches_.get(index);  } else {
          return matchesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
           getMatchesOrBuilderList() {
        if (matchesBuilder_ != null) {
          return matchesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(matches_);
        }
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder addMatchesBuilder() {
        return getMatchesFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.Match.getDefaultInstance());
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Match.Builder addMatchesBuilder(
          int index) {
        return getMatchesFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.Match.getDefaultInstance());
      }
      /**
       * <pre>
       * list of matches
       * </pre>
       *
       * <code>repeated .lt_ml_server.Match matches = 1;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.Match.Builder> 
           getMatchesBuilderList() {
        return getMatchesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder> 
          getMatchesFieldBuilder() {
        if (matchesBuilder_ == null) {
          matchesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.Match, org.languagetool.rules.ml.MLServerProto.Match.Builder, org.languagetool.rules.ml.MLServerProto.MatchOrBuilder>(
                  matches_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          matches_ = null;
        }
        return matchesBuilder_;
      }
      @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:lt_ml_server.MatchList)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.MatchList)
    private static final org.languagetool.rules.ml.MLServerProto.MatchList DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.MatchList();
    }

    public static org.languagetool.rules.ml.MLServerProto.MatchList getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.MatchList getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MatchOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.Match)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * start position in the sentence (i.e. not relative to whole text)
     * </pre>
     *
     * <code>uint32 offset = 1;</code>
     * @return The offset.
     */
    int getOffset();

    /**
     * <pre>
     * length of matched area; &gt;0
     * </pre>
     *
     * <code>uint32 length = 2;</code>
     * @return The length.
     */
    int getLength();

    /**
     * <pre>
     * prefix for rule ids; should use a common value for one model/server
     * </pre>
     *
     * <code>string id = 3;</code>
     * @return The id.
     */
    java.lang.String getId();
    /**
     * <pre>
     * prefix for rule ids; should use a common value for one model/server
     * </pre>
     *
     * <code>string id = 3;</code>
     * @return The bytes for id.
     */
    com.google.protobuf.ByteString
        getIdBytes();

    /**
     * <pre>
     * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
     * </pre>
     *
     * <code>string sub_id = 4;</code>
     * @return The subId.
     */
    java.lang.String getSubId();
    /**
     * <pre>
     * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
     * </pre>
     *
     * <code>string sub_id = 4;</code>
     * @return The bytes for subId.
     */
    com.google.protobuf.ByteString
        getSubIdBytes();

    /**
     * <pre>
     * legacy; use suggestedReplacements
     * </pre>
     *
     * <code>repeated string suggestions = 5;</code>
     * @return A list containing the suggestions.
     */
    java.util.List<java.lang.String>
        getSuggestionsList();
    /**
     * <pre>
     * legacy; use suggestedReplacements
     * </pre>
     *
     * <code>repeated string suggestions = 5;</code>
     * @return The count of suggestions.
     */
    int getSuggestionsCount();
    /**
     * <pre>
     * legacy; use suggestedReplacements
     * </pre>
     *
     * <code>repeated string suggestions = 5;</code>
     * @param index The index of the element to return.
     * @return The suggestions at the given index.
     */
    java.lang.String getSuggestions(int index);
    /**
     * <pre>
     * legacy; use suggestedReplacements
     * </pre>
     *
     * <code>repeated string suggestions = 5;</code>
     * @param index The index of the value to return.
     * @return The bytes of the suggestions at the given index.
     */
    com.google.protobuf.ByteString
        getSuggestionsBytes(int index);

    /**
     * <pre>
     * added later, optional (can be substituted by Java)
     * </pre>
     *
     * <code>string ruleDescription = 6;</code>
     * @return The ruleDescription.
     */
    java.lang.String getRuleDescription();
    /**
     * <pre>
     * added later, optional (can be substituted by Java)
     * </pre>
     *
     * <code>string ruleDescription = 6;</code>
     * @return The bytes for ruleDescription.
     */
    com.google.protobuf.ByteString
        getRuleDescriptionBytes();

    /**
     * <pre>
     * description of the match; displayed in e.g. the add-on pop-up
     * </pre>
     *
     * <code>string matchDescription = 7;</code>
     * @return The matchDescription.
     */
    java.lang.String getMatchDescription();
    /**
     * <pre>
     * description of the match; displayed in e.g. the add-on pop-up
     * </pre>
     *
     * <code>string matchDescription = 7;</code>
     * @return The bytes for matchDescription.
     */
    com.google.protobuf.ByteString
        getMatchDescriptionBytes();

    /**
     * <pre>
     * shortened description of the match; displayed in e.g. LibreOffice context menu
     * </pre>
     *
     * <code>string matchShortDescription = 8;</code>
     * @return The matchShortDescription.
     */
    java.lang.String getMatchShortDescription();
    /**
     * <pre>
     * shortened description of the match; displayed in e.g. LibreOffice context menu
     * </pre>
     *
     * <code>string matchShortDescription = 8;</code>
     * @return The bytes for matchShortDescription.
     */
    com.google.protobuf.ByteString
        getMatchShortDescriptionBytes();

    /**
     * <pre>
     * to show a link, e.g. with further explanations for this error
     * </pre>
     *
     * <code>string url = 9;</code>
     * @return The url.
     */
    java.lang.String getUrl();
    /**
     * <pre>
     * to show a link, e.g. with further explanations for this error
     * </pre>
     *
     * <code>string url = 9;</code>
     * @return The bytes for url.
     */
    com.google.protobuf.ByteString
        getUrlBytes();

    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.SuggestedReplacement> 
        getSuggestedReplacementsList();
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    org.languagetool.rules.ml.MLServerProto.SuggestedReplacement getSuggestedReplacements(int index);
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    int getSuggestedReplacementsCount();
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    java.util.List<? extends org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder> 
        getSuggestedReplacementsOrBuilderList();
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder getSuggestedReplacementsOrBuilder(
        int index);

    /**
     * <pre>
     * is this correction eligible for auto-correction?
     * </pre>
     *
     * <code>bool autoCorrect = 11;</code>
     * @return The autoCorrect.
     */
    boolean getAutoCorrect();

    /**
     * <code>.lt_ml_server.Match.MatchType type = 12;</code>
     * @return The enum numeric value on the wire for type.
     */
    int getTypeValue();
    /**
     * <code>.lt_ml_server.Match.MatchType type = 12;</code>
     * @return The type.
     */
    org.languagetool.rules.ml.MLServerProto.Match.MatchType getType();

    /**
     * <code>sint32 contextForSureMatch = 13;</code>
     * @return The contextForSureMatch.
     */
    int getContextForSureMatch();

    /**
     * <code>.lt_ml_server.Rule rule = 14;</code>
     * @return Whether the rule field is set.
     */
    boolean hasRule();
    /**
     * <code>.lt_ml_server.Rule rule = 14;</code>
     * @return The rule.
     */
    org.languagetool.rules.ml.MLServerProto.Rule getRule();
    /**
     * <code>.lt_ml_server.Rule rule = 14;</code>
     */
    org.languagetool.rules.ml.MLServerProto.RuleOrBuilder getRuleOrBuilder();
  }
  /**
   * Protobuf type {@code lt_ml_server.Match}
   */
  public static final class Match extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.Match)
      MatchOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Match.newBuilder() to construct.
    private Match(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Match() {
      id_ = "";
      subId_ = "";
      suggestions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      ruleDescription_ = "";
      matchDescription_ = "";
      matchShortDescription_ = "";
      url_ = "";
      suggestedReplacements_ = java.util.Collections.emptyList();
      type_ = 0;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Match();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Match(
        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: {

              offset_ = input.readUInt32();
              break;
            }
            case 16: {

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

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

              subId_ = s;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                suggestions_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              suggestions_.add(s);
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();

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

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

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

              url_ = s;
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                suggestedReplacements_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.SuggestedReplacement>();
                mutable_bitField0_ |= 0x00000002;
              }
              suggestedReplacements_.add(
                  input.readMessage(org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.parser(), extensionRegistry));
              break;
            }
            case 88: {

              autoCorrect_ = input.readBool();
              break;
            }
            case 96: {
              int rawValue = input.readEnum();

              type_ = rawValue;
              break;
            }
            case 104: {

              contextForSureMatch_ = input.readSInt32();
              break;
            }
            case 114: {
              org.languagetool.rules.ml.MLServerProto.Rule.Builder subBuilder = null;
              if (rule_ != null) {
                subBuilder = rule_.toBuilder();
              }
              rule_ = input.readMessage(org.languagetool.rules.ml.MLServerProto.Rule.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rule_);
                rule_ = subBuilder.buildPartial();
              }

              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_ & 0x00000001) != 0)) {
          suggestions_ = suggestions_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          suggestedReplacements_ = java.util.Collections.unmodifiableList(suggestedReplacements_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Match_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Match_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.Match.class, org.languagetool.rules.ml.MLServerProto.Match.Builder.class);
    }

    /**
     * Protobuf enum {@code lt_ml_server.Match.MatchType}
     */
    public enum MatchType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <pre>
       ** Spelling errors, typically red. 
       * </pre>
       *
       * <code>UnknownWord = 0;</code>
       */
      UnknownWord(0),
      /**
       * <pre>
       ** Style errors, typically light blue. 
       * </pre>
       *
       * <code>Hint = 1;</code>
       */
      Hint(1),
      /**
       * <pre>
       ** Other errors (including grammar), typically yellow/orange. 
       * </pre>
       *
       * <code>Other = 2;</code>
       */
      Other(2),
      UNRECOGNIZED(-1),
      ;

      /**
       * <pre>
       ** Spelling errors, typically red. 
       * </pre>
       *
       * <code>UnknownWord = 0;</code>
       */
      public static final int UnknownWord_VALUE = 0;
      /**
       * <pre>
       ** Style errors, typically light blue. 
       * </pre>
       *
       * <code>Hint = 1;</code>
       */
      public static final int Hint_VALUE = 1;
      /**
       * <pre>
       ** Other errors (including grammar), typically yellow/orange. 
       * </pre>
       *
       * <code>Other = 2;</code>
       */
      public static final int Other_VALUE = 2;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static MatchType valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static MatchType forNumber(int value) {
        switch (value) {
          case 0: return UnknownWord;
          case 1: return Hint;
          case 2: return Other;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.Match.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int value;

      private MatchType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:lt_ml_server.Match.MatchType)
    }

    public static final int OFFSET_FIELD_NUMBER = 1;
    private int offset_;
    /**
     * <pre>
     * start position in the sentence (i.e. not relative to whole text)
     * </pre>
     *
     * <code>uint32 offset = 1;</code>
     * @return The offset.
     */
    @java.lang.Override
    public int getOffset() {
      return offset_;
    }

    public static final int LENGTH_FIELD_NUMBER = 2;
    private int length_;
    /**
     * <pre>
     * length of matched area; &gt;0
     * </pre>
     *
     * <code>uint32 length = 2;</code>
     * @return The length.
     */
    @java.lang.Override
    public int getLength() {
      return length_;
    }

    public static final int ID_FIELD_NUMBER = 3;
    private volatile java.lang.Object id_;
    /**
     * <pre>
     * prefix for rule ids; should use a common value for one model/server
     * </pre>
     *
     * <code>string id = 3;</code>
     * @return The id.
     */
    @java.lang.Override
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      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();
        id_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * prefix for rule ids; should use a common value for one model/server
     * </pre>
     *
     * <code>string id = 3;</code>
     * @return The bytes for id.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SUB_ID_FIELD_NUMBER = 4;
    private volatile java.lang.Object subId_;
    /**
     * <pre>
     * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
     * </pre>
     *
     * <code>string sub_id = 4;</code>
     * @return The subId.
     */
    @java.lang.Override
    public java.lang.String getSubId() {
      java.lang.Object ref = subId_;
      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();
        subId_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
     * </pre>
     *
     * <code>string sub_id = 4;</code>
     * @return The bytes for subId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSubIdBytes() {
      java.lang.Object ref = subId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        subId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SUGGESTIONS_FIELD_NUMBER = 5;
    private com.google.protobuf.LazyStringList suggestions_;
    /**
     * <pre>
     * legacy; use suggestedReplacements
     * </pre>
     *
     * <code>repeated string suggestions = 5;</code>
     * @return A list containing the suggestions.
     */
    public com.google.protobuf.ProtocolStringList
        getSuggestionsList() {
      return suggestions_;
    }
    /**
     * <pre>
     * legacy; use suggestedReplacements
     * </pre>
     *
     * <code>repeated string suggestions = 5;</code>
     * @return The count of suggestions.
     */
    public int getSuggestionsCount() {
      return suggestions_.size();
    }
    /**
     * <pre>
     * legacy; use suggestedReplacements
     * </pre>
     *
     * <code>repeated string suggestions = 5;</code>
     * @param index The index of the element to return.
     * @return The suggestions at the given index.
     */
    public java.lang.String getSuggestions(int index) {
      return suggestions_.get(index);
    }
    /**
     * <pre>
     * legacy; use suggestedReplacements
     * </pre>
     *
     * <code>repeated string suggestions = 5;</code>
     * @param index The index of the value to return.
     * @return The bytes of the suggestions at the given index.
     */
    public com.google.protobuf.ByteString
        getSuggestionsBytes(int index) {
      return suggestions_.getByteString(index);
    }

    public static final int RULEDESCRIPTION_FIELD_NUMBER = 6;
    private volatile java.lang.Object ruleDescription_;
    /**
     * <pre>
     * added later, optional (can be substituted by Java)
     * </pre>
     *
     * <code>string ruleDescription = 6;</code>
     * @return The ruleDescription.
     */
    @java.lang.Override
    public java.lang.String getRuleDescription() {
      java.lang.Object ref = ruleDescription_;
      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();
        ruleDescription_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * added later, optional (can be substituted by Java)
     * </pre>
     *
     * <code>string ruleDescription = 6;</code>
     * @return The bytes for ruleDescription.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getRuleDescriptionBytes() {
      java.lang.Object ref = ruleDescription_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        ruleDescription_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MATCHDESCRIPTION_FIELD_NUMBER = 7;
    private volatile java.lang.Object matchDescription_;
    /**
     * <pre>
     * description of the match; displayed in e.g. the add-on pop-up
     * </pre>
     *
     * <code>string matchDescription = 7;</code>
     * @return The matchDescription.
     */
    @java.lang.Override
    public java.lang.String getMatchDescription() {
      java.lang.Object ref = matchDescription_;
      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();
        matchDescription_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * description of the match; displayed in e.g. the add-on pop-up
     * </pre>
     *
     * <code>string matchDescription = 7;</code>
     * @return The bytes for matchDescription.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMatchDescriptionBytes() {
      java.lang.Object ref = matchDescription_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        matchDescription_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MATCHSHORTDESCRIPTION_FIELD_NUMBER = 8;
    private volatile java.lang.Object matchShortDescription_;
    /**
     * <pre>
     * shortened description of the match; displayed in e.g. LibreOffice context menu
     * </pre>
     *
     * <code>string matchShortDescription = 8;</code>
     * @return The matchShortDescription.
     */
    @java.lang.Override
    public java.lang.String getMatchShortDescription() {
      java.lang.Object ref = matchShortDescription_;
      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();
        matchShortDescription_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * shortened description of the match; displayed in e.g. LibreOffice context menu
     * </pre>
     *
     * <code>string matchShortDescription = 8;</code>
     * @return The bytes for matchShortDescription.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMatchShortDescriptionBytes() {
      java.lang.Object ref = matchShortDescription_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        matchShortDescription_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int URL_FIELD_NUMBER = 9;
    private volatile java.lang.Object url_;
    /**
     * <pre>
     * to show a link, e.g. with further explanations for this error
     * </pre>
     *
     * <code>string url = 9;</code>
     * @return The url.
     */
    @java.lang.Override
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      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();
        url_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * to show a link, e.g. with further explanations for this error
     * </pre>
     *
     * <code>string url = 9;</code>
     * @return The bytes for url.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SUGGESTEDREPLACEMENTS_FIELD_NUMBER = 10;
    private java.util.List<org.languagetool.rules.ml.MLServerProto.SuggestedReplacement> suggestedReplacements_;
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.SuggestedReplacement> getSuggestedReplacementsList() {
      return suggestedReplacements_;
    }
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    @java.lang.Override
    public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder> 
        getSuggestedReplacementsOrBuilderList() {
      return suggestedReplacements_;
    }
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    @java.lang.Override
    public int getSuggestedReplacementsCount() {
      return suggestedReplacements_.size();
    }
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement getSuggestedReplacements(int index) {
      return suggestedReplacements_.get(index);
    }
    /**
     * <pre>
     * new and extended suggestions; overwrite any values set in suggestions
     * </pre>
     *
     * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder getSuggestedReplacementsOrBuilder(
        int index) {
      return suggestedReplacements_.get(index);
    }

    public static final int AUTOCORRECT_FIELD_NUMBER = 11;
    private boolean autoCorrect_;
    /**
     * <pre>
     * is this correction eligible for auto-correction?
     * </pre>
     *
     * <code>bool autoCorrect = 11;</code>
     * @return The autoCorrect.
     */
    @java.lang.Override
    public boolean getAutoCorrect() {
      return autoCorrect_;
    }

    public static final int TYPE_FIELD_NUMBER = 12;
    private int type_;
    /**
     * <code>.lt_ml_server.Match.MatchType type = 12;</code>
     * @return The enum numeric value on the wire for type.
     */
    @java.lang.Override public int getTypeValue() {
      return type_;
    }
    /**
     * <code>.lt_ml_server.Match.MatchType type = 12;</code>
     * @return The type.
     */
    @java.lang.Override public org.languagetool.rules.ml.MLServerProto.Match.MatchType getType() {
      @SuppressWarnings("deprecation")
      org.languagetool.rules.ml.MLServerProto.Match.MatchType result = org.languagetool.rules.ml.MLServerProto.Match.MatchType.valueOf(type_);
      return result == null ? org.languagetool.rules.ml.MLServerProto.Match.MatchType.UNRECOGNIZED : result;
    }

    public static final int CONTEXTFORSUREMATCH_FIELD_NUMBER = 13;
    private int contextForSureMatch_;
    /**
     * <code>sint32 contextForSureMatch = 13;</code>
     * @return The contextForSureMatch.
     */
    @java.lang.Override
    public int getContextForSureMatch() {
      return contextForSureMatch_;
    }

    public static final int RULE_FIELD_NUMBER = 14;
    private org.languagetool.rules.ml.MLServerProto.Rule rule_;
    /**
     * <code>.lt_ml_server.Rule rule = 14;</code>
     * @return Whether the rule field is set.
     */
    @java.lang.Override
    public boolean hasRule() {
      return rule_ != null;
    }
    /**
     * <code>.lt_ml_server.Rule rule = 14;</code>
     * @return The rule.
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.Rule getRule() {
      return rule_ == null ? org.languagetool.rules.ml.MLServerProto.Rule.getDefaultInstance() : rule_;
    }
    /**
     * <code>.lt_ml_server.Rule rule = 14;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.RuleOrBuilder getRuleOrBuilder() {
      return getRule();
    }

    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 (offset_ != 0) {
        output.writeUInt32(1, offset_);
      }
      if (length_ != 0) {
        output.writeUInt32(2, length_);
      }
      if (!getIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, id_);
      }
      if (!getSubIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, subId_);
      }
      for (int i = 0; i < suggestions_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, suggestions_.getRaw(i));
      }
      if (!getRuleDescriptionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, ruleDescription_);
      }
      if (!getMatchDescriptionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, matchDescription_);
      }
      if (!getMatchShortDescriptionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, matchShortDescription_);
      }
      if (!getUrlBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 9, url_);
      }
      for (int i = 0; i < suggestedReplacements_.size(); i++) {
        output.writeMessage(10, suggestedReplacements_.get(i));
      }
      if (autoCorrect_ != false) {
        output.writeBool(11, autoCorrect_);
      }
      if (type_ != org.languagetool.rules.ml.MLServerProto.Match.MatchType.UnknownWord.getNumber()) {
        output.writeEnum(12, type_);
      }
      if (contextForSureMatch_ != 0) {
        output.writeSInt32(13, contextForSureMatch_);
      }
      if (rule_ != null) {
        output.writeMessage(14, getRule());
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (offset_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, offset_);
      }
      if (length_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, length_);
      }
      if (!getIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, id_);
      }
      if (!getSubIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, subId_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < suggestions_.size(); i++) {
          dataSize += computeStringSizeNoTag(suggestions_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getSuggestionsList().size();
      }
      if (!getRuleDescriptionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, ruleDescription_);
      }
      if (!getMatchDescriptionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, matchDescription_);
      }
      if (!getMatchShortDescriptionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, matchShortDescription_);
      }
      if (!getUrlBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, url_);
      }
      for (int i = 0; i < suggestedReplacements_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, suggestedReplacements_.get(i));
      }
      if (autoCorrect_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(11, autoCorrect_);
      }
      if (type_ != org.languagetool.rules.ml.MLServerProto.Match.MatchType.UnknownWord.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(12, type_);
      }
      if (contextForSureMatch_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(13, contextForSureMatch_);
      }
      if (rule_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, getRule());
      }
      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 org.languagetool.rules.ml.MLServerProto.Match)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.Match other = (org.languagetool.rules.ml.MLServerProto.Match) obj;

      if (getOffset()
          != other.getOffset()) return false;
      if (getLength()
          != other.getLength()) return false;
      if (!getId()
          .equals(other.getId())) return false;
      if (!getSubId()
          .equals(other.getSubId())) return false;
      if (!getSuggestionsList()
          .equals(other.getSuggestionsList())) return false;
      if (!getRuleDescription()
          .equals(other.getRuleDescription())) return false;
      if (!getMatchDescription()
          .equals(other.getMatchDescription())) return false;
      if (!getMatchShortDescription()
          .equals(other.getMatchShortDescription())) return false;
      if (!getUrl()
          .equals(other.getUrl())) return false;
      if (!getSuggestedReplacementsList()
          .equals(other.getSuggestedReplacementsList())) return false;
      if (getAutoCorrect()
          != other.getAutoCorrect()) return false;
      if (type_ != other.type_) return false;
      if (getContextForSureMatch()
          != other.getContextForSureMatch()) return false;
      if (hasRule() != other.hasRule()) return false;
      if (hasRule()) {
        if (!getRule()
            .equals(other.getRule())) 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) + OFFSET_FIELD_NUMBER;
      hash = (53 * hash) + getOffset();
      hash = (37 * hash) + LENGTH_FIELD_NUMBER;
      hash = (53 * hash) + getLength();
      hash = (37 * hash) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId().hashCode();
      hash = (37 * hash) + SUB_ID_FIELD_NUMBER;
      hash = (53 * hash) + getSubId().hashCode();
      if (getSuggestionsCount() > 0) {
        hash = (37 * hash) + SUGGESTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getSuggestionsList().hashCode();
      }
      hash = (37 * hash) + RULEDESCRIPTION_FIELD_NUMBER;
      hash = (53 * hash) + getRuleDescription().hashCode();
      hash = (37 * hash) + MATCHDESCRIPTION_FIELD_NUMBER;
      hash = (53 * hash) + getMatchDescription().hashCode();
      hash = (37 * hash) + MATCHSHORTDESCRIPTION_FIELD_NUMBER;
      hash = (53 * hash) + getMatchShortDescription().hashCode();
      hash = (37 * hash) + URL_FIELD_NUMBER;
      hash = (53 * hash) + getUrl().hashCode();
      if (getSuggestedReplacementsCount() > 0) {
        hash = (37 * hash) + SUGGESTEDREPLACEMENTS_FIELD_NUMBER;
        hash = (53 * hash) + getSuggestedReplacementsList().hashCode();
      }
      hash = (37 * hash) + AUTOCORRECT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getAutoCorrect());
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + type_;
      hash = (37 * hash) + CONTEXTFORSUREMATCH_FIELD_NUMBER;
      hash = (53 * hash) + getContextForSureMatch();
      if (hasRule()) {
        hash = (37 * hash) + RULE_FIELD_NUMBER;
        hash = (53 * hash) + getRule().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.Match parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match 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 org.languagetool.rules.ml.MLServerProto.Match parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match 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 org.languagetool.rules.ml.MLServerProto.Match parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.Match 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(org.languagetool.rules.ml.MLServerProto.Match 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 lt_ml_server.Match}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.Match)
        org.languagetool.rules.ml.MLServerProto.MatchOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Match_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Match_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.Match.class, org.languagetool.rules.ml.MLServerProto.Match.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.Match.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

        length_ = 0;

        id_ = "";

        subId_ = "";

        suggestions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        ruleDescription_ = "";

        matchDescription_ = "";

        matchShortDescription_ = "";

        url_ = "";

        if (suggestedReplacementsBuilder_ == null) {
          suggestedReplacements_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          suggestedReplacementsBuilder_.clear();
        }
        autoCorrect_ = false;

        type_ = 0;

        contextForSureMatch_ = 0;

        if (ruleBuilder_ == null) {
          rule_ = null;
        } else {
          rule_ = null;
          ruleBuilder_ = null;
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Match_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.Match getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.Match.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.Match build() {
        org.languagetool.rules.ml.MLServerProto.Match result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.Match buildPartial() {
        org.languagetool.rules.ml.MLServerProto.Match result = new org.languagetool.rules.ml.MLServerProto.Match(this);
        int from_bitField0_ = bitField0_;
        result.offset_ = offset_;
        result.length_ = length_;
        result.id_ = id_;
        result.subId_ = subId_;
        if (((bitField0_ & 0x00000001) != 0)) {
          suggestions_ = suggestions_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.suggestions_ = suggestions_;
        result.ruleDescription_ = ruleDescription_;
        result.matchDescription_ = matchDescription_;
        result.matchShortDescription_ = matchShortDescription_;
        result.url_ = url_;
        if (suggestedReplacementsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            suggestedReplacements_ = java.util.Collections.unmodifiableList(suggestedReplacements_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.suggestedReplacements_ = suggestedReplacements_;
        } else {
          result.suggestedReplacements_ = suggestedReplacementsBuilder_.build();
        }
        result.autoCorrect_ = autoCorrect_;
        result.type_ = type_;
        result.contextForSureMatch_ = contextForSureMatch_;
        if (ruleBuilder_ == null) {
          result.rule_ = rule_;
        } else {
          result.rule_ = ruleBuilder_.build();
        }
        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 org.languagetool.rules.ml.MLServerProto.Match) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.Match)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.Match other) {
        if (other == org.languagetool.rules.ml.MLServerProto.Match.getDefaultInstance()) return this;
        if (other.getOffset() != 0) {
          setOffset(other.getOffset());
        }
        if (other.getLength() != 0) {
          setLength(other.getLength());
        }
        if (!other.getId().isEmpty()) {
          id_ = other.id_;
          onChanged();
        }
        if (!other.getSubId().isEmpty()) {
          subId_ = other.subId_;
          onChanged();
        }
        if (!other.suggestions_.isEmpty()) {
          if (suggestions_.isEmpty()) {
            suggestions_ = other.suggestions_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureSuggestionsIsMutable();
            suggestions_.addAll(other.suggestions_);
          }
          onChanged();
        }
        if (!other.getRuleDescription().isEmpty()) {
          ruleDescription_ = other.ruleDescription_;
          onChanged();
        }
        if (!other.getMatchDescription().isEmpty()) {
          matchDescription_ = other.matchDescription_;
          onChanged();
        }
        if (!other.getMatchShortDescription().isEmpty()) {
          matchShortDescription_ = other.matchShortDescription_;
          onChanged();
        }
        if (!other.getUrl().isEmpty()) {
          url_ = other.url_;
          onChanged();
        }
        if (suggestedReplacementsBuilder_ == null) {
          if (!other.suggestedReplacements_.isEmpty()) {
            if (suggestedReplacements_.isEmpty()) {
              suggestedReplacements_ = other.suggestedReplacements_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureSuggestedReplacementsIsMutable();
              suggestedReplacements_.addAll(other.suggestedReplacements_);
            }
            onChanged();
          }
        } else {
          if (!other.suggestedReplacements_.isEmpty()) {
            if (suggestedReplacementsBuilder_.isEmpty()) {
              suggestedReplacementsBuilder_.dispose();
              suggestedReplacementsBuilder_ = null;
              suggestedReplacements_ = other.suggestedReplacements_;
              bitField0_ = (bitField0_ & ~0x00000002);
              suggestedReplacementsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getSuggestedReplacementsFieldBuilder() : null;
            } else {
              suggestedReplacementsBuilder_.addAllMessages(other.suggestedReplacements_);
            }
          }
        }
        if (other.getAutoCorrect() != false) {
          setAutoCorrect(other.getAutoCorrect());
        }
        if (other.type_ != 0) {
          setTypeValue(other.getTypeValue());
        }
        if (other.getContextForSureMatch() != 0) {
          setContextForSureMatch(other.getContextForSureMatch());
        }
        if (other.hasRule()) {
          mergeRule(other.getRule());
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.Match parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.Match) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int offset_ ;
      /**
       * <pre>
       * start position in the sentence (i.e. not relative to whole text)
       * </pre>
       *
       * <code>uint32 offset = 1;</code>
       * @return The offset.
       */
      @java.lang.Override
      public int getOffset() {
        return offset_;
      }
      /**
       * <pre>
       * start position in the sentence (i.e. not relative to whole text)
       * </pre>
       *
       * <code>uint32 offset = 1;</code>
       * @param value The offset to set.
       * @return This builder for chaining.
       */
      public Builder setOffset(int value) {
        
        offset_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * start position in the sentence (i.e. not relative to whole text)
       * </pre>
       *
       * <code>uint32 offset = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearOffset() {
        
        offset_ = 0;
        onChanged();
        return this;
      }

      private int length_ ;
      /**
       * <pre>
       * length of matched area; &gt;0
       * </pre>
       *
       * <code>uint32 length = 2;</code>
       * @return The length.
       */
      @java.lang.Override
      public int getLength() {
        return length_;
      }
      /**
       * <pre>
       * length of matched area; &gt;0
       * </pre>
       *
       * <code>uint32 length = 2;</code>
       * @param value The length to set.
       * @return This builder for chaining.
       */
      public Builder setLength(int value) {
        
        length_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * length of matched area; &gt;0
       * </pre>
       *
       * <code>uint32 length = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearLength() {
        
        length_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object id_ = "";
      /**
       * <pre>
       * prefix for rule ids; should use a common value for one model/server
       * </pre>
       *
       * <code>string id = 3;</code>
       * @return The id.
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * prefix for rule ids; should use a common value for one model/server
       * </pre>
       *
       * <code>string id = 3;</code>
       * @return The bytes for id.
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * prefix for rule ids; should use a common value for one model/server
       * </pre>
       *
       * <code>string id = 3;</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * prefix for rule ids; should use a common value for one model/server
       * </pre>
       *
       * <code>string id = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * prefix for rule ids; should use a common value for one model/server
       * </pre>
       *
       * <code>string id = 3;</code>
       * @param value The bytes for id to set.
       * @return This builder for chaining.
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        id_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object subId_ = "";
      /**
       * <pre>
       * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
       * </pre>
       *
       * <code>string sub_id = 4;</code>
       * @return The subId.
       */
      public java.lang.String getSubId() {
        java.lang.Object ref = subId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          subId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
       * </pre>
       *
       * <code>string sub_id = 4;</code>
       * @return The bytes for subId.
       */
      public com.google.protobuf.ByteString
          getSubIdBytes() {
        java.lang.Object ref = subId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          subId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
       * </pre>
       *
       * <code>string sub_id = 4;</code>
       * @param value The subId to set.
       * @return This builder for chaining.
       */
      public Builder setSubId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        subId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
       * </pre>
       *
       * <code>string sub_id = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearSubId() {
        
        subId_ = getDefaultInstance().getSubId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * more specific suffix for rule ids; i.e. one model/server can return multiple values to distinguish between mach types
       * </pre>
       *
       * <code>string sub_id = 4;</code>
       * @param value The bytes for subId to set.
       * @return This builder for chaining.
       */
      public Builder setSubIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        subId_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList suggestions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSuggestionsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          suggestions_ = new com.google.protobuf.LazyStringArrayList(suggestions_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @return A list containing the suggestions.
       */
      public com.google.protobuf.ProtocolStringList
          getSuggestionsList() {
        return suggestions_.getUnmodifiableView();
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @return The count of suggestions.
       */
      public int getSuggestionsCount() {
        return suggestions_.size();
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @param index The index of the element to return.
       * @return The suggestions at the given index.
       */
      public java.lang.String getSuggestions(int index) {
        return suggestions_.get(index);
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @param index The index of the value to return.
       * @return The bytes of the suggestions at the given index.
       */
      public com.google.protobuf.ByteString
          getSuggestionsBytes(int index) {
        return suggestions_.getByteString(index);
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @param index The index to set the value at.
       * @param value The suggestions to set.
       * @return This builder for chaining.
       */
      public Builder setSuggestions(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSuggestionsIsMutable();
        suggestions_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @param value The suggestions to add.
       * @return This builder for chaining.
       */
      public Builder addSuggestions(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSuggestionsIsMutable();
        suggestions_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @param values The suggestions to add.
       * @return This builder for chaining.
       */
      public Builder addAllSuggestions(
          java.lang.Iterable<java.lang.String> values) {
        ensureSuggestionsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, suggestions_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearSuggestions() {
        suggestions_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * legacy; use suggestedReplacements
       * </pre>
       *
       * <code>repeated string suggestions = 5;</code>
       * @param value The bytes of the suggestions to add.
       * @return This builder for chaining.
       */
      public Builder addSuggestionsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureSuggestionsIsMutable();
        suggestions_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object ruleDescription_ = "";
      /**
       * <pre>
       * added later, optional (can be substituted by Java)
       * </pre>
       *
       * <code>string ruleDescription = 6;</code>
       * @return The ruleDescription.
       */
      public java.lang.String getRuleDescription() {
        java.lang.Object ref = ruleDescription_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          ruleDescription_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * added later, optional (can be substituted by Java)
       * </pre>
       *
       * <code>string ruleDescription = 6;</code>
       * @return The bytes for ruleDescription.
       */
      public com.google.protobuf.ByteString
          getRuleDescriptionBytes() {
        java.lang.Object ref = ruleDescription_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          ruleDescription_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * added later, optional (can be substituted by Java)
       * </pre>
       *
       * <code>string ruleDescription = 6;</code>
       * @param value The ruleDescription to set.
       * @return This builder for chaining.
       */
      public Builder setRuleDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        ruleDescription_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * added later, optional (can be substituted by Java)
       * </pre>
       *
       * <code>string ruleDescription = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearRuleDescription() {
        
        ruleDescription_ = getDefaultInstance().getRuleDescription();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * added later, optional (can be substituted by Java)
       * </pre>
       *
       * <code>string ruleDescription = 6;</code>
       * @param value The bytes for ruleDescription to set.
       * @return This builder for chaining.
       */
      public Builder setRuleDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        ruleDescription_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object matchDescription_ = "";
      /**
       * <pre>
       * description of the match; displayed in e.g. the add-on pop-up
       * </pre>
       *
       * <code>string matchDescription = 7;</code>
       * @return The matchDescription.
       */
      public java.lang.String getMatchDescription() {
        java.lang.Object ref = matchDescription_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          matchDescription_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * description of the match; displayed in e.g. the add-on pop-up
       * </pre>
       *
       * <code>string matchDescription = 7;</code>
       * @return The bytes for matchDescription.
       */
      public com.google.protobuf.ByteString
          getMatchDescriptionBytes() {
        java.lang.Object ref = matchDescription_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          matchDescription_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * description of the match; displayed in e.g. the add-on pop-up
       * </pre>
       *
       * <code>string matchDescription = 7;</code>
       * @param value The matchDescription to set.
       * @return This builder for chaining.
       */
      public Builder setMatchDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        matchDescription_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * description of the match; displayed in e.g. the add-on pop-up
       * </pre>
       *
       * <code>string matchDescription = 7;</code>
       * @return This builder for chaining.
       */
      public Builder clearMatchDescription() {
        
        matchDescription_ = getDefaultInstance().getMatchDescription();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * description of the match; displayed in e.g. the add-on pop-up
       * </pre>
       *
       * <code>string matchDescription = 7;</code>
       * @param value The bytes for matchDescription to set.
       * @return This builder for chaining.
       */
      public Builder setMatchDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        matchDescription_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object matchShortDescription_ = "";
      /**
       * <pre>
       * shortened description of the match; displayed in e.g. LibreOffice context menu
       * </pre>
       *
       * <code>string matchShortDescription = 8;</code>
       * @return The matchShortDescription.
       */
      public java.lang.String getMatchShortDescription() {
        java.lang.Object ref = matchShortDescription_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          matchShortDescription_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * shortened description of the match; displayed in e.g. LibreOffice context menu
       * </pre>
       *
       * <code>string matchShortDescription = 8;</code>
       * @return The bytes for matchShortDescription.
       */
      public com.google.protobuf.ByteString
          getMatchShortDescriptionBytes() {
        java.lang.Object ref = matchShortDescription_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          matchShortDescription_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * shortened description of the match; displayed in e.g. LibreOffice context menu
       * </pre>
       *
       * <code>string matchShortDescription = 8;</code>
       * @param value The matchShortDescription to set.
       * @return This builder for chaining.
       */
      public Builder setMatchShortDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        matchShortDescription_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * shortened description of the match; displayed in e.g. LibreOffice context menu
       * </pre>
       *
       * <code>string matchShortDescription = 8;</code>
       * @return This builder for chaining.
       */
      public Builder clearMatchShortDescription() {
        
        matchShortDescription_ = getDefaultInstance().getMatchShortDescription();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * shortened description of the match; displayed in e.g. LibreOffice context menu
       * </pre>
       *
       * <code>string matchShortDescription = 8;</code>
       * @param value The bytes for matchShortDescription to set.
       * @return This builder for chaining.
       */
      public Builder setMatchShortDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        matchShortDescription_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object url_ = "";
      /**
       * <pre>
       * to show a link, e.g. with further explanations for this error
       * </pre>
       *
       * <code>string url = 9;</code>
       * @return The url.
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * to show a link, e.g. with further explanations for this error
       * </pre>
       *
       * <code>string url = 9;</code>
       * @return The bytes for url.
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * to show a link, e.g. with further explanations for this error
       * </pre>
       *
       * <code>string url = 9;</code>
       * @param value The url to set.
       * @return This builder for chaining.
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        url_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * to show a link, e.g. with further explanations for this error
       * </pre>
       *
       * <code>string url = 9;</code>
       * @return This builder for chaining.
       */
      public Builder clearUrl() {
        
        url_ = getDefaultInstance().getUrl();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * to show a link, e.g. with further explanations for this error
       * </pre>
       *
       * <code>string url = 9;</code>
       * @param value The bytes for url to set.
       * @return This builder for chaining.
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        url_ = value;
        onChanged();
        return this;
      }

      private java.util.List<org.languagetool.rules.ml.MLServerProto.SuggestedReplacement> suggestedReplacements_ =
        java.util.Collections.emptyList();
      private void ensureSuggestedReplacementsIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          suggestedReplacements_ = new java.util.ArrayList<org.languagetool.rules.ml.MLServerProto.SuggestedReplacement>(suggestedReplacements_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.SuggestedReplacement, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder, org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder> suggestedReplacementsBuilder_;

      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.SuggestedReplacement> getSuggestedReplacementsList() {
        if (suggestedReplacementsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(suggestedReplacements_);
        } else {
          return suggestedReplacementsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public int getSuggestedReplacementsCount() {
        if (suggestedReplacementsBuilder_ == null) {
          return suggestedReplacements_.size();
        } else {
          return suggestedReplacementsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement getSuggestedReplacements(int index) {
        if (suggestedReplacementsBuilder_ == null) {
          return suggestedReplacements_.get(index);
        } else {
          return suggestedReplacementsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder setSuggestedReplacements(
          int index, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement value) {
        if (suggestedReplacementsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSuggestedReplacementsIsMutable();
          suggestedReplacements_.set(index, value);
          onChanged();
        } else {
          suggestedReplacementsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder setSuggestedReplacements(
          int index, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder builderForValue) {
        if (suggestedReplacementsBuilder_ == null) {
          ensureSuggestedReplacementsIsMutable();
          suggestedReplacements_.set(index, builderForValue.build());
          onChanged();
        } else {
          suggestedReplacementsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder addSuggestedReplacements(org.languagetool.rules.ml.MLServerProto.SuggestedReplacement value) {
        if (suggestedReplacementsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSuggestedReplacementsIsMutable();
          suggestedReplacements_.add(value);
          onChanged();
        } else {
          suggestedReplacementsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder addSuggestedReplacements(
          int index, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement value) {
        if (suggestedReplacementsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSuggestedReplacementsIsMutable();
          suggestedReplacements_.add(index, value);
          onChanged();
        } else {
          suggestedReplacementsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder addSuggestedReplacements(
          org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder builderForValue) {
        if (suggestedReplacementsBuilder_ == null) {
          ensureSuggestedReplacementsIsMutable();
          suggestedReplacements_.add(builderForValue.build());
          onChanged();
        } else {
          suggestedReplacementsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder addSuggestedReplacements(
          int index, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder builderForValue) {
        if (suggestedReplacementsBuilder_ == null) {
          ensureSuggestedReplacementsIsMutable();
          suggestedReplacements_.add(index, builderForValue.build());
          onChanged();
        } else {
          suggestedReplacementsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder addAllSuggestedReplacements(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.SuggestedReplacement> values) {
        if (suggestedReplacementsBuilder_ == null) {
          ensureSuggestedReplacementsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, suggestedReplacements_);
          onChanged();
        } else {
          suggestedReplacementsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder clearSuggestedReplacements() {
        if (suggestedReplacementsBuilder_ == null) {
          suggestedReplacements_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          suggestedReplacementsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public Builder removeSuggestedReplacements(int index) {
        if (suggestedReplacementsBuilder_ == null) {
          ensureSuggestedReplacementsIsMutable();
          suggestedReplacements_.remove(index);
          onChanged();
        } else {
          suggestedReplacementsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder getSuggestedReplacementsBuilder(
          int index) {
        return getSuggestedReplacementsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder getSuggestedReplacementsOrBuilder(
          int index) {
        if (suggestedReplacementsBuilder_ == null) {
          return suggestedReplacements_.get(index);  } else {
          return suggestedReplacementsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public java.util.List<? extends org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder> 
           getSuggestedReplacementsOrBuilderList() {
        if (suggestedReplacementsBuilder_ != null) {
          return suggestedReplacementsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(suggestedReplacements_);
        }
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder addSuggestedReplacementsBuilder() {
        return getSuggestedReplacementsFieldBuilder().addBuilder(
            org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.getDefaultInstance());
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder addSuggestedReplacementsBuilder(
          int index) {
        return getSuggestedReplacementsFieldBuilder().addBuilder(
            index, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.getDefaultInstance());
      }
      /**
       * <pre>
       * new and extended suggestions; overwrite any values set in suggestions
       * </pre>
       *
       * <code>repeated .lt_ml_server.SuggestedReplacement suggestedReplacements = 10;</code>
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder> 
           getSuggestedReplacementsBuilderList() {
        return getSuggestedReplacementsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.SuggestedReplacement, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder, org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder> 
          getSuggestedReplacementsFieldBuilder() {
        if (suggestedReplacementsBuilder_ == null) {
          suggestedReplacementsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.SuggestedReplacement, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder, org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder>(
                  suggestedReplacements_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          suggestedReplacements_ = null;
        }
        return suggestedReplacementsBuilder_;
      }

      private boolean autoCorrect_ ;
      /**
       * <pre>
       * is this correction eligible for auto-correction?
       * </pre>
       *
       * <code>bool autoCorrect = 11;</code>
       * @return The autoCorrect.
       */
      @java.lang.Override
      public boolean getAutoCorrect() {
        return autoCorrect_;
      }
      /**
       * <pre>
       * is this correction eligible for auto-correction?
       * </pre>
       *
       * <code>bool autoCorrect = 11;</code>
       * @param value The autoCorrect to set.
       * @return This builder for chaining.
       */
      public Builder setAutoCorrect(boolean value) {
        
        autoCorrect_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * is this correction eligible for auto-correction?
       * </pre>
       *
       * <code>bool autoCorrect = 11;</code>
       * @return This builder for chaining.
       */
      public Builder clearAutoCorrect() {
        
        autoCorrect_ = false;
        onChanged();
        return this;
      }

      private int type_ = 0;
      /**
       * <code>.lt_ml_server.Match.MatchType type = 12;</code>
       * @return The enum numeric value on the wire for type.
       */
      @java.lang.Override public int getTypeValue() {
        return type_;
      }
      /**
       * <code>.lt_ml_server.Match.MatchType type = 12;</code>
       * @param value The enum numeric value on the wire for type to set.
       * @return This builder for chaining.
       */
      public Builder setTypeValue(int value) {
        
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.lt_ml_server.Match.MatchType type = 12;</code>
       * @return The type.
       */
      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.Match.MatchType getType() {
        @SuppressWarnings("deprecation")
        org.languagetool.rules.ml.MLServerProto.Match.MatchType result = org.languagetool.rules.ml.MLServerProto.Match.MatchType.valueOf(type_);
        return result == null ? org.languagetool.rules.ml.MLServerProto.Match.MatchType.UNRECOGNIZED : result;
      }
      /**
       * <code>.lt_ml_server.Match.MatchType type = 12;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(org.languagetool.rules.ml.MLServerProto.Match.MatchType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.lt_ml_server.Match.MatchType type = 12;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        
        type_ = 0;
        onChanged();
        return this;
      }

      private int contextForSureMatch_ ;
      /**
       * <code>sint32 contextForSureMatch = 13;</code>
       * @return The contextForSureMatch.
       */
      @java.lang.Override
      public int getContextForSureMatch() {
        return contextForSureMatch_;
      }
      /**
       * <code>sint32 contextForSureMatch = 13;</code>
       * @param value The contextForSureMatch to set.
       * @return This builder for chaining.
       */
      public Builder setContextForSureMatch(int value) {
        
        contextForSureMatch_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>sint32 contextForSureMatch = 13;</code>
       * @return This builder for chaining.
       */
      public Builder clearContextForSureMatch() {
        
        contextForSureMatch_ = 0;
        onChanged();
        return this;
      }

      private org.languagetool.rules.ml.MLServerProto.Rule rule_;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.Rule, org.languagetool.rules.ml.MLServerProto.Rule.Builder, org.languagetool.rules.ml.MLServerProto.RuleOrBuilder> ruleBuilder_;
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       * @return Whether the rule field is set.
       */
      public boolean hasRule() {
        return ruleBuilder_ != null || rule_ != null;
      }
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       * @return The rule.
       */
      public org.languagetool.rules.ml.MLServerProto.Rule getRule() {
        if (ruleBuilder_ == null) {
          return rule_ == null ? org.languagetool.rules.ml.MLServerProto.Rule.getDefaultInstance() : rule_;
        } else {
          return ruleBuilder_.getMessage();
        }
      }
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       */
      public Builder setRule(org.languagetool.rules.ml.MLServerProto.Rule value) {
        if (ruleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rule_ = value;
          onChanged();
        } else {
          ruleBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       */
      public Builder setRule(
          org.languagetool.rules.ml.MLServerProto.Rule.Builder builderForValue) {
        if (ruleBuilder_ == null) {
          rule_ = builderForValue.build();
          onChanged();
        } else {
          ruleBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       */
      public Builder mergeRule(org.languagetool.rules.ml.MLServerProto.Rule value) {
        if (ruleBuilder_ == null) {
          if (rule_ != null) {
            rule_ =
              org.languagetool.rules.ml.MLServerProto.Rule.newBuilder(rule_).mergeFrom(value).buildPartial();
          } else {
            rule_ = value;
          }
          onChanged();
        } else {
          ruleBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       */
      public Builder clearRule() {
        if (ruleBuilder_ == null) {
          rule_ = null;
          onChanged();
        } else {
          rule_ = null;
          ruleBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.Rule.Builder getRuleBuilder() {
        
        onChanged();
        return getRuleFieldBuilder().getBuilder();
      }
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.RuleOrBuilder getRuleOrBuilder() {
        if (ruleBuilder_ != null) {
          return ruleBuilder_.getMessageOrBuilder();
        } else {
          return rule_ == null ?
              org.languagetool.rules.ml.MLServerProto.Rule.getDefaultInstance() : rule_;
        }
      }
      /**
       * <code>.lt_ml_server.Rule rule = 14;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.Rule, org.languagetool.rules.ml.MLServerProto.Rule.Builder, org.languagetool.rules.ml.MLServerProto.RuleOrBuilder> 
          getRuleFieldBuilder() {
        if (ruleBuilder_ == null) {
          ruleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.Rule, org.languagetool.rules.ml.MLServerProto.Rule.Builder, org.languagetool.rules.ml.MLServerProto.RuleOrBuilder>(
                  getRule(),
                  getParentForChildren(),
                  isClean());
          rule_ = null;
        }
        return ruleBuilder_;
      }
      @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:lt_ml_server.Match)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.Match)
    private static final org.languagetool.rules.ml.MLServerProto.Match DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.Match();
    }

    public static org.languagetool.rules.ml.MLServerProto.Match getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.Match getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RuleOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.Rule)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * id, subId, description, url already in Match
     * </pre>
     *
     * <code>string sourceFile = 1;</code>
     * @return The sourceFile.
     */
    java.lang.String getSourceFile();
    /**
     * <pre>
     * id, subId, description, url already in Match
     * </pre>
     *
     * <code>string sourceFile = 1;</code>
     * @return The bytes for sourceFile.
     */
    com.google.protobuf.ByteString
        getSourceFileBytes();

    /**
     * <pre>
     * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
     * </pre>
     *
     * <code>string issueType = 2;</code>
     * @return The issueType.
     */
    java.lang.String getIssueType();
    /**
     * <pre>
     * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
     * </pre>
     *
     * <code>string issueType = 2;</code>
     * @return The bytes for issueType.
     */
    com.google.protobuf.ByteString
        getIssueTypeBytes();

    /**
     * <code>bool tempOff = 3;</code>
     * @return The tempOff.
     */
    boolean getTempOff();

    /**
     * <code>.lt_ml_server.RuleCategory category = 4;</code>
     * @return Whether the category field is set.
     */
    boolean hasCategory();
    /**
     * <code>.lt_ml_server.RuleCategory category = 4;</code>
     * @return The category.
     */
    org.languagetool.rules.ml.MLServerProto.RuleCategory getCategory();
    /**
     * <code>.lt_ml_server.RuleCategory category = 4;</code>
     */
    org.languagetool.rules.ml.MLServerProto.RuleCategoryOrBuilder getCategoryOrBuilder();

    /**
     * <code>bool isPremium = 5;</code>
     * @return The isPremium.
     */
    boolean getIsPremium();

    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @return A list containing the tags.
     */
    java.util.List<org.languagetool.rules.ml.MLServerProto.Rule.Tag> getTagsList();
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @return The count of tags.
     */
    int getTagsCount();
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @param index The index of the element to return.
     * @return The tags at the given index.
     */
    org.languagetool.rules.ml.MLServerProto.Rule.Tag getTags(int index);
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @return A list containing the enum numeric values on the wire for tags.
     */
    java.util.List<java.lang.Integer>
    getTagsValueList();
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @param index The index of the value to return.
     * @return The enum numeric value on the wire of tags at the given index.
     */
    int getTagsValue(int index);
  }
  /**
   * Protobuf type {@code lt_ml_server.Rule}
   */
  public static final class Rule extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.Rule)
      RuleOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Rule.newBuilder() to construct.
    private Rule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Rule() {
      sourceFile_ = "";
      issueType_ = "";
      tags_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Rule();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Rule(
        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();

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

              issueType_ = s;
              break;
            }
            case 24: {

              tempOff_ = input.readBool();
              break;
            }
            case 34: {
              org.languagetool.rules.ml.MLServerProto.RuleCategory.Builder subBuilder = null;
              if (category_ != null) {
                subBuilder = category_.toBuilder();
              }
              category_ = input.readMessage(org.languagetool.rules.ml.MLServerProto.RuleCategory.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(category_);
                category_ = subBuilder.buildPartial();
              }

              break;
            }
            case 40: {

              isPremium_ = input.readBool();
              break;
            }
            case 48: {
              int rawValue = input.readEnum();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                tags_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000001;
              }
              tags_.add(rawValue);
              break;
            }
            case 50: {
              int length = input.readRawVarint32();
              int oldLimit = input.pushLimit(length);
              while(input.getBytesUntilLimit() > 0) {
                int rawValue = input.readEnum();
                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                  tags_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000001;
                }
                tags_.add(rawValue);
              }
              input.popLimit(oldLimit);
              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_ & 0x00000001) != 0)) {
          tags_ = java.util.Collections.unmodifiableList(tags_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Rule_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Rule_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.Rule.class, org.languagetool.rules.ml.MLServerProto.Rule.Builder.class);
    }

    /**
     * Protobuf enum {@code lt_ml_server.Rule.Tag}
     */
    public enum Tag
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>picky = 0;</code>
       */
      picky(0),
      /**
       * <code>academic = 1;</code>
       */
      academic(1),
      /**
       * <code>clarity = 2;</code>
       */
      clarity(2),
      /**
       * <code>professional = 3;</code>
       */
      professional(3),
      /**
       * <code>creative = 4;</code>
       */
      creative(4),
      /**
       * <code>customer = 5;</code>
       */
      customer(5),
      /**
       * <code>jobapp = 6;</code>
       */
      jobapp(6),
      /**
       * <code>objective = 7;</code>
       */
      objective(7),
      /**
       * <code>elegant = 8;</code>
       */
      elegant(8),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>picky = 0;</code>
       */
      public static final int picky_VALUE = 0;
      /**
       * <code>academic = 1;</code>
       */
      public static final int academic_VALUE = 1;
      /**
       * <code>clarity = 2;</code>
       */
      public static final int clarity_VALUE = 2;
      /**
       * <code>professional = 3;</code>
       */
      public static final int professional_VALUE = 3;
      /**
       * <code>creative = 4;</code>
       */
      public static final int creative_VALUE = 4;
      /**
       * <code>customer = 5;</code>
       */
      public static final int customer_VALUE = 5;
      /**
       * <code>jobapp = 6;</code>
       */
      public static final int jobapp_VALUE = 6;
      /**
       * <code>objective = 7;</code>
       */
      public static final int objective_VALUE = 7;
      /**
       * <code>elegant = 8;</code>
       */
      public static final int elegant_VALUE = 8;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Tag valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Tag forNumber(int value) {
        switch (value) {
          case 0: return picky;
          case 1: return academic;
          case 2: return clarity;
          case 3: return professional;
          case 4: return creative;
          case 5: return customer;
          case 6: return jobapp;
          case 7: return objective;
          case 8: return elegant;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.Rule.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int value;

      private Tag(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:lt_ml_server.Rule.Tag)
    }

    public static final int SOURCEFILE_FIELD_NUMBER = 1;
    private volatile java.lang.Object sourceFile_;
    /**
     * <pre>
     * id, subId, description, url already in Match
     * </pre>
     *
     * <code>string sourceFile = 1;</code>
     * @return The sourceFile.
     */
    @java.lang.Override
    public java.lang.String getSourceFile() {
      java.lang.Object ref = sourceFile_;
      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();
        sourceFile_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * id, subId, description, url already in Match
     * </pre>
     *
     * <code>string sourceFile = 1;</code>
     * @return The bytes for sourceFile.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSourceFileBytes() {
      java.lang.Object ref = sourceFile_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sourceFile_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ISSUETYPE_FIELD_NUMBER = 2;
    private volatile java.lang.Object issueType_;
    /**
     * <pre>
     * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
     * </pre>
     *
     * <code>string issueType = 2;</code>
     * @return The issueType.
     */
    @java.lang.Override
    public java.lang.String getIssueType() {
      java.lang.Object ref = issueType_;
      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();
        issueType_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
     * </pre>
     *
     * <code>string issueType = 2;</code>
     * @return The bytes for issueType.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getIssueTypeBytes() {
      java.lang.Object ref = issueType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        issueType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TEMPOFF_FIELD_NUMBER = 3;
    private boolean tempOff_;
    /**
     * <code>bool tempOff = 3;</code>
     * @return The tempOff.
     */
    @java.lang.Override
    public boolean getTempOff() {
      return tempOff_;
    }

    public static final int CATEGORY_FIELD_NUMBER = 4;
    private org.languagetool.rules.ml.MLServerProto.RuleCategory category_;
    /**
     * <code>.lt_ml_server.RuleCategory category = 4;</code>
     * @return Whether the category field is set.
     */
    @java.lang.Override
    public boolean hasCategory() {
      return category_ != null;
    }
    /**
     * <code>.lt_ml_server.RuleCategory category = 4;</code>
     * @return The category.
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.RuleCategory getCategory() {
      return category_ == null ? org.languagetool.rules.ml.MLServerProto.RuleCategory.getDefaultInstance() : category_;
    }
    /**
     * <code>.lt_ml_server.RuleCategory category = 4;</code>
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.RuleCategoryOrBuilder getCategoryOrBuilder() {
      return getCategory();
    }

    public static final int ISPREMIUM_FIELD_NUMBER = 5;
    private boolean isPremium_;
    /**
     * <code>bool isPremium = 5;</code>
     * @return The isPremium.
     */
    @java.lang.Override
    public boolean getIsPremium() {
      return isPremium_;
    }

    public static final int TAGS_FIELD_NUMBER = 6;
    private java.util.List<java.lang.Integer> tags_;
    private static final com.google.protobuf.Internal.ListAdapter.Converter<
        java.lang.Integer, org.languagetool.rules.ml.MLServerProto.Rule.Tag> tags_converter_ =
            new com.google.protobuf.Internal.ListAdapter.Converter<
                java.lang.Integer, org.languagetool.rules.ml.MLServerProto.Rule.Tag>() {
              public org.languagetool.rules.ml.MLServerProto.Rule.Tag convert(java.lang.Integer from) {
                @SuppressWarnings("deprecation")
                org.languagetool.rules.ml.MLServerProto.Rule.Tag result = org.languagetool.rules.ml.MLServerProto.Rule.Tag.valueOf(from);
                return result == null ? org.languagetool.rules.ml.MLServerProto.Rule.Tag.UNRECOGNIZED : result;
              }
            };
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @return A list containing the tags.
     */
    @java.lang.Override
    public java.util.List<org.languagetool.rules.ml.MLServerProto.Rule.Tag> getTagsList() {
      return new com.google.protobuf.Internal.ListAdapter<
          java.lang.Integer, org.languagetool.rules.ml.MLServerProto.Rule.Tag>(tags_, tags_converter_);
    }
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @return The count of tags.
     */
    @java.lang.Override
    public int getTagsCount() {
      return tags_.size();
    }
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @param index The index of the element to return.
     * @return The tags at the given index.
     */
    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.Rule.Tag getTags(int index) {
      return tags_converter_.convert(tags_.get(index));
    }
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @return A list containing the enum numeric values on the wire for tags.
     */
    @java.lang.Override
    public java.util.List<java.lang.Integer>
    getTagsValueList() {
      return tags_;
    }
    /**
     * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
     * @param index The index of the value to return.
     * @return The enum numeric value on the wire of tags at the given index.
     */
    @java.lang.Override
    public int getTagsValue(int index) {
      return tags_.get(index);
    }
    private int tagsMemoizedSerializedSize;

    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 (!getSourceFileBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, sourceFile_);
      }
      if (!getIssueTypeBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, issueType_);
      }
      if (tempOff_ != false) {
        output.writeBool(3, tempOff_);
      }
      if (category_ != null) {
        output.writeMessage(4, getCategory());
      }
      if (isPremium_ != false) {
        output.writeBool(5, isPremium_);
      }
      if (getTagsList().size() > 0) {
        output.writeUInt32NoTag(50);
        output.writeUInt32NoTag(tagsMemoizedSerializedSize);
      }
      for (int i = 0; i < tags_.size(); i++) {
        output.writeEnumNoTag(tags_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getSourceFileBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, sourceFile_);
      }
      if (!getIssueTypeBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, issueType_);
      }
      if (tempOff_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, tempOff_);
      }
      if (category_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getCategory());
      }
      if (isPremium_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, isPremium_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tags_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeEnumSizeNoTag(tags_.get(i));
        }
        size += dataSize;
        if (!getTagsList().isEmpty()) {  size += 1;
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(dataSize);
        }tagsMemoizedSerializedSize = 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 org.languagetool.rules.ml.MLServerProto.Rule)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.Rule other = (org.languagetool.rules.ml.MLServerProto.Rule) obj;

      if (!getSourceFile()
          .equals(other.getSourceFile())) return false;
      if (!getIssueType()
          .equals(other.getIssueType())) return false;
      if (getTempOff()
          != other.getTempOff()) return false;
      if (hasCategory() != other.hasCategory()) return false;
      if (hasCategory()) {
        if (!getCategory()
            .equals(other.getCategory())) return false;
      }
      if (getIsPremium()
          != other.getIsPremium()) return false;
      if (!tags_.equals(other.tags_)) 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) + SOURCEFILE_FIELD_NUMBER;
      hash = (53 * hash) + getSourceFile().hashCode();
      hash = (37 * hash) + ISSUETYPE_FIELD_NUMBER;
      hash = (53 * hash) + getIssueType().hashCode();
      hash = (37 * hash) + TEMPOFF_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getTempOff());
      if (hasCategory()) {
        hash = (37 * hash) + CATEGORY_FIELD_NUMBER;
        hash = (53 * hash) + getCategory().hashCode();
      }
      hash = (37 * hash) + ISPREMIUM_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getIsPremium());
      if (getTagsCount() > 0) {
        hash = (37 * hash) + TAGS_FIELD_NUMBER;
        hash = (53 * hash) + tags_.hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.Rule parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule 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 org.languagetool.rules.ml.MLServerProto.Rule parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule 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 org.languagetool.rules.ml.MLServerProto.Rule parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.Rule 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(org.languagetool.rules.ml.MLServerProto.Rule 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 lt_ml_server.Rule}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.Rule)
        org.languagetool.rules.ml.MLServerProto.RuleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Rule_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Rule_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.Rule.class, org.languagetool.rules.ml.MLServerProto.Rule.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.Rule.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();
        sourceFile_ = "";

        issueType_ = "";

        tempOff_ = false;

        if (categoryBuilder_ == null) {
          category_ = null;
        } else {
          category_ = null;
          categoryBuilder_ = null;
        }
        isPremium_ = false;

        tags_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_Rule_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.Rule getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.Rule.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.Rule build() {
        org.languagetool.rules.ml.MLServerProto.Rule result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.Rule buildPartial() {
        org.languagetool.rules.ml.MLServerProto.Rule result = new org.languagetool.rules.ml.MLServerProto.Rule(this);
        int from_bitField0_ = bitField0_;
        result.sourceFile_ = sourceFile_;
        result.issueType_ = issueType_;
        result.tempOff_ = tempOff_;
        if (categoryBuilder_ == null) {
          result.category_ = category_;
        } else {
          result.category_ = categoryBuilder_.build();
        }
        result.isPremium_ = isPremium_;
        if (((bitField0_ & 0x00000001) != 0)) {
          tags_ = java.util.Collections.unmodifiableList(tags_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.tags_ = tags_;
        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 org.languagetool.rules.ml.MLServerProto.Rule) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.Rule)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.Rule other) {
        if (other == org.languagetool.rules.ml.MLServerProto.Rule.getDefaultInstance()) return this;
        if (!other.getSourceFile().isEmpty()) {
          sourceFile_ = other.sourceFile_;
          onChanged();
        }
        if (!other.getIssueType().isEmpty()) {
          issueType_ = other.issueType_;
          onChanged();
        }
        if (other.getTempOff() != false) {
          setTempOff(other.getTempOff());
        }
        if (other.hasCategory()) {
          mergeCategory(other.getCategory());
        }
        if (other.getIsPremium() != false) {
          setIsPremium(other.getIsPremium());
        }
        if (!other.tags_.isEmpty()) {
          if (tags_.isEmpty()) {
            tags_ = other.tags_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureTagsIsMutable();
            tags_.addAll(other.tags_);
          }
          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 {
        org.languagetool.rules.ml.MLServerProto.Rule parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.Rule) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object sourceFile_ = "";
      /**
       * <pre>
       * id, subId, description, url already in Match
       * </pre>
       *
       * <code>string sourceFile = 1;</code>
       * @return The sourceFile.
       */
      public java.lang.String getSourceFile() {
        java.lang.Object ref = sourceFile_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          sourceFile_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * id, subId, description, url already in Match
       * </pre>
       *
       * <code>string sourceFile = 1;</code>
       * @return The bytes for sourceFile.
       */
      public com.google.protobuf.ByteString
          getSourceFileBytes() {
        java.lang.Object ref = sourceFile_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sourceFile_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * id, subId, description, url already in Match
       * </pre>
       *
       * <code>string sourceFile = 1;</code>
       * @param value The sourceFile to set.
       * @return This builder for chaining.
       */
      public Builder setSourceFile(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        sourceFile_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * id, subId, description, url already in Match
       * </pre>
       *
       * <code>string sourceFile = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearSourceFile() {
        
        sourceFile_ = getDefaultInstance().getSourceFile();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * id, subId, description, url already in Match
       * </pre>
       *
       * <code>string sourceFile = 1;</code>
       * @param value The bytes for sourceFile to set.
       * @return This builder for chaining.
       */
      public Builder setSourceFileBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        sourceFile_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object issueType_ = "";
      /**
       * <pre>
       * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
       * </pre>
       *
       * <code>string issueType = 2;</code>
       * @return The issueType.
       */
      public java.lang.String getIssueType() {
        java.lang.Object ref = issueType_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          issueType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
       * </pre>
       *
       * <code>string issueType = 2;</code>
       * @return The bytes for issueType.
       */
      public com.google.protobuf.ByteString
          getIssueTypeBytes() {
        java.lang.Object ref = issueType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          issueType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
       * </pre>
       *
       * <code>string issueType = 2;</code>
       * @param value The issueType to set.
       * @return This builder for chaining.
       */
      public Builder setIssueType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        issueType_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
       * </pre>
       *
       * <code>string issueType = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearIssueType() {
        
        issueType_ = getDefaultInstance().getIssueType();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * see http://www.w3.org/International/multilingualweb/lt/drafts/its20/its20.html#lqissue-typevalues
       * </pre>
       *
       * <code>string issueType = 2;</code>
       * @param value The bytes for issueType to set.
       * @return This builder for chaining.
       */
      public Builder setIssueTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        issueType_ = value;
        onChanged();
        return this;
      }

      private boolean tempOff_ ;
      /**
       * <code>bool tempOff = 3;</code>
       * @return The tempOff.
       */
      @java.lang.Override
      public boolean getTempOff() {
        return tempOff_;
      }
      /**
       * <code>bool tempOff = 3;</code>
       * @param value The tempOff to set.
       * @return This builder for chaining.
       */
      public Builder setTempOff(boolean value) {
        
        tempOff_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool tempOff = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearTempOff() {
        
        tempOff_ = false;
        onChanged();
        return this;
      }

      private org.languagetool.rules.ml.MLServerProto.RuleCategory category_;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.RuleCategory, org.languagetool.rules.ml.MLServerProto.RuleCategory.Builder, org.languagetool.rules.ml.MLServerProto.RuleCategoryOrBuilder> categoryBuilder_;
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       * @return Whether the category field is set.
       */
      public boolean hasCategory() {
        return categoryBuilder_ != null || category_ != null;
      }
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       * @return The category.
       */
      public org.languagetool.rules.ml.MLServerProto.RuleCategory getCategory() {
        if (categoryBuilder_ == null) {
          return category_ == null ? org.languagetool.rules.ml.MLServerProto.RuleCategory.getDefaultInstance() : category_;
        } else {
          return categoryBuilder_.getMessage();
        }
      }
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       */
      public Builder setCategory(org.languagetool.rules.ml.MLServerProto.RuleCategory value) {
        if (categoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          category_ = value;
          onChanged();
        } else {
          categoryBuilder_.setMessage(value);
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       */
      public Builder setCategory(
          org.languagetool.rules.ml.MLServerProto.RuleCategory.Builder builderForValue) {
        if (categoryBuilder_ == null) {
          category_ = builderForValue.build();
          onChanged();
        } else {
          categoryBuilder_.setMessage(builderForValue.build());
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       */
      public Builder mergeCategory(org.languagetool.rules.ml.MLServerProto.RuleCategory value) {
        if (categoryBuilder_ == null) {
          if (category_ != null) {
            category_ =
              org.languagetool.rules.ml.MLServerProto.RuleCategory.newBuilder(category_).mergeFrom(value).buildPartial();
          } else {
            category_ = value;
          }
          onChanged();
        } else {
          categoryBuilder_.mergeFrom(value);
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       */
      public Builder clearCategory() {
        if (categoryBuilder_ == null) {
          category_ = null;
          onChanged();
        } else {
          category_ = null;
          categoryBuilder_ = null;
        }

        return this;
      }
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.RuleCategory.Builder getCategoryBuilder() {
        
        onChanged();
        return getCategoryFieldBuilder().getBuilder();
      }
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       */
      public org.languagetool.rules.ml.MLServerProto.RuleCategoryOrBuilder getCategoryOrBuilder() {
        if (categoryBuilder_ != null) {
          return categoryBuilder_.getMessageOrBuilder();
        } else {
          return category_ == null ?
              org.languagetool.rules.ml.MLServerProto.RuleCategory.getDefaultInstance() : category_;
        }
      }
      /**
       * <code>.lt_ml_server.RuleCategory category = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.languagetool.rules.ml.MLServerProto.RuleCategory, org.languagetool.rules.ml.MLServerProto.RuleCategory.Builder, org.languagetool.rules.ml.MLServerProto.RuleCategoryOrBuilder> 
          getCategoryFieldBuilder() {
        if (categoryBuilder_ == null) {
          categoryBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.languagetool.rules.ml.MLServerProto.RuleCategory, org.languagetool.rules.ml.MLServerProto.RuleCategory.Builder, org.languagetool.rules.ml.MLServerProto.RuleCategoryOrBuilder>(
                  getCategory(),
                  getParentForChildren(),
                  isClean());
          category_ = null;
        }
        return categoryBuilder_;
      }

      private boolean isPremium_ ;
      /**
       * <code>bool isPremium = 5;</code>
       * @return The isPremium.
       */
      @java.lang.Override
      public boolean getIsPremium() {
        return isPremium_;
      }
      /**
       * <code>bool isPremium = 5;</code>
       * @param value The isPremium to set.
       * @return This builder for chaining.
       */
      public Builder setIsPremium(boolean value) {
        
        isPremium_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>bool isPremium = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearIsPremium() {
        
        isPremium_ = false;
        onChanged();
        return this;
      }

      private java.util.List<java.lang.Integer> tags_ =
        java.util.Collections.emptyList();
      private void ensureTagsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          tags_ = new java.util.ArrayList<java.lang.Integer>(tags_);
          bitField0_ |= 0x00000001;
        }
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @return A list containing the tags.
       */
      public java.util.List<org.languagetool.rules.ml.MLServerProto.Rule.Tag> getTagsList() {
        return new com.google.protobuf.Internal.ListAdapter<
            java.lang.Integer, org.languagetool.rules.ml.MLServerProto.Rule.Tag>(tags_, tags_converter_);
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @return The count of tags.
       */
      public int getTagsCount() {
        return tags_.size();
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @param index The index of the element to return.
       * @return The tags at the given index.
       */
      public org.languagetool.rules.ml.MLServerProto.Rule.Tag getTags(int index) {
        return tags_converter_.convert(tags_.get(index));
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @param index The index to set the value at.
       * @param value The tags to set.
       * @return This builder for chaining.
       */
      public Builder setTags(
          int index, org.languagetool.rules.ml.MLServerProto.Rule.Tag value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureTagsIsMutable();
        tags_.set(index, value.getNumber());
        onChanged();
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @param value The tags to add.
       * @return This builder for chaining.
       */
      public Builder addTags(org.languagetool.rules.ml.MLServerProto.Rule.Tag value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureTagsIsMutable();
        tags_.add(value.getNumber());
        onChanged();
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @param values The tags to add.
       * @return This builder for chaining.
       */
      public Builder addAllTags(
          java.lang.Iterable<? extends org.languagetool.rules.ml.MLServerProto.Rule.Tag> values) {
        ensureTagsIsMutable();
        for (org.languagetool.rules.ml.MLServerProto.Rule.Tag value : values) {
          tags_.add(value.getNumber());
        }
        onChanged();
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @return This builder for chaining.
       */
      public Builder clearTags() {
        tags_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @return A list containing the enum numeric values on the wire for tags.
       */
      public java.util.List<java.lang.Integer>
      getTagsValueList() {
        return java.util.Collections.unmodifiableList(tags_);
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @param index The index of the value to return.
       * @return The enum numeric value on the wire of tags at the given index.
       */
      public int getTagsValue(int index) {
        return tags_.get(index);
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @param index The index of the value to return.
       * @return The enum numeric value on the wire of tags at the given index.
       * @return This builder for chaining.
       */
      public Builder setTagsValue(
          int index, int value) {
        ensureTagsIsMutable();
        tags_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @param value The enum numeric value on the wire for tags to add.
       * @return This builder for chaining.
       */
      public Builder addTagsValue(int value) {
        ensureTagsIsMutable();
        tags_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated .lt_ml_server.Rule.Tag tags = 6;</code>
       * @param values The enum numeric values on the wire for tags to add.
       * @return This builder for chaining.
       */
      public Builder addAllTagsValue(
          java.lang.Iterable<java.lang.Integer> values) {
        ensureTagsIsMutable();
        for (int value : values) {
          tags_.add(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:lt_ml_server.Rule)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.Rule)
    private static final org.languagetool.rules.ml.MLServerProto.Rule DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.Rule();
    }

    public static org.languagetool.rules.ml.MLServerProto.Rule getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.Rule getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RuleCategoryOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.RuleCategory)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string id = 1;</code>
     * @return The id.
     */
    java.lang.String getId();
    /**
     * <code>string id = 1;</code>
     * @return The bytes for id.
     */
    com.google.protobuf.ByteString
        getIdBytes();

    /**
     * <code>string name = 2;</code>
     * @return The name.
     */
    java.lang.String getName();
    /**
     * <code>string name = 2;</code>
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();
  }
  /**
   * Protobuf type {@code lt_ml_server.RuleCategory}
   */
  public static final class RuleCategory extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.RuleCategory)
      RuleCategoryOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RuleCategory.newBuilder() to construct.
    private RuleCategory(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RuleCategory() {
      id_ = "";
      name_ = "";
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new RuleCategory();
    }

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

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

              name_ = 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 org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_RuleCategory_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_RuleCategory_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.RuleCategory.class, org.languagetool.rules.ml.MLServerProto.RuleCategory.Builder.class);
    }

    public static final int ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object id_;
    /**
     * <code>string id = 1;</code>
     * @return The id.
     */
    @java.lang.Override
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      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();
        id_ = s;
        return s;
      }
    }
    /**
     * <code>string id = 1;</code>
     * @return The bytes for id.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <code>string name = 2;</code>
     * @return The name.
     */
    @java.lang.Override
    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 = 2;</code>
     * @return The bytes for name.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private 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 (!getIdBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
      }
      if (!getNameBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getIdBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
      }
      if (!getNameBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
      }
      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 org.languagetool.rules.ml.MLServerProto.RuleCategory)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.RuleCategory other = (org.languagetool.rules.ml.MLServerProto.RuleCategory) obj;

      if (!getId()
          .equals(other.getId())) return false;
      if (!getName()
          .equals(other.getName())) 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) + ID_FIELD_NUMBER;
      hash = (53 * hash) + getId().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.RuleCategory parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory 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 org.languagetool.rules.ml.MLServerProto.RuleCategory parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory 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 org.languagetool.rules.ml.MLServerProto.RuleCategory parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.RuleCategory 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(org.languagetool.rules.ml.MLServerProto.RuleCategory 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 lt_ml_server.RuleCategory}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.RuleCategory)
        org.languagetool.rules.ml.MLServerProto.RuleCategoryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_RuleCategory_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_RuleCategory_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.RuleCategory.class, org.languagetool.rules.ml.MLServerProto.RuleCategory.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.RuleCategory.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();
        id_ = "";

        name_ = "";

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_RuleCategory_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.RuleCategory getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.RuleCategory.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.RuleCategory build() {
        org.languagetool.rules.ml.MLServerProto.RuleCategory result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.RuleCategory buildPartial() {
        org.languagetool.rules.ml.MLServerProto.RuleCategory result = new org.languagetool.rules.ml.MLServerProto.RuleCategory(this);
        result.id_ = id_;
        result.name_ = name_;
        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 org.languagetool.rules.ml.MLServerProto.RuleCategory) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.RuleCategory)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.RuleCategory other) {
        if (other == org.languagetool.rules.ml.MLServerProto.RuleCategory.getDefaultInstance()) return this;
        if (!other.getId().isEmpty()) {
          id_ = other.id_;
          onChanged();
        }
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          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 {
        org.languagetool.rules.ml.MLServerProto.RuleCategory parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.RuleCategory) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object id_ = "";
      /**
       * <code>string id = 1;</code>
       * @return The id.
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string id = 1;</code>
       * @return The bytes for id.
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string id = 1;</code>
       * @param value The id to set.
       * @return This builder for chaining.
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string id = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearId() {
        
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }
      /**
       * <code>string id = 1;</code>
       * @param value The bytes for id to set.
       * @return This builder for chaining.
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        id_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <code>string name = 2;</code>
       * @return The name.
       */
      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 = 2;</code>
       * @return The bytes for name.
       */
      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 = 2;</code>
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string name = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>string name = 2;</code>
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = 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:lt_ml_server.RuleCategory)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.RuleCategory)
    private static final org.languagetool.rules.ml.MLServerProto.RuleCategory DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.RuleCategory();
    }

    public static org.languagetool.rules.ml.MLServerProto.RuleCategory getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.RuleCategory getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SuggestedReplacementOrBuilder extends
      // @@protoc_insertion_point(interface_extends:lt_ml_server.SuggestedReplacement)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>string replacement = 1;</code>
     * @return The replacement.
     */
    java.lang.String getReplacement();
    /**
     * <code>string replacement = 1;</code>
     * @return The bytes for replacement.
     */
    com.google.protobuf.ByteString
        getReplacementBytes();

    /**
     * <code>string description = 2;</code>
     * @return The description.
     */
    java.lang.String getDescription();
    /**
     * <code>string description = 2;</code>
     * @return The bytes for description.
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();

    /**
     * <pre>
     * Value shown in the UI after the replacement (but not part of it).
     * </pre>
     *
     * <code>string suffix = 3;</code>
     * @return The suffix.
     */
    java.lang.String getSuffix();
    /**
     * <pre>
     * Value shown in the UI after the replacement (but not part of it).
     * </pre>
     *
     * <code>string suffix = 3;</code>
     * @return The bytes for suffix.
     */
    com.google.protobuf.ByteString
        getSuffixBytes();

    /**
     * <pre>
     * from 0 (lowest) to 1 (highest)
     * </pre>
     *
     * <code>float confidence = 4;</code>
     * @return The confidence.
     */
    float getConfidence();

    /**
     * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
     * @return The enum numeric value on the wire for type.
     */
    int getTypeValue();
    /**
     * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
     * @return The type.
     */
    org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType getType();
  }
  /**
   * Protobuf type {@code lt_ml_server.SuggestedReplacement}
   */
  public static final class SuggestedReplacement extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:lt_ml_server.SuggestedReplacement)
      SuggestedReplacementOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SuggestedReplacement.newBuilder() to construct.
    private SuggestedReplacement(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SuggestedReplacement() {
      replacement_ = "";
      description_ = "";
      suffix_ = "";
      type_ = 0;
    }

    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new SuggestedReplacement();
    }

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

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

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

              suffix_ = s;
              break;
            }
            case 37: {

              confidence_ = input.readFloat();
              break;
            }
            case 40: {
              int rawValue = input.readEnum();

              type_ = rawValue;
              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 org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_SuggestedReplacement_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_SuggestedReplacement_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.class, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder.class);
    }

    /**
     * Protobuf enum {@code lt_ml_server.SuggestedReplacement.SuggestionType}
     */
    public enum SuggestionType
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * <code>Default = 0;</code>
       */
      Default(0),
      /**
       * <code>Translation = 1;</code>
       */
      Translation(1),
      /**
       * <code>Curated = 2;</code>
       */
      Curated(2),
      UNRECOGNIZED(-1),
      ;

      /**
       * <code>Default = 0;</code>
       */
      public static final int Default_VALUE = 0;
      /**
       * <code>Translation = 1;</code>
       */
      public static final int Translation_VALUE = 1;
      /**
       * <code>Curated = 2;</code>
       */
      public static final int Curated_VALUE = 2;


      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static SuggestionType valueOf(int value) {
        return forNumber(value);
      }

      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static SuggestionType forNumber(int value) {
        switch (value) {
          case 0: return Default;
          case 1: return Translation;
          case 2: return Curated;
          default: return null;
        }
      }

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

      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.getDescriptor().getEnumTypes().get(0);
      }

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

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

      private final int value;

      private SuggestionType(int value) {
        this.value = value;
      }

      // @@protoc_insertion_point(enum_scope:lt_ml_server.SuggestedReplacement.SuggestionType)
    }

    public static final int REPLACEMENT_FIELD_NUMBER = 1;
    private volatile java.lang.Object replacement_;
    /**
     * <code>string replacement = 1;</code>
     * @return The replacement.
     */
    @java.lang.Override
    public java.lang.String getReplacement() {
      java.lang.Object ref = replacement_;
      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();
        replacement_ = s;
        return s;
      }
    }
    /**
     * <code>string replacement = 1;</code>
     * @return The bytes for replacement.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReplacementBytes() {
      java.lang.Object ref = replacement_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        replacement_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DESCRIPTION_FIELD_NUMBER = 2;
    private volatile java.lang.Object description_;
    /**
     * <code>string description = 2;</code>
     * @return The description.
     */
    @java.lang.Override
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      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();
        description_ = s;
        return s;
      }
    }
    /**
     * <code>string description = 2;</code>
     * @return The bytes for description.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SUFFIX_FIELD_NUMBER = 3;
    private volatile java.lang.Object suffix_;
    /**
     * <pre>
     * Value shown in the UI after the replacement (but not part of it).
     * </pre>
     *
     * <code>string suffix = 3;</code>
     * @return The suffix.
     */
    @java.lang.Override
    public java.lang.String getSuffix() {
      java.lang.Object ref = suffix_;
      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();
        suffix_ = s;
        return s;
      }
    }
    /**
     * <pre>
     * Value shown in the UI after the replacement (but not part of it).
     * </pre>
     *
     * <code>string suffix = 3;</code>
     * @return The bytes for suffix.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getSuffixBytes() {
      java.lang.Object ref = suffix_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        suffix_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int CONFIDENCE_FIELD_NUMBER = 4;
    private float confidence_;
    /**
     * <pre>
     * from 0 (lowest) to 1 (highest)
     * </pre>
     *
     * <code>float confidence = 4;</code>
     * @return The confidence.
     */
    @java.lang.Override
    public float getConfidence() {
      return confidence_;
    }

    public static final int TYPE_FIELD_NUMBER = 5;
    private int type_;
    /**
     * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
     * @return The enum numeric value on the wire for type.
     */
    @java.lang.Override public int getTypeValue() {
      return type_;
    }
    /**
     * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
     * @return The type.
     */
    @java.lang.Override public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType getType() {
      @SuppressWarnings("deprecation")
      org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType result = org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType.valueOf(type_);
      return result == null ? org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType.UNRECOGNIZED : result;
    }

    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 (!getReplacementBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, replacement_);
      }
      if (!getDescriptionBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, description_);
      }
      if (!getSuffixBytes().isEmpty()) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, suffix_);
      }
      if (confidence_ != 0F) {
        output.writeFloat(4, confidence_);
      }
      if (type_ != org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType.Default.getNumber()) {
        output.writeEnum(5, type_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (!getReplacementBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, replacement_);
      }
      if (!getDescriptionBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, description_);
      }
      if (!getSuffixBytes().isEmpty()) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, suffix_);
      }
      if (confidence_ != 0F) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(4, confidence_);
      }
      if (type_ != org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType.Default.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(5, type_);
      }
      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 org.languagetool.rules.ml.MLServerProto.SuggestedReplacement)) {
        return super.equals(obj);
      }
      org.languagetool.rules.ml.MLServerProto.SuggestedReplacement other = (org.languagetool.rules.ml.MLServerProto.SuggestedReplacement) obj;

      if (!getReplacement()
          .equals(other.getReplacement())) return false;
      if (!getDescription()
          .equals(other.getDescription())) return false;
      if (!getSuffix()
          .equals(other.getSuffix())) return false;
      if (java.lang.Float.floatToIntBits(getConfidence())
          != java.lang.Float.floatToIntBits(
              other.getConfidence())) return false;
      if (type_ != other.type_) 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) + REPLACEMENT_FIELD_NUMBER;
      hash = (53 * hash) + getReplacement().hashCode();
      hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
      hash = (53 * hash) + getDescription().hashCode();
      hash = (37 * hash) + SUFFIX_FIELD_NUMBER;
      hash = (53 * hash) + getSuffix().hashCode();
      hash = (37 * hash) + CONFIDENCE_FIELD_NUMBER;
      hash = (53 * hash) + java.lang.Float.floatToIntBits(
          getConfidence());
      hash = (37 * hash) + TYPE_FIELD_NUMBER;
      hash = (53 * hash) + type_;
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement 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 org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement 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 org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement 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(org.languagetool.rules.ml.MLServerProto.SuggestedReplacement 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 lt_ml_server.SuggestedReplacement}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:lt_ml_server.SuggestedReplacement)
        org.languagetool.rules.ml.MLServerProto.SuggestedReplacementOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_SuggestedReplacement_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_SuggestedReplacement_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.class, org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.Builder.class);
      }

      // Construct using org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.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();
        replacement_ = "";

        description_ = "";

        suffix_ = "";

        confidence_ = 0F;

        type_ = 0;

        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.languagetool.rules.ml.MLServerProto.internal_static_lt_ml_server_SuggestedReplacement_descriptor;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement getDefaultInstanceForType() {
        return org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.getDefaultInstance();
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement build() {
        org.languagetool.rules.ml.MLServerProto.SuggestedReplacement result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement buildPartial() {
        org.languagetool.rules.ml.MLServerProto.SuggestedReplacement result = new org.languagetool.rules.ml.MLServerProto.SuggestedReplacement(this);
        result.replacement_ = replacement_;
        result.description_ = description_;
        result.suffix_ = suffix_;
        result.confidence_ = confidence_;
        result.type_ = type_;
        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 org.languagetool.rules.ml.MLServerProto.SuggestedReplacement) {
          return mergeFrom((org.languagetool.rules.ml.MLServerProto.SuggestedReplacement)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.languagetool.rules.ml.MLServerProto.SuggestedReplacement other) {
        if (other == org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.getDefaultInstance()) return this;
        if (!other.getReplacement().isEmpty()) {
          replacement_ = other.replacement_;
          onChanged();
        }
        if (!other.getDescription().isEmpty()) {
          description_ = other.description_;
          onChanged();
        }
        if (!other.getSuffix().isEmpty()) {
          suffix_ = other.suffix_;
          onChanged();
        }
        if (other.getConfidence() != 0F) {
          setConfidence(other.getConfidence());
        }
        if (other.type_ != 0) {
          setTypeValue(other.getTypeValue());
        }
        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 {
        org.languagetool.rules.ml.MLServerProto.SuggestedReplacement parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.languagetool.rules.ml.MLServerProto.SuggestedReplacement) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }

      private java.lang.Object replacement_ = "";
      /**
       * <code>string replacement = 1;</code>
       * @return The replacement.
       */
      public java.lang.String getReplacement() {
        java.lang.Object ref = replacement_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          replacement_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string replacement = 1;</code>
       * @return The bytes for replacement.
       */
      public com.google.protobuf.ByteString
          getReplacementBytes() {
        java.lang.Object ref = replacement_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          replacement_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string replacement = 1;</code>
       * @param value The replacement to set.
       * @return This builder for chaining.
       */
      public Builder setReplacement(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        replacement_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string replacement = 1;</code>
       * @return This builder for chaining.
       */
      public Builder clearReplacement() {
        
        replacement_ = getDefaultInstance().getReplacement();
        onChanged();
        return this;
      }
      /**
       * <code>string replacement = 1;</code>
       * @param value The bytes for replacement to set.
       * @return This builder for chaining.
       */
      public Builder setReplacementBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        replacement_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object description_ = "";
      /**
       * <code>string description = 2;</code>
       * @return The description.
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          description_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>string description = 2;</code>
       * @return The bytes for description.
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>string description = 2;</code>
       * @param value The description to set.
       * @return This builder for chaining.
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>string description = 2;</code>
       * @return This builder for chaining.
       */
      public Builder clearDescription() {
        
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <code>string description = 2;</code>
       * @param value The bytes for description to set.
       * @return This builder for chaining.
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        description_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object suffix_ = "";
      /**
       * <pre>
       * Value shown in the UI after the replacement (but not part of it).
       * </pre>
       *
       * <code>string suffix = 3;</code>
       * @return The suffix.
       */
      public java.lang.String getSuffix() {
        java.lang.Object ref = suffix_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          suffix_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Value shown in the UI after the replacement (but not part of it).
       * </pre>
       *
       * <code>string suffix = 3;</code>
       * @return The bytes for suffix.
       */
      public com.google.protobuf.ByteString
          getSuffixBytes() {
        java.lang.Object ref = suffix_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          suffix_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Value shown in the UI after the replacement (but not part of it).
       * </pre>
       *
       * <code>string suffix = 3;</code>
       * @param value The suffix to set.
       * @return This builder for chaining.
       */
      public Builder setSuffix(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        suffix_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Value shown in the UI after the replacement (but not part of it).
       * </pre>
       *
       * <code>string suffix = 3;</code>
       * @return This builder for chaining.
       */
      public Builder clearSuffix() {
        
        suffix_ = getDefaultInstance().getSuffix();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Value shown in the UI after the replacement (but not part of it).
       * </pre>
       *
       * <code>string suffix = 3;</code>
       * @param value The bytes for suffix to set.
       * @return This builder for chaining.
       */
      public Builder setSuffixBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        suffix_ = value;
        onChanged();
        return this;
      }

      private float confidence_ ;
      /**
       * <pre>
       * from 0 (lowest) to 1 (highest)
       * </pre>
       *
       * <code>float confidence = 4;</code>
       * @return The confidence.
       */
      @java.lang.Override
      public float getConfidence() {
        return confidence_;
      }
      /**
       * <pre>
       * from 0 (lowest) to 1 (highest)
       * </pre>
       *
       * <code>float confidence = 4;</code>
       * @param value The confidence to set.
       * @return This builder for chaining.
       */
      public Builder setConfidence(float value) {
        
        confidence_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * from 0 (lowest) to 1 (highest)
       * </pre>
       *
       * <code>float confidence = 4;</code>
       * @return This builder for chaining.
       */
      public Builder clearConfidence() {
        
        confidence_ = 0F;
        onChanged();
        return this;
      }

      private int type_ = 0;
      /**
       * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
       * @return The enum numeric value on the wire for type.
       */
      @java.lang.Override public int getTypeValue() {
        return type_;
      }
      /**
       * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
       * @param value The enum numeric value on the wire for type to set.
       * @return This builder for chaining.
       */
      public Builder setTypeValue(int value) {
        
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
       * @return The type.
       */
      @java.lang.Override
      public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType getType() {
        @SuppressWarnings("deprecation")
        org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType result = org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType.valueOf(type_);
        return result == null ? org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType.UNRECOGNIZED : result;
      }
      /**
       * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
       * @param value The type to set.
       * @return This builder for chaining.
       */
      public Builder setType(org.languagetool.rules.ml.MLServerProto.SuggestedReplacement.SuggestionType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        type_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>.lt_ml_server.SuggestedReplacement.SuggestionType type = 5;</code>
       * @return This builder for chaining.
       */
      public Builder clearType() {
        
        type_ = 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:lt_ml_server.SuggestedReplacement)
    }

    // @@protoc_insertion_point(class_scope:lt_ml_server.SuggestedReplacement)
    private static final org.languagetool.rules.ml.MLServerProto.SuggestedReplacement DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.languagetool.rules.ml.MLServerProto.SuggestedReplacement();
    }

    public static org.languagetool.rules.ml.MLServerProto.SuggestedReplacement getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    @java.lang.Override
    public org.languagetool.rules.ml.MLServerProto.SuggestedReplacement getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_AnalyzeRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_AnalyzeRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_ProcessingOptions_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_ProcessingOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_AnalyzeResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_AnalyzeResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_ProcessRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_ProcessRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_ProcessResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_ProcessResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_AnalyzedMatchRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_AnalyzedMatchRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_AnalyzedSentence_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_AnalyzedSentence_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_AnalyzedTokenReadings_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_AnalyzedTokenReadings_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_AnalyzedToken_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_AnalyzedToken_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_PostProcessingRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_PostProcessingRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_MatchRequest_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_MatchRequest_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_MatchResponse_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_MatchResponse_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_MatchList_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_MatchList_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_Match_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_Match_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_Rule_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_Rule_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_RuleCategory_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_RuleCategory_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_lt_ml_server_SuggestedReplacement_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_lt_ml_server_SuggestedReplacement_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\017ml_server.proto\022\014lt_ml_server\"P\n\016Analy" +
      "zeRequest\022\014\n\004text\030\001 \001(\t\0220\n\007options\030\002 \001(\013" +
      "2\037.lt_ml_server.ProcessingOptions\"\327\002\n\021Pr" +
      "ocessingOptions\022\020\n\010language\030\001 \001(\t\022\017\n\007tem" +
      "pOff\030\002 \001(\010\0224\n\005level\030\003 \001(\0162%.lt_ml_server" +
      ".ProcessingOptions.Level\022\017\n\007premium\030\004 \001(" +
      "\010\022\023\n\013enabledOnly\030\005 \001(\010\022\024\n\014enabledRules\030\006" +
      " \003(\t\022\025\n\rdisabledRules\030\007 \003(\t\"\225\001\n\005Level\022\t\n" +
      "\005picky\020\000\022\014\n\010academic\020\001\022\013\n\007clarity\020\002\022\020\n\014p" +
      "rofessional\020\003\022\014\n\010creative\020\004\022\014\n\010customer\020" +
      "\005\022\n\n\006jobapp\020\006\022\r\n\tobjective\020\007\022\013\n\007elegant\020" +
      "\010\022\020\n\014defaultLevel\020\t\"D\n\017AnalyzeResponse\0221" +
      "\n\tsentences\030\001 \003(\0132\036.lt_ml_server.Analyze" +
      "dSentence\"u\n\016ProcessRequest\0221\n\tsentences" +
      "\030\001 \003(\0132\036.lt_ml_server.AnalyzedSentence\0220" +
      "\n\007options\030\002 \001(\0132\037.lt_ml_server.Processin" +
      "gOptions\"`\n\017ProcessResponse\022\'\n\nrawMatche" +
      "s\030\001 \003(\0132\023.lt_ml_server.Match\022$\n\007matches\030" +
      "\002 \003(\0132\023.lt_ml_server.Match\"v\n\024AnalyzedMa" +
      "tchRequest\0221\n\tsentences\030\001 \003(\0132\036.lt_ml_se" +
      "rver.AnalyzedSentence\022\024\n\014inputLogging\030\002 " +
      "\001(\010\022\025\n\rtextSessionID\030\003 \003(\003\"U\n\020AnalyzedSe" +
      "ntence\022\014\n\004text\030\001 \001(\t\0223\n\006tokens\030\002 \003(\0132#.l" +
      "t_ml_server.AnalyzedTokenReadings\"k\n\025Ana" +
      "lyzedTokenReadings\022-\n\010readings\030\001 \003(\0132\033.l" +
      "t_ml_server.AnalyzedToken\022\021\n\tchunkTags\030\002" +
      " \003(\t\022\020\n\010startPos\030\003 \001(\005\"=\n\rAnalyzedToken\022" +
      "\r\n\005token\030\001 \001(\t\022\016\n\006posTag\030\002 \001(\t\022\r\n\005lemma\030" +
      "\003 \001(\t\"\201\001\n\025PostProcessingRequest\022\021\n\tsente" +
      "nces\030\001 \003(\t\022(\n\007matches\030\002 \003(\0132\027.lt_ml_serv" +
      "er.MatchList\022\024\n\014inputLogging\030\003 \001(\010\022\025\n\rte" +
      "xtSessionID\030\004 \003(\003\"N\n\014MatchRequest\022\021\n\tsen" +
      "tences\030\001 \003(\t\022\024\n\014inputLogging\030\002 \001(\010\022\025\n\rte" +
      "xtSessionID\030\003 \003(\003\"A\n\rMatchResponse\0220\n\017se" +
      "ntenceMatches\030\001 \003(\0132\027.lt_ml_server.Match" +
      "List\"1\n\tMatchList\022$\n\007matches\030\001 \003(\0132\023.lt_" +
      "ml_server.Match\"\256\003\n\005Match\022\016\n\006offset\030\001 \001(" +
      "\r\022\016\n\006length\030\002 \001(\r\022\n\n\002id\030\003 \001(\t\022\016\n\006sub_id\030" +
      "\004 \001(\t\022\023\n\013suggestions\030\005 \003(\t\022\027\n\017ruleDescri" +
      "ption\030\006 \001(\t\022\030\n\020matchDescription\030\007 \001(\t\022\035\n" +
      "\025matchShortDescription\030\010 \001(\t\022\013\n\003url\030\t \001(" +
      "\t\022A\n\025suggestedReplacements\030\n \003(\0132\".lt_ml" +
      "_server.SuggestedReplacement\022\023\n\013autoCorr" +
      "ect\030\013 \001(\010\022+\n\004type\030\014 \001(\0162\035.lt_ml_server.M" +
      "atch.MatchType\022\033\n\023contextForSureMatch\030\r " +
      "\001(\021\022 \n\004rule\030\016 \001(\0132\022.lt_ml_server.Rule\"1\n" +
      "\tMatchType\022\017\n\013UnknownWord\020\000\022\010\n\004Hint\020\001\022\t\n" +
      "\005Other\020\002\"\251\002\n\004Rule\022\022\n\nsourceFile\030\001 \001(\t\022\021\n" +
      "\tissueType\030\002 \001(\t\022\017\n\007tempOff\030\003 \001(\010\022,\n\010cat" +
      "egory\030\004 \001(\0132\032.lt_ml_server.RuleCategory\022" +
      "\021\n\tisPremium\030\005 \001(\010\022$\n\004tags\030\006 \003(\0162\026.lt_ml" +
      "_server.Rule.Tag\"\201\001\n\003Tag\022\t\n\005picky\020\000\022\014\n\010a" +
      "cademic\020\001\022\013\n\007clarity\020\002\022\020\n\014professional\020\003" +
      "\022\014\n\010creative\020\004\022\014\n\010customer\020\005\022\n\n\006jobapp\020\006" +
      "\022\r\n\tobjective\020\007\022\013\n\007elegant\020\010\"(\n\014RuleCate" +
      "gory\022\n\n\002id\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\"\342\001\n\024Sugge" +
      "stedReplacement\022\023\n\013replacement\030\001 \001(\t\022\023\n\013" +
      "description\030\002 \001(\t\022\016\n\006suffix\030\003 \001(\t\022\022\n\ncon" +
      "fidence\030\004 \001(\002\022?\n\004type\030\005 \001(\01621.lt_ml_serv" +
      "er.SuggestedReplacement.SuggestionType\";" +
      "\n\016SuggestionType\022\013\n\007Default\020\000\022\017\n\013Transla" +
      "tion\020\001\022\013\n\007Curated\020\0022\246\001\n\020ProcessingServer" +
      "\022H\n\007Analyze\022\034.lt_ml_server.AnalyzeReques" +
      "t\032\035.lt_ml_server.AnalyzeResponse\"\000\022H\n\007Pr" +
      "ocess\022\034.lt_ml_server.ProcessRequest\032\035.lt" +
      "_ml_server.ProcessResponse\"\0002\242\001\n\010MLServe" +
      "r\022B\n\005Match\022\032.lt_ml_server.MatchRequest\032\033" +
      ".lt_ml_server.MatchResponse\"\000\022R\n\rMatchAn" +
      "alyzed\022\".lt_ml_server.AnalyzedMatchReque" +
      "st\032\033.lt_ml_server.MatchResponse\"\0002e\n\024Pos" +
      "tProcessingServer\022M\n\007Process\022#.lt_ml_ser" +
      "ver.PostProcessingRequest\032\033.lt_ml_server" +
      ".MatchResponse\"\000B*\n\031org.languagetool.rul" +
      "es.mlB\rMLServerProtob\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        });
    internal_static_lt_ml_server_AnalyzeRequest_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_lt_ml_server_AnalyzeRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_AnalyzeRequest_descriptor,
        new java.lang.String[] { "Text", "Options", });
    internal_static_lt_ml_server_ProcessingOptions_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_lt_ml_server_ProcessingOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_ProcessingOptions_descriptor,
        new java.lang.String[] { "Language", "TempOff", "Level", "Premium", "EnabledOnly", "EnabledRules", "DisabledRules", });
    internal_static_lt_ml_server_AnalyzeResponse_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_lt_ml_server_AnalyzeResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_AnalyzeResponse_descriptor,
        new java.lang.String[] { "Sentences", });
    internal_static_lt_ml_server_ProcessRequest_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_lt_ml_server_ProcessRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_ProcessRequest_descriptor,
        new java.lang.String[] { "Sentences", "Options", });
    internal_static_lt_ml_server_ProcessResponse_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_lt_ml_server_ProcessResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_ProcessResponse_descriptor,
        new java.lang.String[] { "RawMatches", "Matches", });
    internal_static_lt_ml_server_AnalyzedMatchRequest_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_lt_ml_server_AnalyzedMatchRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_AnalyzedMatchRequest_descriptor,
        new java.lang.String[] { "Sentences", "InputLogging", "TextSessionID", });
    internal_static_lt_ml_server_AnalyzedSentence_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_lt_ml_server_AnalyzedSentence_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_AnalyzedSentence_descriptor,
        new java.lang.String[] { "Text", "Tokens", });
    internal_static_lt_ml_server_AnalyzedTokenReadings_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_lt_ml_server_AnalyzedTokenReadings_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_AnalyzedTokenReadings_descriptor,
        new java.lang.String[] { "Readings", "ChunkTags", "StartPos", });
    internal_static_lt_ml_server_AnalyzedToken_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_lt_ml_server_AnalyzedToken_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_AnalyzedToken_descriptor,
        new java.lang.String[] { "Token", "PosTag", "Lemma", });
    internal_static_lt_ml_server_PostProcessingRequest_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_lt_ml_server_PostProcessingRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_PostProcessingRequest_descriptor,
        new java.lang.String[] { "Sentences", "Matches", "InputLogging", "TextSessionID", });
    internal_static_lt_ml_server_MatchRequest_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_lt_ml_server_MatchRequest_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_MatchRequest_descriptor,
        new java.lang.String[] { "Sentences", "InputLogging", "TextSessionID", });
    internal_static_lt_ml_server_MatchResponse_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_lt_ml_server_MatchResponse_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_MatchResponse_descriptor,
        new java.lang.String[] { "SentenceMatches", });
    internal_static_lt_ml_server_MatchList_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_lt_ml_server_MatchList_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_MatchList_descriptor,
        new java.lang.String[] { "Matches", });
    internal_static_lt_ml_server_Match_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_lt_ml_server_Match_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_Match_descriptor,
        new java.lang.String[] { "Offset", "Length", "Id", "SubId", "Suggestions", "RuleDescription", "MatchDescription", "MatchShortDescription", "Url", "SuggestedReplacements", "AutoCorrect", "Type", "ContextForSureMatch", "Rule", });
    internal_static_lt_ml_server_Rule_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_lt_ml_server_Rule_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_Rule_descriptor,
        new java.lang.String[] { "SourceFile", "IssueType", "TempOff", "Category", "IsPremium", "Tags", });
    internal_static_lt_ml_server_RuleCategory_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_lt_ml_server_RuleCategory_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_RuleCategory_descriptor,
        new java.lang.String[] { "Id", "Name", });
    internal_static_lt_ml_server_SuggestedReplacement_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_lt_ml_server_SuggestedReplacement_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_lt_ml_server_SuggestedReplacement_descriptor,
        new java.lang.String[] { "Replacement", "Description", "Suffix", "Confidence", "Type", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
