package com.knecon.fforesight.service.layoutparser.internal.api.data.redaction;

// Generated by the protocol buffer compiler.  DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: DocumentPositionData.proto
// Protobuf Java Version: 4.27.1
@SuppressWarnings("all")
public final class DocumentPositionDataProto {

    private DocumentPositionDataProto() {}


    static {
        com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
                /* major= */ 4,
                /* minor= */ 27,
                /* patch= */ 1,
                /* suffix= */ "", DocumentPositionDataProto.class.getName());
    }

    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 AllDocumentPositionDataOrBuilder extends
            // @@protoc_insertion_point(interface_extends:AllDocumentPositionData)
            com.google.protobuf.MessageOrBuilder {

        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        java.util.List<DocumentPositionData> getDocumentPositionDataList();


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        DocumentPositionData getDocumentPositionData(int index);


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        int getDocumentPositionDataCount();


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        java.util.List<? extends DocumentPositionDataOrBuilder> getDocumentPositionDataOrBuilderList();


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        DocumentPositionDataOrBuilder getDocumentPositionDataOrBuilder(int index);

    }

    /**
     * Protobuf type {@code AllDocumentPositionData}
     */
    public static final class AllDocumentPositionData extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:AllDocumentPositionData)
            AllDocumentPositionDataOrBuilder {

        private static final long serialVersionUID = 0L;

        static {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
                    /* major= */ 4,
                    /* minor= */ 27,
                    /* patch= */ 1,
                    /* suffix= */ "", AllDocumentPositionData.class.getName());
        }

        // Use AllDocumentPositionData.newBuilder() to construct.
        private AllDocumentPositionData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {

            super(builder);
        }


        private AllDocumentPositionData() {

            documentPositionData_ = java.util.Collections.emptyList();
        }


        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {

            return DocumentPositionDataProto.internal_static_AllDocumentPositionData_descriptor;
        }


        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {

            return DocumentPositionDataProto.internal_static_AllDocumentPositionData_fieldAccessorTable.ensureFieldAccessorsInitialized(AllDocumentPositionData.class,
                                                                                                                                        AllDocumentPositionData.Builder.class);
        }


        public static final int DOCUMENTPOSITIONDATA_FIELD_NUMBER = 1;
        @SuppressWarnings("serial")
        private java.util.List<DocumentPositionData> documentPositionData_;


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        @java.lang.Override
        public java.util.List<DocumentPositionData> getDocumentPositionDataList() {

            return documentPositionData_;
        }


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        @java.lang.Override
        public java.util.List<? extends DocumentPositionDataOrBuilder> getDocumentPositionDataOrBuilderList() {

            return documentPositionData_;
        }


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        @java.lang.Override
        public int getDocumentPositionDataCount() {

            return documentPositionData_.size();
        }


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        @java.lang.Override
        public DocumentPositionData getDocumentPositionData(int index) {

            return documentPositionData_.get(index);
        }


        /**
         * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
         */
        @java.lang.Override
        public DocumentPositionDataOrBuilder getDocumentPositionDataOrBuilder(int index) {

            return documentPositionData_.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 < documentPositionData_.size(); i++) {
                output.writeMessage(1, documentPositionData_.get(i));
            }
            getUnknownFields().writeTo(output);
        }


        @java.lang.Override
        public int getSerializedSize() {

            int size = memoizedSize;
          if (size != -1) {
            return size;
          }

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


        @java.lang.Override
        public boolean equals(final java.lang.Object obj) {

            if (obj == this) {
                return true;
            }
            if (!(obj instanceof AllDocumentPositionData)) {
                return super.equals(obj);
            }
            AllDocumentPositionData other = (AllDocumentPositionData) obj;

          if (!getDocumentPositionDataList().equals(other.getDocumentPositionDataList())) {
            return false;
          }
          if (!getUnknownFields().equals(other.getUnknownFields())) {
            return false;
          }
            return true;
        }


        @java.lang.Override
        public int hashCode() {

            if (memoizedHashCode != 0) {
                return memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (getDocumentPositionDataCount() > 0) {
                hash = (37 * hash) + DOCUMENTPOSITIONDATA_FIELD_NUMBER;
                hash = (53 * hash) + getDocumentPositionDataList().hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            memoizedHashCode = hash;
            return hash;
        }


        public static AllDocumentPositionData parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data);
        }


        public static AllDocumentPositionData parseFrom(java.nio.ByteBuffer data,
                                                        com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data, extensionRegistry);
        }


        public static AllDocumentPositionData parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data);
        }


        public static AllDocumentPositionData parseFrom(com.google.protobuf.ByteString data,
                                                        com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data, extensionRegistry);
        }


        public static AllDocumentPositionData parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data);
        }


        public static AllDocumentPositionData parseFrom(byte[] data,
                                                        com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data, extensionRegistry);
        }


        public static AllDocumentPositionData parseFrom(java.io.InputStream input) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }


        public static AllDocumentPositionData parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }


        public static AllDocumentPositionData parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }


        public static AllDocumentPositionData parseDelimitedFrom(java.io.InputStream input,
                                                                 com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }


        public static AllDocumentPositionData parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }


        public static AllDocumentPositionData parseFrom(com.google.protobuf.CodedInputStream input,
                                                        com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }


        @java.lang.Override
        public Builder newBuilderForType() {return newBuilder();}


        public static Builder newBuilder() {

            return DEFAULT_INSTANCE.toBuilder();
        }


        public static Builder newBuilder(AllDocumentPositionData 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.GeneratedMessage.BuilderParent parent) {

            Builder builder = new Builder(parent);
            return builder;
        }


        /**
         * Protobuf type {@code AllDocumentPositionData}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:AllDocumentPositionData)
                AllDocumentPositionDataOrBuilder {

            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {

                return DocumentPositionDataProto.internal_static_AllDocumentPositionData_descriptor;
            }


            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {

                return DocumentPositionDataProto.internal_static_AllDocumentPositionData_fieldAccessorTable.ensureFieldAccessorsInitialized(AllDocumentPositionData.class,
                                                                                                                                            AllDocumentPositionData.Builder.class);
            }


            // Construct using AllDocumentPositionData.newBuilder()
            private Builder() {

            }


            private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {

                super(parent);

            }


            @java.lang.Override
            public Builder clear() {

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


            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {

                return DocumentPositionDataProto.internal_static_AllDocumentPositionData_descriptor;
            }


            @java.lang.Override
            public AllDocumentPositionData getDefaultInstanceForType() {

                return AllDocumentPositionData.getDefaultInstance();
            }


            @java.lang.Override
            public AllDocumentPositionData build() {

                AllDocumentPositionData result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }


            @java.lang.Override
            public AllDocumentPositionData buildPartial() {

                AllDocumentPositionData result = new AllDocumentPositionData(this);
                buildPartialRepeatedFields(result);
                if (bitField0_ != 0) {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }


            private void buildPartialRepeatedFields(AllDocumentPositionData result) {

                if (documentPositionDataBuilder_ == null) {
                    if (((bitField0_ & 0x00000001) != 0)) {
                        documentPositionData_ = java.util.Collections.unmodifiableList(documentPositionData_);
                        bitField0_ = (bitField0_ & ~0x00000001);
                    }
                    result.documentPositionData_ = documentPositionData_;
                } else {
                    result.documentPositionData_ = documentPositionDataBuilder_.build();
                }
            }


            private void buildPartial0(AllDocumentPositionData result) {

                int from_bitField0_ = bitField0_;
            }


            @java.lang.Override
            public Builder mergeFrom(com.google.protobuf.Message other) {

                if (other instanceof AllDocumentPositionData) {
                    return mergeFrom((AllDocumentPositionData) other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }


            public Builder mergeFrom(AllDocumentPositionData other) {

              if (other == AllDocumentPositionData.getDefaultInstance()) {
                return this;
              }
                if (documentPositionDataBuilder_ == null) {
                    if (!other.documentPositionData_.isEmpty()) {
                        if (documentPositionData_.isEmpty()) {
                            documentPositionData_ = other.documentPositionData_;
                            bitField0_ = (bitField0_ & ~0x00000001);
                        } else {
                            ensureDocumentPositionDataIsMutable();
                            documentPositionData_.addAll(other.documentPositionData_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.documentPositionData_.isEmpty()) {
                        if (documentPositionDataBuilder_.isEmpty()) {
                            documentPositionDataBuilder_.dispose();
                            documentPositionDataBuilder_ = null;
                            documentPositionData_ = other.documentPositionData_;
                            bitField0_ = (bitField0_ & ~0x00000001);
                            documentPositionDataBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? getDocumentPositionDataFieldBuilder() : null;
                        } else {
                            documentPositionDataBuilder_.addAllMessages(other.documentPositionData_);
                        }
                    }
                }
                this.mergeUnknownFields(other.getUnknownFields());
                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 {

                if (extensionRegistry == null) {
                    throw new java.lang.NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        int tag = input.readTag();
                        switch (tag) {
                            case 0:
                                done = true;
                                break;
                            case 10: {
                                DocumentPositionData m = input.readMessage(DocumentPositionData.parser(), extensionRegistry);
                                if (documentPositionDataBuilder_ == null) {
                                    ensureDocumentPositionDataIsMutable();
                                    documentPositionData_.add(m);
                                } else {
                                    documentPositionDataBuilder_.addMessage(m);
                                }
                                break;
                            } // case 10
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                } finally {
                    onChanged();
                } // finally
                return this;
            }


            private int bitField0_;

            private java.util.List<DocumentPositionData> documentPositionData_ = java.util.Collections.emptyList();


            private void ensureDocumentPositionDataIsMutable() {

                if (!((bitField0_ & 0x00000001) != 0)) {
                    documentPositionData_ = new java.util.ArrayList<DocumentPositionData>(documentPositionData_);
                    bitField0_ |= 0x00000001;
                }
            }


            private com.google.protobuf.RepeatedFieldBuilder<DocumentPositionData, DocumentPositionData.Builder, DocumentPositionDataOrBuilder> documentPositionDataBuilder_;


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public java.util.List<DocumentPositionData> getDocumentPositionDataList() {

                if (documentPositionDataBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(documentPositionData_);
                } else {
                    return documentPositionDataBuilder_.getMessageList();
                }
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public int getDocumentPositionDataCount() {

                if (documentPositionDataBuilder_ == null) {
                    return documentPositionData_.size();
                } else {
                    return documentPositionDataBuilder_.getCount();
                }
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public DocumentPositionData getDocumentPositionData(int index) {

                if (documentPositionDataBuilder_ == null) {
                    return documentPositionData_.get(index);
                } else {
                    return documentPositionDataBuilder_.getMessage(index);
                }
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder setDocumentPositionData(int index, DocumentPositionData value) {

                if (documentPositionDataBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureDocumentPositionDataIsMutable();
                    documentPositionData_.set(index, value);
                    onChanged();
                } else {
                    documentPositionDataBuilder_.setMessage(index, value);
                }
                return this;
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder setDocumentPositionData(int index, DocumentPositionData.Builder builderForValue) {

                if (documentPositionDataBuilder_ == null) {
                    ensureDocumentPositionDataIsMutable();
                    documentPositionData_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    documentPositionDataBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder addDocumentPositionData(DocumentPositionData value) {

                if (documentPositionDataBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureDocumentPositionDataIsMutable();
                    documentPositionData_.add(value);
                    onChanged();
                } else {
                    documentPositionDataBuilder_.addMessage(value);
                }
                return this;
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder addDocumentPositionData(int index, DocumentPositionData value) {

                if (documentPositionDataBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensureDocumentPositionDataIsMutable();
                    documentPositionData_.add(index, value);
                    onChanged();
                } else {
                    documentPositionDataBuilder_.addMessage(index, value);
                }
                return this;
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder addDocumentPositionData(DocumentPositionData.Builder builderForValue) {

                if (documentPositionDataBuilder_ == null) {
                    ensureDocumentPositionDataIsMutable();
                    documentPositionData_.add(builderForValue.build());
                    onChanged();
                } else {
                    documentPositionDataBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder addDocumentPositionData(int index, DocumentPositionData.Builder builderForValue) {

                if (documentPositionDataBuilder_ == null) {
                    ensureDocumentPositionDataIsMutable();
                    documentPositionData_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    documentPositionDataBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder addAllDocumentPositionData(java.lang.Iterable<? extends DocumentPositionData> values) {

                if (documentPositionDataBuilder_ == null) {
                    ensureDocumentPositionDataIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, documentPositionData_);
                    onChanged();
                } else {
                    documentPositionDataBuilder_.addAllMessages(values);
                }
                return this;
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder clearDocumentPositionData() {

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


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public Builder removeDocumentPositionData(int index) {

                if (documentPositionDataBuilder_ == null) {
                    ensureDocumentPositionDataIsMutable();
                    documentPositionData_.remove(index);
                    onChanged();
                } else {
                    documentPositionDataBuilder_.remove(index);
                }
                return this;
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public DocumentPositionData.Builder getDocumentPositionDataBuilder(int index) {

                return getDocumentPositionDataFieldBuilder().getBuilder(index);
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public DocumentPositionDataOrBuilder getDocumentPositionDataOrBuilder(int index) {

                if (documentPositionDataBuilder_ == null) {
                    return documentPositionData_.get(index);
                } else {
                    return documentPositionDataBuilder_.getMessageOrBuilder(index);
                }
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public java.util.List<? extends DocumentPositionDataOrBuilder> getDocumentPositionDataOrBuilderList() {

                if (documentPositionDataBuilder_ != null) {
                    return documentPositionDataBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(documentPositionData_);
                }
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public DocumentPositionData.Builder addDocumentPositionDataBuilder() {

                return getDocumentPositionDataFieldBuilder().addBuilder(DocumentPositionData.getDefaultInstance());
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public DocumentPositionData.Builder addDocumentPositionDataBuilder(int index) {

                return getDocumentPositionDataFieldBuilder().addBuilder(index, DocumentPositionData.getDefaultInstance());
            }


            /**
             * <code>repeated .DocumentPositionData documentPositionData = 1;</code>
             */
            public java.util.List<DocumentPositionData.Builder> getDocumentPositionDataBuilderList() {

                return getDocumentPositionDataFieldBuilder().getBuilderList();
            }


            private com.google.protobuf.RepeatedFieldBuilder<DocumentPositionData, DocumentPositionData.Builder, DocumentPositionDataOrBuilder> getDocumentPositionDataFieldBuilder() {

                if (documentPositionDataBuilder_ == null) {
                    documentPositionDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<DocumentPositionData, DocumentPositionData.Builder, DocumentPositionDataOrBuilder>(
                            documentPositionData_,
                            ((bitField0_ & 0x00000001) != 0),
                            getParentForChildren(),
                            isClean());
                    documentPositionData_ = null;
                }
                return documentPositionDataBuilder_;
            }

            // @@protoc_insertion_point(builder_scope:AllDocumentPositionData)
        }

        // @@protoc_insertion_point(class_scope:AllDocumentPositionData)
        private static final AllDocumentPositionData DEFAULT_INSTANCE;

        static {
            DEFAULT_INSTANCE = new AllDocumentPositionData();
        }

        public static AllDocumentPositionData getDefaultInstance() {

            return DEFAULT_INSTANCE;
        }


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

                Builder builder = newBuilder();
                try {
                    builder.mergeFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    throw e.setUnfinishedMessage(builder.buildPartial());
                } catch (com.google.protobuf.UninitializedMessageException e) {
                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                } catch (java.io.IOException e) {
                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
                }
                return builder.buildPartial();
            }
        };


        public static com.google.protobuf.Parser<AllDocumentPositionData> parser() {

            return PARSER;
        }


        @java.lang.Override
        public com.google.protobuf.Parser<AllDocumentPositionData> getParserForType() {

            return PARSER;
        }


        @java.lang.Override
        public AllDocumentPositionData getDefaultInstanceForType() {

            return DEFAULT_INSTANCE;
        }

    }

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

        /**
         * <pre>
         * Identifier of the text block.
         * </pre>
         *
         * <code>int64 id = 1;</code>
         *
         * @return The id.
         */
        long getId();


        /**
         * <pre>
         * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
         * This is required due to the text and position coordinates not being equal.
         * </pre>
         *
         * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
         *
         * @return A list containing the stringIdxToPositionIdx.
         */
        java.util.List<java.lang.Integer> getStringIdxToPositionIdxList();


        /**
         * <pre>
         * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
         * This is required due to the text and position coordinates not being equal.
         * </pre>
         *
         * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
         *
         * @return The count of stringIdxToPositionIdx.
         */
        int getStringIdxToPositionIdxCount();


        /**
         * <pre>
         * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
         * This is required due to the text and position coordinates not being equal.
         * </pre>
         *
         * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
         *
         * @param index The index of the element to return.
         * @return The stringIdxToPositionIdx at the given index.
         */
        int getStringIdxToPositionIdx(int index);


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        java.util.List<DocumentPositionData.Position> getPositionsList();


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        DocumentPositionData.Position getPositions(int index);


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        int getPositionsCount();


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        java.util.List<? extends DocumentPositionData.PositionOrBuilder> getPositionsOrBuilderList();


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        DocumentPositionData.PositionOrBuilder getPositionsOrBuilder(int index);

    }

    /**
     * Protobuf type {@code DocumentPositionData}
     */
    public static final class DocumentPositionData extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:DocumentPositionData)
            DocumentPositionDataOrBuilder {

        private static final long serialVersionUID = 0L;

        static {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
                    /* major= */ 4,
                    /* minor= */ 27,
                    /* patch= */ 1,
                    /* suffix= */ "", DocumentPositionData.class.getName());
        }

        // Use DocumentPositionData.newBuilder() to construct.
        private DocumentPositionData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {

            super(builder);
        }


        private DocumentPositionData() {

            stringIdxToPositionIdx_ = emptyIntList();
            positions_ = java.util.Collections.emptyList();
        }


        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {

            return DocumentPositionDataProto.internal_static_DocumentPositionData_descriptor;
        }


        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {

            return DocumentPositionDataProto.internal_static_DocumentPositionData_fieldAccessorTable.ensureFieldAccessorsInitialized(DocumentPositionData.class,
                                                                                                                                     DocumentPositionData.Builder.class);
        }


        public interface PositionOrBuilder extends
                // @@protoc_insertion_point(interface_extends:DocumentPositionData.Position)
                com.google.protobuf.MessageOrBuilder {

            /**
             * <code>repeated float value = 1;</code>
             *
             * @return A list containing the value.
             */
            java.util.List<java.lang.Float> getValueList();


            /**
             * <code>repeated float value = 1;</code>
             *
             * @return The count of value.
             */
            int getValueCount();


            /**
             * <code>repeated float value = 1;</code>
             *
             * @param index The index of the element to return.
             * @return The value at the given index.
             */
            float getValue(int index);

        }

        /**
         * <pre>
         * Definition of a BoundingBox that contains x, y, width, and height.
         * </pre>
         * <p>
         * Protobuf type {@code DocumentPositionData.Position}
         */
        public static final class Position extends com.google.protobuf.GeneratedMessage implements
                // @@protoc_insertion_point(message_implements:DocumentPositionData.Position)
                PositionOrBuilder {

            private static final long serialVersionUID = 0L;

            static {
                com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
                        /* major= */ 4,
                        /* minor= */ 27,
                        /* patch= */ 1,
                        /* suffix= */ "", Position.class.getName());
            }

            // Use Position.newBuilder() to construct.
            private Position(com.google.protobuf.GeneratedMessage.Builder<?> builder) {

                super(builder);
            }


            private Position() {

                value_ = emptyFloatList();
            }


            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {

                return DocumentPositionDataProto.internal_static_DocumentPositionData_Position_descriptor;
            }


            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {

                return DocumentPositionDataProto.internal_static_DocumentPositionData_Position_fieldAccessorTable.ensureFieldAccessorsInitialized(DocumentPositionData.Position.class,
                                                                                                                                                  DocumentPositionData.Position.Builder.class);
            }


            public static final int VALUE_FIELD_NUMBER = 1;
            @SuppressWarnings("serial")
            private com.google.protobuf.Internal.FloatList value_ = emptyFloatList();


            /**
             * <code>repeated float value = 1;</code>
             *
             * @return A list containing the value.
             */
            @java.lang.Override
            public java.util.List<java.lang.Float> getValueList() {

                return value_;
            }


            /**
             * <code>repeated float value = 1;</code>
             *
             * @return The count of value.
             */
            public int getValueCount() {

                return value_.size();
            }


            /**
             * <code>repeated float value = 1;</code>
             *
             * @param index The index of the element to return.
             * @return The value at the given index.
             */
            public float getValue(int index) {

                return value_.getFloat(index);
            }


            private int valueMemoizedSerializedSize = -1;

            private byte memoizedIsInitialized = -1;


            @java.lang.Override
            public final boolean isInitialized() {

                byte isInitialized = memoizedIsInitialized;
              if (isInitialized == 1) {
                return true;
              }
              if (isInitialized == 0) {
                return false;
              }

                memoizedIsInitialized = 1;
                return true;
            }


            @java.lang.Override
            public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException {

                getSerializedSize();
                if (getValueList().size() > 0) {
                    output.writeUInt32NoTag(10);
                    output.writeUInt32NoTag(valueMemoizedSerializedSize);
                }
                for (int i = 0; i < value_.size(); i++) {
                    output.writeFloatNoTag(value_.getFloat(i));
                }
                getUnknownFields().writeTo(output);
            }


            @java.lang.Override
            public int getSerializedSize() {

                int size = memoizedSize;
              if (size != -1) {
                return size;
              }

                size = 0;
                {
                    int dataSize = 0;
                    dataSize = 4 * getValueList().size();
                    size += dataSize;
                    if (!getValueList().isEmpty()) {
                        size += 1;
                        size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                    }
                    valueMemoizedSerializedSize = dataSize;
                }
                size += getUnknownFields().getSerializedSize();
                memoizedSize = size;
                return size;
            }


            @java.lang.Override
            public boolean equals(final java.lang.Object obj) {

                if (obj == this) {
                    return true;
                }
                if (!(obj instanceof DocumentPositionData.Position)) {
                    return super.equals(obj);
                }
                DocumentPositionData.Position other = (DocumentPositionData.Position) obj;

              if (!getValueList().equals(other.getValueList())) {
                return false;
              }
              if (!getUnknownFields().equals(other.getUnknownFields())) {
                return false;
              }
                return true;
            }


            @java.lang.Override
            public int hashCode() {

                if (memoizedHashCode != 0) {
                    return memoizedHashCode;
                }
                int hash = 41;
                hash = (19 * hash) + getDescriptor().hashCode();
                if (getValueCount() > 0) {
                    hash = (37 * hash) + VALUE_FIELD_NUMBER;
                    hash = (53 * hash) + getValueList().hashCode();
                }
                hash = (29 * hash) + getUnknownFields().hashCode();
                memoizedHashCode = hash;
                return hash;
            }


            public static DocumentPositionData.Position parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {

                return PARSER.parseFrom(data);
            }


            public static DocumentPositionData.Position parseFrom(java.nio.ByteBuffer data,
                                                                  com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

                return PARSER.parseFrom(data, extensionRegistry);
            }


            public static DocumentPositionData.Position parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {

                return PARSER.parseFrom(data);
            }


            public static DocumentPositionData.Position parseFrom(com.google.protobuf.ByteString data,
                                                                  com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

                return PARSER.parseFrom(data, extensionRegistry);
            }


            public static DocumentPositionData.Position parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {

                return PARSER.parseFrom(data);
            }


            public static DocumentPositionData.Position parseFrom(byte[] data,
                                                                  com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

                return PARSER.parseFrom(data, extensionRegistry);
            }


            public static DocumentPositionData.Position parseFrom(java.io.InputStream input) throws java.io.IOException {

                return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
            }


            public static DocumentPositionData.Position parseFrom(java.io.InputStream input,
                                                                  com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

                return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
            }


            public static DocumentPositionData.Position parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {

                return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
            }


            public static DocumentPositionData.Position parseDelimitedFrom(java.io.InputStream input,
                                                                           com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

                return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
            }


            public static DocumentPositionData.Position parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {

                return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
            }


            public static DocumentPositionData.Position parseFrom(com.google.protobuf.CodedInputStream input,
                                                                  com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

                return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
            }


            @java.lang.Override
            public Builder newBuilderForType() {return newBuilder();}


            public static Builder newBuilder() {

                return DEFAULT_INSTANCE.toBuilder();
            }


            public static Builder newBuilder(DocumentPositionData.Position 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.GeneratedMessage.BuilderParent parent) {

                Builder builder = new Builder(parent);
                return builder;
            }


            /**
             * <pre>
             * Definition of a BoundingBox that contains x, y, width, and height.
             * </pre>
             * <p>
             * Protobuf type {@code DocumentPositionData.Position}
             */
            public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                    // @@protoc_insertion_point(builder_implements:DocumentPositionData.Position)
                    DocumentPositionData.PositionOrBuilder {

                public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {

                    return DocumentPositionDataProto.internal_static_DocumentPositionData_Position_descriptor;
                }


                @java.lang.Override
                protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {

                    return DocumentPositionDataProto.internal_static_DocumentPositionData_Position_fieldAccessorTable.ensureFieldAccessorsInitialized(DocumentPositionData.Position.class,
                                                                                                                                                      DocumentPositionData.Position.Builder.class);
                }


                // Construct using DocumentPositionData.Position.newBuilder()
                private Builder() {

                }


                private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {

                    super(parent);

                }


                @java.lang.Override
                public Builder clear() {

                    super.clear();
                    bitField0_ = 0;
                    value_ = emptyFloatList();
                    return this;
                }


                @java.lang.Override
                public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {

                    return DocumentPositionDataProto.internal_static_DocumentPositionData_Position_descriptor;
                }


                @java.lang.Override
                public DocumentPositionData.Position getDefaultInstanceForType() {

                    return DocumentPositionData.Position.getDefaultInstance();
                }


                @java.lang.Override
                public DocumentPositionData.Position build() {

                    DocumentPositionData.Position result = buildPartial();
                    if (!result.isInitialized()) {
                        throw newUninitializedMessageException(result);
                    }
                    return result;
                }


                @java.lang.Override
                public DocumentPositionData.Position buildPartial() {

                    DocumentPositionData.Position result = new DocumentPositionData.Position(this);
                    if (bitField0_ != 0) {
                        buildPartial0(result);
                    }
                    onBuilt();
                    return result;
                }


                private void buildPartial0(DocumentPositionData.Position result) {

                    int from_bitField0_ = bitField0_;
                    if (((from_bitField0_ & 0x00000001) != 0)) {
                        value_.makeImmutable();
                        result.value_ = value_;
                    }
                }


                @java.lang.Override
                public Builder mergeFrom(com.google.protobuf.Message other) {

                    if (other instanceof DocumentPositionData.Position) {
                        return mergeFrom((DocumentPositionData.Position) other);
                    } else {
                        super.mergeFrom(other);
                        return this;
                    }
                }


                public Builder mergeFrom(DocumentPositionData.Position other) {

                  if (other == DocumentPositionData.Position.getDefaultInstance()) {
                    return this;
                  }
                    if (!other.value_.isEmpty()) {
                        if (value_.isEmpty()) {
                            value_ = other.value_;
                            value_.makeImmutable();
                            bitField0_ |= 0x00000001;
                        } else {
                            ensureValueIsMutable();
                            value_.addAll(other.value_);
                        }
                        onChanged();
                    }
                    this.mergeUnknownFields(other.getUnknownFields());
                    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 {

                    if (extensionRegistry == null) {
                        throw new java.lang.NullPointerException();
                    }
                    try {
                        boolean done = false;
                        while (!done) {
                            int tag = input.readTag();
                            switch (tag) {
                                case 0:
                                    done = true;
                                    break;
                                case 13: {
                                    float v = input.readFloat();
                                    ensureValueIsMutable();
                                    value_.addFloat(v);
                                    break;
                                } // case 13
                                case 10: {
                                    int length = input.readRawVarint32();
                                    int limit = input.pushLimit(length);
                                    int alloc = length > 4096 ? 4096 : length;
                                    ensureValueIsMutable(alloc / 4);
                                    while (input.getBytesUntilLimit() > 0) {
                                        value_.addFloat(input.readFloat());
                                    }
                                    input.popLimit(limit);
                                    break;
                                } // case 10
                                default: {
                                    if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                        done = true; // was an endgroup tag
                                    }
                                    break;
                                } // default:
                            } // switch (tag)
                        } // while (!done)
                    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                        throw e.unwrapIOException();
                    } finally {
                        onChanged();
                    } // finally
                    return this;
                }


                private int bitField0_;

                private com.google.protobuf.Internal.FloatList value_ = emptyFloatList();


                private void ensureValueIsMutable() {

                    if (!value_.isModifiable()) {
                        value_ = makeMutableCopy(value_);
                    }
                    bitField0_ |= 0x00000001;
                }


                private void ensureValueIsMutable(int capacity) {

                    if (!value_.isModifiable()) {
                        value_ = makeMutableCopy(value_, capacity);
                    }
                    bitField0_ |= 0x00000001;
                }


                /**
                 * <code>repeated float value = 1;</code>
                 *
                 * @return A list containing the value.
                 */
                public java.util.List<java.lang.Float> getValueList() {

                    value_.makeImmutable();
                    return value_;
                }


                /**
                 * <code>repeated float value = 1;</code>
                 *
                 * @return The count of value.
                 */
                public int getValueCount() {

                    return value_.size();
                }


                /**
                 * <code>repeated float value = 1;</code>
                 *
                 * @param index The index of the element to return.
                 * @return The value at the given index.
                 */
                public float getValue(int index) {

                    return value_.getFloat(index);
                }


                /**
                 * <code>repeated float value = 1;</code>
                 *
                 * @param index The index to set the value at.
                 * @param value The value to set.
                 * @return This builder for chaining.
                 */
                public Builder setValue(int index, float value) {

                    ensureValueIsMutable();
                    value_.setFloat(index, value);
                    bitField0_ |= 0x00000001;
                    onChanged();
                    return this;
                }


                /**
                 * <code>repeated float value = 1;</code>
                 *
                 * @param value The value to add.
                 * @return This builder for chaining.
                 */
                public Builder addValue(float value) {

                    ensureValueIsMutable();
                    value_.addFloat(value);
                    bitField0_ |= 0x00000001;
                    onChanged();
                    return this;
                }


                /**
                 * <code>repeated float value = 1;</code>
                 *
                 * @param values The value to add.
                 * @return This builder for chaining.
                 */
                public Builder addAllValue(java.lang.Iterable<? extends java.lang.Float> values) {

                    ensureValueIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, value_);
                    bitField0_ |= 0x00000001;
                    onChanged();
                    return this;
                }


                /**
                 * <code>repeated float value = 1;</code>
                 *
                 * @return This builder for chaining.
                 */
                public Builder clearValue() {

                    value_ = emptyFloatList();
                    bitField0_ = (bitField0_ & ~0x00000001);
                    onChanged();
                    return this;
                }

                // @@protoc_insertion_point(builder_scope:DocumentPositionData.Position)
            }

            // @@protoc_insertion_point(class_scope:DocumentPositionData.Position)
            private static final DocumentPositionData.Position DEFAULT_INSTANCE;

            static {
                DEFAULT_INSTANCE = new DocumentPositionData.Position();
            }

            public static DocumentPositionData.Position getDefaultInstance() {

                return DEFAULT_INSTANCE;
            }


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

                    Builder builder = newBuilder();
                    try {
                        builder.mergeFrom(input, extensionRegistry);
                    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                        throw e.setUnfinishedMessage(builder.buildPartial());
                    } catch (com.google.protobuf.UninitializedMessageException e) {
                        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                    } catch (java.io.IOException e) {
                        throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
                    }
                    return builder.buildPartial();
                }
            };


            public static com.google.protobuf.Parser<Position> parser() {

                return PARSER;
            }


            @java.lang.Override
            public com.google.protobuf.Parser<Position> getParserForType() {

                return PARSER;
            }


            @java.lang.Override
            public DocumentPositionData.Position getDefaultInstanceForType() {

                return DEFAULT_INSTANCE;
            }

        }

        public static final int ID_FIELD_NUMBER = 1;
        private long id_ = 0L;


        /**
         * <pre>
         * Identifier of the text block.
         * </pre>
         *
         * <code>int64 id = 1;</code>
         *
         * @return The id.
         */
        @java.lang.Override
        public long getId() {

            return id_;
        }


        public static final int STRINGIDXTOPOSITIONIDX_FIELD_NUMBER = 2;
        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList stringIdxToPositionIdx_ = emptyIntList();


        /**
         * <pre>
         * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
         * This is required due to the text and position coordinates not being equal.
         * </pre>
         *
         * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
         *
         * @return A list containing the stringIdxToPositionIdx.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getStringIdxToPositionIdxList() {

            return stringIdxToPositionIdx_;
        }


        /**
         * <pre>
         * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
         * This is required due to the text and position coordinates not being equal.
         * </pre>
         *
         * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
         *
         * @return The count of stringIdxToPositionIdx.
         */
        public int getStringIdxToPositionIdxCount() {

            return stringIdxToPositionIdx_.size();
        }


        /**
         * <pre>
         * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
         * This is required due to the text and position coordinates not being equal.
         * </pre>
         *
         * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
         *
         * @param index The index of the element to return.
         * @return The stringIdxToPositionIdx at the given index.
         */
        public int getStringIdxToPositionIdx(int index) {

            return stringIdxToPositionIdx_.getInt(index);
        }


        private int stringIdxToPositionIdxMemoizedSerializedSize = -1;

        public static final int POSITIONS_FIELD_NUMBER = 3;
        @SuppressWarnings("serial")
        private java.util.List<DocumentPositionData.Position> positions_;


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        @java.lang.Override
        public java.util.List<DocumentPositionData.Position> getPositionsList() {

            return positions_;
        }


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        @java.lang.Override
        public java.util.List<? extends DocumentPositionData.PositionOrBuilder> getPositionsOrBuilderList() {

            return positions_;
        }


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        @java.lang.Override
        public int getPositionsCount() {

            return positions_.size();
        }


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        @java.lang.Override
        public DocumentPositionData.Position getPositions(int index) {

            return positions_.get(index);
        }


        /**
         * <pre>
         * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
         * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
         * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
         * </pre>
         *
         * <code>repeated .DocumentPositionData.Position positions = 3;</code>
         */
        @java.lang.Override
        public DocumentPositionData.PositionOrBuilder getPositionsOrBuilder(int index) {

            return positions_.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 {

            getSerializedSize();
            if (id_ != 0L) {
                output.writeInt64(1, id_);
            }
            if (getStringIdxToPositionIdxList().size() > 0) {
                output.writeUInt32NoTag(18);
                output.writeUInt32NoTag(stringIdxToPositionIdxMemoizedSerializedSize);
            }
            for (int i = 0; i < stringIdxToPositionIdx_.size(); i++) {
                output.writeInt32NoTag(stringIdxToPositionIdx_.getInt(i));
            }
            for (int i = 0; i < positions_.size(); i++) {
                output.writeMessage(3, positions_.get(i));
            }
            getUnknownFields().writeTo(output);
        }


        @java.lang.Override
        public int getSerializedSize() {

            int size = memoizedSize;
          if (size != -1) {
            return size;
          }

            size = 0;
            if (id_ != 0L) {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, id_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < stringIdxToPositionIdx_.size(); i++) {
                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(stringIdxToPositionIdx_.getInt(i));
                }
                size += dataSize;
                if (!getStringIdxToPositionIdxList().isEmpty()) {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                stringIdxToPositionIdxMemoizedSerializedSize = dataSize;
            }
            for (int i = 0; i < positions_.size(); i++) {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, positions_.get(i));
            }
            size += getUnknownFields().getSerializedSize();
            memoizedSize = size;
            return size;
        }


        @java.lang.Override
        public boolean equals(final java.lang.Object obj) {

            if (obj == this) {
                return true;
            }
            if (!(obj instanceof DocumentPositionData)) {
                return super.equals(obj);
            }
            DocumentPositionData other = (DocumentPositionData) obj;

          if (getId() != other.getId()) {
            return false;
          }
          if (!getStringIdxToPositionIdxList().equals(other.getStringIdxToPositionIdxList())) {
            return false;
          }
          if (!getPositionsList().equals(other.getPositionsList())) {
            return false;
          }
          if (!getUnknownFields().equals(other.getUnknownFields())) {
            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) + com.google.protobuf.Internal.hashLong(getId());
            if (getStringIdxToPositionIdxCount() > 0) {
                hash = (37 * hash) + STRINGIDXTOPOSITIONIDX_FIELD_NUMBER;
                hash = (53 * hash) + getStringIdxToPositionIdxList().hashCode();
            }
            if (getPositionsCount() > 0) {
                hash = (37 * hash) + POSITIONS_FIELD_NUMBER;
                hash = (53 * hash) + getPositionsList().hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            memoizedHashCode = hash;
            return hash;
        }


        public static DocumentPositionData parseFrom(java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data);
        }


        public static DocumentPositionData parseFrom(java.nio.ByteBuffer data,
                                                     com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data, extensionRegistry);
        }


        public static DocumentPositionData parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data);
        }


        public static DocumentPositionData parseFrom(com.google.protobuf.ByteString data,
                                                     com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data, extensionRegistry);
        }


        public static DocumentPositionData parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data);
        }


        public static DocumentPositionData parseFrom(byte[] data,
                                                     com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException {

            return PARSER.parseFrom(data, extensionRegistry);
        }


        public static DocumentPositionData parseFrom(java.io.InputStream input) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }


        public static DocumentPositionData parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }


        public static DocumentPositionData parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }


        public static DocumentPositionData parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }


        public static DocumentPositionData parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }


        public static DocumentPositionData parseFrom(com.google.protobuf.CodedInputStream input,
                                                     com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException {

            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }


        @java.lang.Override
        public Builder newBuilderForType() {return newBuilder();}


        public static Builder newBuilder() {

            return DEFAULT_INSTANCE.toBuilder();
        }


        public static Builder newBuilder(DocumentPositionData 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.GeneratedMessage.BuilderParent parent) {

            Builder builder = new Builder(parent);
            return builder;
        }


        /**
         * Protobuf type {@code DocumentPositionData}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:DocumentPositionData)
                DocumentPositionDataOrBuilder {

            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {

                return DocumentPositionDataProto.internal_static_DocumentPositionData_descriptor;
            }


            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() {

                return DocumentPositionDataProto.internal_static_DocumentPositionData_fieldAccessorTable.ensureFieldAccessorsInitialized(DocumentPositionData.class,
                                                                                                                                         DocumentPositionData.Builder.class);
            }


            // Construct using DocumentPositionData.newBuilder()
            private Builder() {

            }


            private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) {

                super(parent);

            }


            @java.lang.Override
            public Builder clear() {

                super.clear();
                bitField0_ = 0;
                id_ = 0L;
                stringIdxToPositionIdx_ = emptyIntList();
                if (positionsBuilder_ == null) {
                    positions_ = java.util.Collections.emptyList();
                } else {
                    positions_ = null;
                    positionsBuilder_.clear();
                }
                bitField0_ = (bitField0_ & ~0x00000004);
                return this;
            }


            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() {

                return DocumentPositionDataProto.internal_static_DocumentPositionData_descriptor;
            }


            @java.lang.Override
            public DocumentPositionData getDefaultInstanceForType() {

                return DocumentPositionData.getDefaultInstance();
            }


            @java.lang.Override
            public DocumentPositionData build() {

                DocumentPositionData result = buildPartial();
                if (!result.isInitialized()) {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }


            @java.lang.Override
            public DocumentPositionData buildPartial() {

                DocumentPositionData result = new DocumentPositionData(this);
                buildPartialRepeatedFields(result);
                if (bitField0_ != 0) {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }


            private void buildPartialRepeatedFields(DocumentPositionData result) {

                if (positionsBuilder_ == null) {
                    if (((bitField0_ & 0x00000004) != 0)) {
                        positions_ = java.util.Collections.unmodifiableList(positions_);
                        bitField0_ = (bitField0_ & ~0x00000004);
                    }
                    result.positions_ = positions_;
                } else {
                    result.positions_ = positionsBuilder_.build();
                }
            }


            private void buildPartial0(DocumentPositionData result) {

                int from_bitField0_ = bitField0_;
                if (((from_bitField0_ & 0x00000001) != 0)) {
                    result.id_ = id_;
                }
                if (((from_bitField0_ & 0x00000002) != 0)) {
                    stringIdxToPositionIdx_.makeImmutable();
                    result.stringIdxToPositionIdx_ = stringIdxToPositionIdx_;
                }
            }


            @java.lang.Override
            public Builder mergeFrom(com.google.protobuf.Message other) {

                if (other instanceof DocumentPositionData) {
                    return mergeFrom((DocumentPositionData) other);
                } else {
                    super.mergeFrom(other);
                    return this;
                }
            }


            public Builder mergeFrom(DocumentPositionData other) {

              if (other == DocumentPositionData.getDefaultInstance()) {
                return this;
              }
                if (other.getId() != 0L) {
                    setId(other.getId());
                }
                if (!other.stringIdxToPositionIdx_.isEmpty()) {
                    if (stringIdxToPositionIdx_.isEmpty()) {
                        stringIdxToPositionIdx_ = other.stringIdxToPositionIdx_;
                        stringIdxToPositionIdx_.makeImmutable();
                        bitField0_ |= 0x00000002;
                    } else {
                        ensureStringIdxToPositionIdxIsMutable();
                        stringIdxToPositionIdx_.addAll(other.stringIdxToPositionIdx_);
                    }
                    onChanged();
                }
                if (positionsBuilder_ == null) {
                    if (!other.positions_.isEmpty()) {
                        if (positions_.isEmpty()) {
                            positions_ = other.positions_;
                            bitField0_ = (bitField0_ & ~0x00000004);
                        } else {
                            ensurePositionsIsMutable();
                            positions_.addAll(other.positions_);
                        }
                        onChanged();
                    }
                } else {
                    if (!other.positions_.isEmpty()) {
                        if (positionsBuilder_.isEmpty()) {
                            positionsBuilder_.dispose();
                            positionsBuilder_ = null;
                            positions_ = other.positions_;
                            bitField0_ = (bitField0_ & ~0x00000004);
                            positionsBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? getPositionsFieldBuilder() : null;
                        } else {
                            positionsBuilder_.addAllMessages(other.positions_);
                        }
                    }
                }
                this.mergeUnknownFields(other.getUnknownFields());
                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 {

                if (extensionRegistry == null) {
                    throw new java.lang.NullPointerException();
                }
                try {
                    boolean done = false;
                    while (!done) {
                        int tag = input.readTag();
                        switch (tag) {
                            case 0:
                                done = true;
                                break;
                            case 8: {
                                id_ = input.readInt64();
                                bitField0_ |= 0x00000001;
                                break;
                            } // case 8
                            case 16: {
                                int v = input.readInt32();
                                ensureStringIdxToPositionIdxIsMutable();
                                stringIdxToPositionIdx_.addInt(v);
                                break;
                            } // case 16
                            case 18: {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureStringIdxToPositionIdxIsMutable();
                                while (input.getBytesUntilLimit() > 0) {
                                    stringIdxToPositionIdx_.addInt(input.readInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 18
                            case 26: {
                                DocumentPositionData.Position m = input.readMessage(DocumentPositionData.Position.parser(), extensionRegistry);
                                if (positionsBuilder_ == null) {
                                    ensurePositionsIsMutable();
                                    positions_.add(m);
                                } else {
                                    positionsBuilder_.addMessage(m);
                                }
                                break;
                            } // case 26
                            default: {
                                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    throw e.unwrapIOException();
                } finally {
                    onChanged();
                } // finally
                return this;
            }


            private int bitField0_;

            private long id_;


            /**
             * <pre>
             * Identifier of the text block.
             * </pre>
             *
             * <code>int64 id = 1;</code>
             *
             * @return The id.
             */
            @java.lang.Override
            public long getId() {

                return id_;
            }


            /**
             * <pre>
             * Identifier of the text block.
             * </pre>
             *
             * <code>int64 id = 1;</code>
             *
             * @param value The id to set.
             * @return This builder for chaining.
             */
            public Builder setId(long value) {

                id_ = value;
                bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }


            /**
             * <pre>
             * Identifier of the text block.
             * </pre>
             *
             * <code>int64 id = 1;</code>
             *
             * @return This builder for chaining.
             */
            public Builder clearId() {

                bitField0_ = (bitField0_ & ~0x00000001);
                id_ = 0L;
                onChanged();
                return this;
            }


            private com.google.protobuf.Internal.IntList stringIdxToPositionIdx_ = emptyIntList();


            private void ensureStringIdxToPositionIdxIsMutable() {

                if (!stringIdxToPositionIdx_.isModifiable()) {
                    stringIdxToPositionIdx_ = makeMutableCopy(stringIdxToPositionIdx_);
                }
                bitField0_ |= 0x00000002;
            }


            /**
             * <pre>
             * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
             * This is required due to the text and position coordinates not being equal.
             * </pre>
             *
             * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
             *
             * @return A list containing the stringIdxToPositionIdx.
             */
            public java.util.List<java.lang.Integer> getStringIdxToPositionIdxList() {

                stringIdxToPositionIdx_.makeImmutable();
                return stringIdxToPositionIdx_;
            }


            /**
             * <pre>
             * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
             * This is required due to the text and position coordinates not being equal.
             * </pre>
             *
             * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
             *
             * @return The count of stringIdxToPositionIdx.
             */
            public int getStringIdxToPositionIdxCount() {

                return stringIdxToPositionIdx_.size();
            }


            /**
             * <pre>
             * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
             * This is required due to the text and position coordinates not being equal.
             * </pre>
             *
             * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
             *
             * @param index The index of the element to return.
             * @return The stringIdxToPositionIdx at the given index.
             */
            public int getStringIdxToPositionIdx(int index) {

                return stringIdxToPositionIdx_.getInt(index);
            }


            /**
             * <pre>
             * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
             * This is required due to the text and position coordinates not being equal.
             * </pre>
             *
             * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
             *
             * @param index The index to set the value at.
             * @param value The stringIdxToPositionIdx to set.
             * @return This builder for chaining.
             */
            public Builder setStringIdxToPositionIdx(int index, int value) {

                ensureStringIdxToPositionIdxIsMutable();
                stringIdxToPositionIdx_.setInt(index, value);
                bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }


            /**
             * <pre>
             * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
             * This is required due to the text and position coordinates not being equal.
             * </pre>
             *
             * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
             *
             * @param value The stringIdxToPositionIdx to add.
             * @return This builder for chaining.
             */
            public Builder addStringIdxToPositionIdx(int value) {

                ensureStringIdxToPositionIdxIsMutable();
                stringIdxToPositionIdx_.addInt(value);
                bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }


            /**
             * <pre>
             * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
             * This is required due to the text and position coordinates not being equal.
             * </pre>
             *
             * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
             *
             * @param values The stringIdxToPositionIdx to add.
             * @return This builder for chaining.
             */
            public Builder addAllStringIdxToPositionIdx(java.lang.Iterable<? extends java.lang.Integer> values) {

                ensureStringIdxToPositionIdxIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, stringIdxToPositionIdx_);
                bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }


            /**
             * <pre>
             * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
             * This is required due to the text and position coordinates not being equal.
             * </pre>
             *
             * <code>repeated int32 stringIdxToPositionIdx = 2;</code>
             *
             * @return This builder for chaining.
             */
            public Builder clearStringIdxToPositionIdx() {

                stringIdxToPositionIdx_ = emptyIntList();
                bitField0_ = (bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }


            private java.util.List<DocumentPositionData.Position> positions_ = java.util.Collections.emptyList();


            private void ensurePositionsIsMutable() {

                if (!((bitField0_ & 0x00000004) != 0)) {
                    positions_ = new java.util.ArrayList<DocumentPositionData.Position>(positions_);
                    bitField0_ |= 0x00000004;
                }
            }


            private com.google.protobuf.RepeatedFieldBuilder<DocumentPositionData.Position, DocumentPositionData.Position.Builder, DocumentPositionData.PositionOrBuilder> positionsBuilder_;


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public java.util.List<DocumentPositionData.Position> getPositionsList() {

                if (positionsBuilder_ == null) {
                    return java.util.Collections.unmodifiableList(positions_);
                } else {
                    return positionsBuilder_.getMessageList();
                }
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public int getPositionsCount() {

                if (positionsBuilder_ == null) {
                    return positions_.size();
                } else {
                    return positionsBuilder_.getCount();
                }
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public DocumentPositionData.Position getPositions(int index) {

                if (positionsBuilder_ == null) {
                    return positions_.get(index);
                } else {
                    return positionsBuilder_.getMessage(index);
                }
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder setPositions(int index, DocumentPositionData.Position value) {

                if (positionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensurePositionsIsMutable();
                    positions_.set(index, value);
                    onChanged();
                } else {
                    positionsBuilder_.setMessage(index, value);
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder setPositions(int index, DocumentPositionData.Position.Builder builderForValue) {

                if (positionsBuilder_ == null) {
                    ensurePositionsIsMutable();
                    positions_.set(index, builderForValue.build());
                    onChanged();
                } else {
                    positionsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder addPositions(DocumentPositionData.Position value) {

                if (positionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensurePositionsIsMutable();
                    positions_.add(value);
                    onChanged();
                } else {
                    positionsBuilder_.addMessage(value);
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder addPositions(int index, DocumentPositionData.Position value) {

                if (positionsBuilder_ == null) {
                    if (value == null) {
                        throw new NullPointerException();
                    }
                    ensurePositionsIsMutable();
                    positions_.add(index, value);
                    onChanged();
                } else {
                    positionsBuilder_.addMessage(index, value);
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder addPositions(DocumentPositionData.Position.Builder builderForValue) {

                if (positionsBuilder_ == null) {
                    ensurePositionsIsMutable();
                    positions_.add(builderForValue.build());
                    onChanged();
                } else {
                    positionsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder addPositions(int index, DocumentPositionData.Position.Builder builderForValue) {

                if (positionsBuilder_ == null) {
                    ensurePositionsIsMutable();
                    positions_.add(index, builderForValue.build());
                    onChanged();
                } else {
                    positionsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder addAllPositions(java.lang.Iterable<? extends DocumentPositionData.Position> values) {

                if (positionsBuilder_ == null) {
                    ensurePositionsIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, positions_);
                    onChanged();
                } else {
                    positionsBuilder_.addAllMessages(values);
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder clearPositions() {

                if (positionsBuilder_ == null) {
                    positions_ = java.util.Collections.emptyList();
                    bitField0_ = (bitField0_ & ~0x00000004);
                    onChanged();
                } else {
                    positionsBuilder_.clear();
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public Builder removePositions(int index) {

                if (positionsBuilder_ == null) {
                    ensurePositionsIsMutable();
                    positions_.remove(index);
                    onChanged();
                } else {
                    positionsBuilder_.remove(index);
                }
                return this;
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public DocumentPositionData.Position.Builder getPositionsBuilder(int index) {

                return getPositionsFieldBuilder().getBuilder(index);
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public DocumentPositionData.PositionOrBuilder getPositionsOrBuilder(int index) {

                if (positionsBuilder_ == null) {
                    return positions_.get(index);
                } else {
                    return positionsBuilder_.getMessageOrBuilder(index);
                }
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public java.util.List<? extends DocumentPositionData.PositionOrBuilder> getPositionsOrBuilderList() {

                if (positionsBuilder_ != null) {
                    return positionsBuilder_.getMessageOrBuilderList();
                } else {
                    return java.util.Collections.unmodifiableList(positions_);
                }
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public DocumentPositionData.Position.Builder addPositionsBuilder() {

                return getPositionsFieldBuilder().addBuilder(DocumentPositionData.Position.getDefaultInstance());
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public DocumentPositionData.Position.Builder addPositionsBuilder(int index) {

                return getPositionsFieldBuilder().addBuilder(index, DocumentPositionData.Position.getDefaultInstance());
            }


            /**
             * <pre>
             * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
             * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
             * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
             * </pre>
             *
             * <code>repeated .DocumentPositionData.Position positions = 3;</code>
             */
            public java.util.List<DocumentPositionData.Position.Builder> getPositionsBuilderList() {

                return getPositionsFieldBuilder().getBuilderList();
            }


            private com.google.protobuf.RepeatedFieldBuilder<DocumentPositionData.Position, DocumentPositionData.Position.Builder, DocumentPositionData.PositionOrBuilder> getPositionsFieldBuilder() {

                if (positionsBuilder_ == null) {
                    positionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<DocumentPositionData.Position, DocumentPositionData.Position.Builder, DocumentPositionData.PositionOrBuilder>(
                            positions_,
                            ((bitField0_ & 0x00000004) != 0),
                            getParentForChildren(),
                            isClean());
                    positions_ = null;
                }
                return positionsBuilder_;
            }

            // @@protoc_insertion_point(builder_scope:DocumentPositionData)
        }

        // @@protoc_insertion_point(class_scope:DocumentPositionData)
        private static final DocumentPositionData DEFAULT_INSTANCE;

        static {
            DEFAULT_INSTANCE = new DocumentPositionData();
        }

        public static DocumentPositionData getDefaultInstance() {

            return DEFAULT_INSTANCE;
        }


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

                Builder builder = newBuilder();
                try {
                    builder.mergeFrom(input, extensionRegistry);
                } catch (com.google.protobuf.InvalidProtocolBufferException e) {
                    throw e.setUnfinishedMessage(builder.buildPartial());
                } catch (com.google.protobuf.UninitializedMessageException e) {
                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                } catch (java.io.IOException e) {
                    throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(builder.buildPartial());
                }
                return builder.buildPartial();
            }
        };


        public static com.google.protobuf.Parser<DocumentPositionData> parser() {

            return PARSER;
        }


        @java.lang.Override
        public com.google.protobuf.Parser<DocumentPositionData> getParserForType() {

            return PARSER;
        }


        @java.lang.Override
        public DocumentPositionData getDefaultInstanceForType() {

            return DEFAULT_INSTANCE;
        }

    }

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_AllDocumentPositionData_descriptor;
    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_AllDocumentPositionData_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor internal_static_DocumentPositionData_descriptor;
    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_DocumentPositionData_fieldAccessorTable;
    private static final com.google.protobuf.Descriptors.Descriptor internal_static_DocumentPositionData_Position_descriptor;
    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_DocumentPositionData_Position_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\032DocumentPositionData.proto\"N\n\027AllDocum"
                                             + "entPositionData\0223\n\024documentPositionData\030"
                                             + "\001 \003(\0132\025.DocumentPositionData\"\220\001\n\024Documen"
                                             + "tPositionData\022\n\n\002id\030\001 \001(\003\022\036\n\026stringIdxTo"
                                             + "PositionIdx\030\002 \003(\005\0221\n\tpositions\030\003 \003(\0132\036.D"
                                             + "ocumentPositionData.Position\032\031\n\010Position"
                                             + "\022\r\n\005value\030\001 \003(\002b\006proto3"};
        descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[]{});
        internal_static_AllDocumentPositionData_descriptor = getDescriptor().getMessageTypes()
                .get(0);
        internal_static_AllDocumentPositionData_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_AllDocumentPositionData_descriptor,
                                                                                                                                 new java.lang.String[]{"DocumentPositionData",});
        internal_static_DocumentPositionData_descriptor = getDescriptor().getMessageTypes()
                .get(1);
        internal_static_DocumentPositionData_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_DocumentPositionData_descriptor,
                                                                                                                              new java.lang.String[]{"Id", "StringIdxToPositionIdx", "Positions",});
        internal_static_DocumentPositionData_Position_descriptor = internal_static_DocumentPositionData_descriptor.getNestedTypes()
                .get(0);
        internal_static_DocumentPositionData_Position_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_DocumentPositionData_Position_descriptor,
                new java.lang.String[]{"Value",});
        descriptor.resolveAllFeaturesImmutable();
    }

    // @@protoc_insertion_point(outer_class_scope)
}
