// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: DataExtractionOSM/src/osmand_odb.proto

package net.osmand.binary;

public final class OsmandOdb {
  private OsmandOdb() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public static final class OsmAndStructure extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndStructure.newBuilder() to construct.
    private OsmAndStructure() {
      initFields();
    }
    private OsmAndStructure(boolean noInit) {}
    
    private static final OsmAndStructure defaultInstance;
    public static OsmAndStructure getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndStructure getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndStructure_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndStructure_fieldAccessorTable;
    }
    
    // required uint32 version = 1;
    public static final int VERSION_FIELD_NUMBER = 1;
    private boolean hasVersion;
    private int version_ = 0;
    public boolean hasVersion() { return hasVersion; }
    public int getVersion() { return version_; }
    
    // required int64 dateCreated = 18;
    public static final int DATECREATED_FIELD_NUMBER = 18;
    private boolean hasDateCreated;
    private long dateCreated_ = 0L;
    public boolean hasDateCreated() { return hasDateCreated; }
    public long getDateCreated() { return dateCreated_; }
    
    // repeated .OsmAndAddressIndex addressIndex = 7;
    public static final int ADDRESSINDEX_FIELD_NUMBER = 7;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex> addressIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex> getAddressIndexList() {
      return addressIndex_;
    }
    public int getAddressIndexCount() { return addressIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getAddressIndex(int index) {
      return addressIndex_.get(index);
    }
    
    // repeated .OsmAndTransportIndex transportIndex = 4;
    public static final int TRANSPORTINDEX_FIELD_NUMBER = 4;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndTransportIndex> transportIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndTransportIndex> getTransportIndexList() {
      return transportIndex_;
    }
    public int getTransportIndexCount() { return transportIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getTransportIndex(int index) {
      return transportIndex_.get(index);
    }
    
    // repeated .OsmAndPoiIndex poiIndex = 8;
    public static final int POIINDEX_FIELD_NUMBER = 8;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiIndex> poiIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiIndex> getPoiIndexList() {
      return poiIndex_;
    }
    public int getPoiIndexCount() { return poiIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getPoiIndex(int index) {
      return poiIndex_.get(index);
    }
    
    // repeated .OsmAndMapIndex mapIndex = 6;
    public static final int MAPINDEX_FIELD_NUMBER = 6;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex> mapIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex> getMapIndexList() {
      return mapIndex_;
    }
    public int getMapIndexCount() { return mapIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndMapIndex getMapIndex(int index) {
      return mapIndex_.get(index);
    }
    
    // repeated .OsmAndRoutingIndex routingIndex = 9;
    public static final int ROUTINGINDEX_FIELD_NUMBER = 9;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex> routingIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex> getRoutingIndexList() {
      return routingIndex_;
    }
    public int getRoutingIndexCount() { return routingIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex getRoutingIndex(int index) {
      return routingIndex_.get(index);
    }
    
    // required uint32 versionConfirm = 32;
    public static final int VERSIONCONFIRM_FIELD_NUMBER = 32;
    private boolean hasVersionConfirm;
    private int versionConfirm_ = 0;
    public boolean hasVersionConfirm() { return hasVersionConfirm; }
    public int getVersionConfirm() { return versionConfirm_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasVersion) return false;
      if (!hasDateCreated) return false;
      if (!hasVersionConfirm) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex element : getRoutingIndexList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasVersion()) {
        output.writeUInt32(1, getVersion());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) {
        output.writeMessage(4, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) {
        output.writeMessage(6, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) {
        output.writeMessage(7, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) {
        output.writeMessage(8, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex element : getRoutingIndexList()) {
        output.writeMessage(9, element);
      }
      if (hasDateCreated()) {
        output.writeInt64(18, getDateCreated());
      }
      if (hasVersionConfirm()) {
        output.writeUInt32(32, getVersionConfirm());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasVersion()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getVersion());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex element : getRoutingIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, element);
      }
      if (hasDateCreated()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(18, getDateCreated());
      }
      if (hasVersionConfirm()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(32, getVersionConfirm());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndStructure prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndStructure result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndStructure.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndStructure();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndStructure internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndStructure();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndStructure.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndStructure getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndStructure.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndStructure build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndStructure buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndStructure buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.addressIndex_ != java.util.Collections.EMPTY_LIST) {
          result.addressIndex_ =
            java.util.Collections.unmodifiableList(result.addressIndex_);
        }
        if (result.transportIndex_ != java.util.Collections.EMPTY_LIST) {
          result.transportIndex_ =
            java.util.Collections.unmodifiableList(result.transportIndex_);
        }
        if (result.poiIndex_ != java.util.Collections.EMPTY_LIST) {
          result.poiIndex_ =
            java.util.Collections.unmodifiableList(result.poiIndex_);
        }
        if (result.mapIndex_ != java.util.Collections.EMPTY_LIST) {
          result.mapIndex_ =
            java.util.Collections.unmodifiableList(result.mapIndex_);
        }
        if (result.routingIndex_ != java.util.Collections.EMPTY_LIST) {
          result.routingIndex_ =
            java.util.Collections.unmodifiableList(result.routingIndex_);
        }
        net.osmand.binary.OsmandOdb.OsmAndStructure returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndStructure) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndStructure)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndStructure other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndStructure.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasDateCreated()) {
          setDateCreated(other.getDateCreated());
        }
        if (!other.addressIndex_.isEmpty()) {
          if (result.addressIndex_.isEmpty()) {
            result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex>();
          }
          result.addressIndex_.addAll(other.addressIndex_);
        }
        if (!other.transportIndex_.isEmpty()) {
          if (result.transportIndex_.isEmpty()) {
            result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndTransportIndex>();
          }
          result.transportIndex_.addAll(other.transportIndex_);
        }
        if (!other.poiIndex_.isEmpty()) {
          if (result.poiIndex_.isEmpty()) {
            result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiIndex>();
          }
          result.poiIndex_.addAll(other.poiIndex_);
        }
        if (!other.mapIndex_.isEmpty()) {
          if (result.mapIndex_.isEmpty()) {
            result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex>();
          }
          result.mapIndex_.addAll(other.mapIndex_);
        }
        if (!other.routingIndex_.isEmpty()) {
          if (result.routingIndex_.isEmpty()) {
            result.routingIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex>();
          }
          result.routingIndex_.addAll(other.routingIndex_);
        }
        if (other.hasVersionConfirm()) {
          setVersionConfirm(other.getVersionConfirm());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setVersion(input.readUInt32());
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTransportIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addTransportIndex(subBuilder.buildPartial());
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addMapIndex(subBuilder.buildPartial());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addAddressIndex(subBuilder.buildPartial());
              break;
            }
            case 66: {
              net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPoiIndex(subBuilder.buildPartial());
              break;
            }
            case 74: {
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRoutingIndex(subBuilder.buildPartial());
              break;
            }
            case 144: {
              setDateCreated(input.readInt64());
              break;
            }
            case 256: {
              setVersionConfirm(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required uint32 version = 1;
      public boolean hasVersion() {
        return result.hasVersion();
      }
      public int getVersion() {
        return result.getVersion();
      }
      public Builder setVersion(int value) {
        result.hasVersion = true;
        result.version_ = value;
        return this;
      }
      public Builder clearVersion() {
        result.hasVersion = false;
        result.version_ = 0;
        return this;
      }
      
      // required int64 dateCreated = 18;
      public boolean hasDateCreated() {
        return result.hasDateCreated();
      }
      public long getDateCreated() {
        return result.getDateCreated();
      }
      public Builder setDateCreated(long value) {
        result.hasDateCreated = true;
        result.dateCreated_ = value;
        return this;
      }
      public Builder clearDateCreated() {
        result.hasDateCreated = false;
        result.dateCreated_ = 0L;
        return this;
      }
      
      // repeated .OsmAndAddressIndex addressIndex = 7;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex> getAddressIndexList() {
        return java.util.Collections.unmodifiableList(result.addressIndex_);
      }
      public int getAddressIndexCount() {
        return result.getAddressIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getAddressIndex(int index) {
        return result.getAddressIndex(index);
      }
      public Builder setAddressIndex(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.addressIndex_.set(index, value);
        return this;
      }
      public Builder setAddressIndex(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder builderForValue) {
        result.addressIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addAddressIndex(net.osmand.binary.OsmandOdb.OsmAndAddressIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex>();
        }
        result.addressIndex_.add(value);
        return this;
      }
      public Builder addAddressIndex(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder builderForValue) {
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex>();
        }
        result.addressIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllAddressIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndAddressIndex> values) {
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex>();
        }
        super.addAll(values, result.addressIndex_);
        return this;
      }
      public Builder clearAddressIndex() {
        result.addressIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndTransportIndex transportIndex = 4;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndTransportIndex> getTransportIndexList() {
        return java.util.Collections.unmodifiableList(result.transportIndex_);
      }
      public int getTransportIndexCount() {
        return result.getTransportIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getTransportIndex(int index) {
        return result.getTransportIndex(index);
      }
      public Builder setTransportIndex(int index, net.osmand.binary.OsmandOdb.OsmAndTransportIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.transportIndex_.set(index, value);
        return this;
      }
      public Builder setTransportIndex(int index, net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder builderForValue) {
        result.transportIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addTransportIndex(net.osmand.binary.OsmandOdb.OsmAndTransportIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndTransportIndex>();
        }
        result.transportIndex_.add(value);
        return this;
      }
      public Builder addTransportIndex(net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder builderForValue) {
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndTransportIndex>();
        }
        result.transportIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllTransportIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndTransportIndex> values) {
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndTransportIndex>();
        }
        super.addAll(values, result.transportIndex_);
        return this;
      }
      public Builder clearTransportIndex() {
        result.transportIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndPoiIndex poiIndex = 8;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiIndex> getPoiIndexList() {
        return java.util.Collections.unmodifiableList(result.poiIndex_);
      }
      public int getPoiIndexCount() {
        return result.getPoiIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getPoiIndex(int index) {
        return result.getPoiIndex(index);
      }
      public Builder setPoiIndex(int index, net.osmand.binary.OsmandOdb.OsmAndPoiIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.poiIndex_.set(index, value);
        return this;
      }
      public Builder setPoiIndex(int index, net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder builderForValue) {
        result.poiIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPoiIndex(net.osmand.binary.OsmandOdb.OsmAndPoiIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiIndex>();
        }
        result.poiIndex_.add(value);
        return this;
      }
      public Builder addPoiIndex(net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder builderForValue) {
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiIndex>();
        }
        result.poiIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPoiIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiIndex> values) {
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiIndex>();
        }
        super.addAll(values, result.poiIndex_);
        return this;
      }
      public Builder clearPoiIndex() {
        result.poiIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndMapIndex mapIndex = 6;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex> getMapIndexList() {
        return java.util.Collections.unmodifiableList(result.mapIndex_);
      }
      public int getMapIndexCount() {
        return result.getMapIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndMapIndex getMapIndex(int index) {
        return result.getMapIndex(index);
      }
      public Builder setMapIndex(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.mapIndex_.set(index, value);
        return this;
      }
      public Builder setMapIndex(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder builderForValue) {
        result.mapIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addMapIndex(net.osmand.binary.OsmandOdb.OsmAndMapIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex>();
        }
        result.mapIndex_.add(value);
        return this;
      }
      public Builder addMapIndex(net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder builderForValue) {
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex>();
        }
        result.mapIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllMapIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndMapIndex> values) {
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex>();
        }
        super.addAll(values, result.mapIndex_);
        return this;
      }
      public Builder clearMapIndex() {
        result.mapIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndRoutingIndex routingIndex = 9;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex> getRoutingIndexList() {
        return java.util.Collections.unmodifiableList(result.routingIndex_);
      }
      public int getRoutingIndexCount() {
        return result.getRoutingIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex getRoutingIndex(int index) {
        return result.getRoutingIndex(index);
      }
      public Builder setRoutingIndex(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.routingIndex_.set(index, value);
        return this;
      }
      public Builder setRoutingIndex(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.Builder builderForValue) {
        result.routingIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRoutingIndex(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.routingIndex_.isEmpty()) {
          result.routingIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex>();
        }
        result.routingIndex_.add(value);
        return this;
      }
      public Builder addRoutingIndex(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.Builder builderForValue) {
        if (result.routingIndex_.isEmpty()) {
          result.routingIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex>();
        }
        result.routingIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRoutingIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex> values) {
        if (result.routingIndex_.isEmpty()) {
          result.routingIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex>();
        }
        super.addAll(values, result.routingIndex_);
        return this;
      }
      public Builder clearRoutingIndex() {
        result.routingIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // required uint32 versionConfirm = 32;
      public boolean hasVersionConfirm() {
        return result.hasVersionConfirm();
      }
      public int getVersionConfirm() {
        return result.getVersionConfirm();
      }
      public Builder setVersionConfirm(int value) {
        result.hasVersionConfirm = true;
        result.versionConfirm_ = value;
        return this;
      }
      public Builder clearVersionConfirm() {
        result.hasVersionConfirm = false;
        result.versionConfirm_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndStructure)
    }
    
    static {
      defaultInstance = new OsmAndStructure(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndStructure)
  }
  
  public static final class OsmAndTileBox extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndTileBox.newBuilder() to construct.
    private OsmAndTileBox() {
      initFields();
    }
    private OsmAndTileBox(boolean noInit) {}
    
    private static final OsmAndTileBox defaultInstance;
    public static OsmAndTileBox getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndTileBox getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndTileBox_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndTileBox_fieldAccessorTable;
    }
    
    // required uint32 left = 1;
    public static final int LEFT_FIELD_NUMBER = 1;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required uint32 right = 2;
    public static final int RIGHT_FIELD_NUMBER = 2;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required uint32 top = 3;
    public static final int TOP_FIELD_NUMBER = 3;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required uint32 bottom = 4;
    public static final int BOTTOM_FIELD_NUMBER = 4;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasLeft()) {
        output.writeUInt32(1, getLeft());
      }
      if (hasRight()) {
        output.writeUInt32(2, getRight());
      }
      if (hasTop()) {
        output.writeUInt32(3, getTop());
      }
      if (hasBottom()) {
        output.writeUInt32(4, getBottom());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, getBottom());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndTileBox prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndTileBox result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndTileBox();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndTileBox internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndTileBox();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndTileBox.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTileBox getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTileBox build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndTileBox buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTileBox buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.OsmAndTileBox returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndTileBox) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndTileBox)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndTileBox other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) return this;
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setLeft(input.readUInt32());
              break;
            }
            case 16: {
              setRight(input.readUInt32());
              break;
            }
            case 24: {
              setTop(input.readUInt32());
              break;
            }
            case 32: {
              setBottom(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required uint32 left = 1;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required uint32 right = 2;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required uint32 top = 3;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required uint32 bottom = 4;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndTileBox)
    }
    
    static {
      defaultInstance = new OsmAndTileBox(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndTileBox)
  }
  
  public static final class StringTable extends
      com.google.protobuf.GeneratedMessage {
    // Use StringTable.newBuilder() to construct.
    private StringTable() {
      initFields();
    }
    private StringTable(boolean noInit) {}
    
    private static final StringTable defaultInstance;
    public static StringTable getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public StringTable getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_StringTable_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_StringTable_fieldAccessorTable;
    }
    
    // repeated string s = 1;
    public static final int S_FIELD_NUMBER = 1;
    private java.util.List<java.lang.String> s_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getSList() {
      return s_;
    }
    public int getSCount() { return s_.size(); }
    public java.lang.String getS(int index) {
      return s_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (java.lang.String element : getSList()) {
        output.writeString(1, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      {
        int dataSize = 0;
        for (java.lang.String element : getSList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += getSList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.StringTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.StringTable result;
      
      // Construct using net.osmand.binary.OsmandOdb.StringTable.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.StringTable();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.StringTable internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.StringTable();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.StringTable.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StringTable getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.StringTable build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.StringTable buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StringTable buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.s_ != java.util.Collections.EMPTY_LIST) {
          result.s_ =
            java.util.Collections.unmodifiableList(result.s_);
        }
        net.osmand.binary.OsmandOdb.StringTable returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.StringTable) {
          return mergeFrom((net.osmand.binary.OsmandOdb.StringTable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.StringTable other) {
        if (other == net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) return this;
        if (!other.s_.isEmpty()) {
          if (result.s_.isEmpty()) {
            result.s_ = new java.util.ArrayList<java.lang.String>();
          }
          result.s_.addAll(other.s_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              addS(input.readString());
              break;
            }
          }
        }
      }
      
      
      // repeated string s = 1;
      public java.util.List<java.lang.String> getSList() {
        return java.util.Collections.unmodifiableList(result.s_);
      }
      public int getSCount() {
        return result.getSCount();
      }
      public java.lang.String getS(int index) {
        return result.getS(index);
      }
      public Builder setS(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.s_.set(index, value);
        return this;
      }
      public Builder addS(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.s_.isEmpty()) {
          result.s_ = new java.util.ArrayList<java.lang.String>();
        }
        result.s_.add(value);
        return this;
      }
      public Builder addAllS(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.s_.isEmpty()) {
          result.s_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.s_);
        return this;
      }
      public Builder clearS() {
        result.s_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:StringTable)
    }
    
    static {
      defaultInstance = new StringTable(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:StringTable)
  }
  
  public static final class IndexedStringTable extends
      com.google.protobuf.GeneratedMessage {
    // Use IndexedStringTable.newBuilder() to construct.
    private IndexedStringTable() {
      initFields();
    }
    private IndexedStringTable(boolean noInit) {}
    
    private static final IndexedStringTable defaultInstance;
    public static IndexedStringTable getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public IndexedStringTable getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_IndexedStringTable_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_IndexedStringTable_fieldAccessorTable;
    }
    
    // optional string prefix = 1;
    public static final int PREFIX_FIELD_NUMBER = 1;
    private boolean hasPrefix;
    private java.lang.String prefix_ = "";
    public boolean hasPrefix() { return hasPrefix; }
    public java.lang.String getPrefix() { return prefix_; }
    
    // repeated string key = 3;
    public static final int KEY_FIELD_NUMBER = 3;
    private java.util.List<java.lang.String> key_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getKeyList() {
      return key_;
    }
    public int getKeyCount() { return key_.size(); }
    public java.lang.String getKey(int index) {
      return key_.get(index);
    }
    
    // repeated fixed32 val = 4;
    public static final int VAL_FIELD_NUMBER = 4;
    private java.util.List<java.lang.Integer> val_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getValList() {
      return val_;
    }
    public int getValCount() { return val_.size(); }
    public int getVal(int index) {
      return val_.get(index);
    }
    
    // repeated .IndexedStringTable subtables = 5;
    public static final int SUBTABLES_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.IndexedStringTable> subtables_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.IndexedStringTable> getSubtablesList() {
      return subtables_;
    }
    public int getSubtablesCount() { return subtables_.size(); }
    public net.osmand.binary.OsmandOdb.IndexedStringTable getSubtables(int index) {
      return subtables_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasPrefix()) {
        output.writeString(1, getPrefix());
      }
      for (java.lang.String element : getKeyList()) {
        output.writeString(3, element);
      }
      for (int element : getValList()) {
        output.writeFixed32(4, element);
      }
      for (net.osmand.binary.OsmandOdb.IndexedStringTable element : getSubtablesList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasPrefix()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getPrefix());
      }
      {
        int dataSize = 0;
        for (java.lang.String element : getKeyList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += getKeyList().size();
      }
      {
        int dataSize = 0;
        dataSize = 4 * getValList().size();
        size += dataSize;
        size += getValList().size();
      }
      for (net.osmand.binary.OsmandOdb.IndexedStringTable element : getSubtablesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.IndexedStringTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.IndexedStringTable result;
      
      // Construct using net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.IndexedStringTable();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.IndexedStringTable internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.IndexedStringTable();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.IndexedStringTable.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.IndexedStringTable getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.IndexedStringTable build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.IndexedStringTable buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.IndexedStringTable buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.key_ != java.util.Collections.EMPTY_LIST) {
          result.key_ =
            java.util.Collections.unmodifiableList(result.key_);
        }
        if (result.val_ != java.util.Collections.EMPTY_LIST) {
          result.val_ =
            java.util.Collections.unmodifiableList(result.val_);
        }
        if (result.subtables_ != java.util.Collections.EMPTY_LIST) {
          result.subtables_ =
            java.util.Collections.unmodifiableList(result.subtables_);
        }
        net.osmand.binary.OsmandOdb.IndexedStringTable returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.IndexedStringTable) {
          return mergeFrom((net.osmand.binary.OsmandOdb.IndexedStringTable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.IndexedStringTable other) {
        if (other == net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance()) return this;
        if (other.hasPrefix()) {
          setPrefix(other.getPrefix());
        }
        if (!other.key_.isEmpty()) {
          if (result.key_.isEmpty()) {
            result.key_ = new java.util.ArrayList<java.lang.String>();
          }
          result.key_.addAll(other.key_);
        }
        if (!other.val_.isEmpty()) {
          if (result.val_.isEmpty()) {
            result.val_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.val_.addAll(other.val_);
        }
        if (!other.subtables_.isEmpty()) {
          if (result.subtables_.isEmpty()) {
            result.subtables_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.IndexedStringTable>();
          }
          result.subtables_.addAll(other.subtables_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setPrefix(input.readString());
              break;
            }
            case 26: {
              addKey(input.readString());
              break;
            }
            case 37: {
              addVal(input.readFixed32());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addVal(input.readFixed32());
              }
              input.popLimit(limit);
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.IndexedStringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addSubtables(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // optional string prefix = 1;
      public boolean hasPrefix() {
        return result.hasPrefix();
      }
      public java.lang.String getPrefix() {
        return result.getPrefix();
      }
      public Builder setPrefix(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPrefix = true;
        result.prefix_ = value;
        return this;
      }
      public Builder clearPrefix() {
        result.hasPrefix = false;
        result.prefix_ = getDefaultInstance().getPrefix();
        return this;
      }
      
      // repeated string key = 3;
      public java.util.List<java.lang.String> getKeyList() {
        return java.util.Collections.unmodifiableList(result.key_);
      }
      public int getKeyCount() {
        return result.getKeyCount();
      }
      public java.lang.String getKey(int index) {
        return result.getKey(index);
      }
      public Builder setKey(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.key_.set(index, value);
        return this;
      }
      public Builder addKey(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.key_.isEmpty()) {
          result.key_ = new java.util.ArrayList<java.lang.String>();
        }
        result.key_.add(value);
        return this;
      }
      public Builder addAllKey(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.key_.isEmpty()) {
          result.key_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.key_);
        return this;
      }
      public Builder clearKey() {
        result.key_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated fixed32 val = 4;
      public java.util.List<java.lang.Integer> getValList() {
        return java.util.Collections.unmodifiableList(result.val_);
      }
      public int getValCount() {
        return result.getValCount();
      }
      public int getVal(int index) {
        return result.getVal(index);
      }
      public Builder setVal(int index, int value) {
        result.val_.set(index, value);
        return this;
      }
      public Builder addVal(int value) {
        if (result.val_.isEmpty()) {
          result.val_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.val_.add(value);
        return this;
      }
      public Builder addAllVal(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.val_.isEmpty()) {
          result.val_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.val_);
        return this;
      }
      public Builder clearVal() {
        result.val_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .IndexedStringTable subtables = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.IndexedStringTable> getSubtablesList() {
        return java.util.Collections.unmodifiableList(result.subtables_);
      }
      public int getSubtablesCount() {
        return result.getSubtablesCount();
      }
      public net.osmand.binary.OsmandOdb.IndexedStringTable getSubtables(int index) {
        return result.getSubtables(index);
      }
      public Builder setSubtables(int index, net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.subtables_.set(index, value);
        return this;
      }
      public Builder setSubtables(int index, net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) {
        result.subtables_.set(index, builderForValue.build());
        return this;
      }
      public Builder addSubtables(net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.subtables_.isEmpty()) {
          result.subtables_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.IndexedStringTable>();
        }
        result.subtables_.add(value);
        return this;
      }
      public Builder addSubtables(net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) {
        if (result.subtables_.isEmpty()) {
          result.subtables_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.IndexedStringTable>();
        }
        result.subtables_.add(builderForValue.build());
        return this;
      }
      public Builder addAllSubtables(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.IndexedStringTable> values) {
        if (result.subtables_.isEmpty()) {
          result.subtables_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.IndexedStringTable>();
        }
        super.addAll(values, result.subtables_);
        return this;
      }
      public Builder clearSubtables() {
        result.subtables_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:IndexedStringTable)
    }
    
    static {
      defaultInstance = new IndexedStringTable(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:IndexedStringTable)
  }
  
  public static final class OsmAndMapIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndMapIndex.newBuilder() to construct.
    private OsmAndMapIndex() {
      initFields();
    }
    private OsmAndMapIndex(boolean noInit) {}
    
    private static final OsmAndMapIndex defaultInstance;
    public static OsmAndMapIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndMapIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_fieldAccessorTable;
    }
    
    public static final class MapEncodingRule extends
        com.google.protobuf.GeneratedMessage {
      // Use MapEncodingRule.newBuilder() to construct.
      private MapEncodingRule() {
        initFields();
      }
      private MapEncodingRule(boolean noInit) {}
      
      private static final MapEncodingRule defaultInstance;
      public static MapEncodingRule getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public MapEncodingRule getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapEncodingRule_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapEncodingRule_fieldAccessorTable;
      }
      
      // required string tag = 3;
      public static final int TAG_FIELD_NUMBER = 3;
      private boolean hasTag;
      private java.lang.String tag_ = "";
      public boolean hasTag() { return hasTag; }
      public java.lang.String getTag() { return tag_; }
      
      // optional string value = 5;
      public static final int VALUE_FIELD_NUMBER = 5;
      private boolean hasValue;
      private java.lang.String value_ = "";
      public boolean hasValue() { return hasValue; }
      public java.lang.String getValue() { return value_; }
      
      // optional uint32 id = 7;
      public static final int ID_FIELD_NUMBER = 7;
      private boolean hasId;
      private int id_ = 0;
      public boolean hasId() { return hasId; }
      public int getId() { return id_; }
      
      // optional uint32 minZoom = 9;
      public static final int MINZOOM_FIELD_NUMBER = 9;
      private boolean hasMinZoom;
      private int minZoom_ = 0;
      public boolean hasMinZoom() { return hasMinZoom; }
      public int getMinZoom() { return minZoom_; }
      
      // optional uint32 type = 10;
      public static final int TYPE_FIELD_NUMBER = 10;
      private boolean hasType;
      private int type_ = 0;
      public boolean hasType() { return hasType; }
      public int getType() { return type_; }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        if (!hasTag) return false;
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasTag()) {
          output.writeString(3, getTag());
        }
        if (hasValue()) {
          output.writeString(5, getValue());
        }
        if (hasId()) {
          output.writeUInt32(7, getId());
        }
        if (hasMinZoom()) {
          output.writeUInt32(9, getMinZoom());
        }
        if (hasType()) {
          output.writeUInt32(10, getType());
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasTag()) {
          size += com.google.protobuf.CodedOutputStream
            .computeStringSize(3, getTag());
        }
        if (hasValue()) {
          size += com.google.protobuf.CodedOutputStream
            .computeStringSize(5, getValue());
        }
        if (hasId()) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(7, getId());
        }
        if (hasMinZoom()) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(9, getMinZoom());
        }
        if (hasType()) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(10, getType());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.getDefaultInstance()) return this;
          if (other.hasTag()) {
            setTag(other.getTag());
          }
          if (other.hasValue()) {
            setValue(other.getValue());
          }
          if (other.hasId()) {
            setId(other.getId());
          }
          if (other.hasMinZoom()) {
            setMinZoom(other.getMinZoom());
          }
          if (other.hasType()) {
            setType(other.getType());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 26: {
                setTag(input.readString());
                break;
              }
              case 42: {
                setValue(input.readString());
                break;
              }
              case 56: {
                setId(input.readUInt32());
                break;
              }
              case 72: {
                setMinZoom(input.readUInt32());
                break;
              }
              case 80: {
                setType(input.readUInt32());
                break;
              }
            }
          }
        }
        
        
        // required string tag = 3;
        public boolean hasTag() {
          return result.hasTag();
        }
        public java.lang.String getTag() {
          return result.getTag();
        }
        public Builder setTag(java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasTag = true;
          result.tag_ = value;
          return this;
        }
        public Builder clearTag() {
          result.hasTag = false;
          result.tag_ = getDefaultInstance().getTag();
          return this;
        }
        
        // optional string value = 5;
        public boolean hasValue() {
          return result.hasValue();
        }
        public java.lang.String getValue() {
          return result.getValue();
        }
        public Builder setValue(java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasValue = true;
          result.value_ = value;
          return this;
        }
        public Builder clearValue() {
          result.hasValue = false;
          result.value_ = getDefaultInstance().getValue();
          return this;
        }
        
        // optional uint32 id = 7;
        public boolean hasId() {
          return result.hasId();
        }
        public int getId() {
          return result.getId();
        }
        public Builder setId(int value) {
          result.hasId = true;
          result.id_ = value;
          return this;
        }
        public Builder clearId() {
          result.hasId = false;
          result.id_ = 0;
          return this;
        }
        
        // optional uint32 minZoom = 9;
        public boolean hasMinZoom() {
          return result.hasMinZoom();
        }
        public int getMinZoom() {
          return result.getMinZoom();
        }
        public Builder setMinZoom(int value) {
          result.hasMinZoom = true;
          result.minZoom_ = value;
          return this;
        }
        public Builder clearMinZoom() {
          result.hasMinZoom = false;
          result.minZoom_ = 0;
          return this;
        }
        
        // optional uint32 type = 10;
        public boolean hasType() {
          return result.hasType();
        }
        public int getType() {
          return result.getType();
        }
        public Builder setType(int value) {
          result.hasType = true;
          result.type_ = value;
          return this;
        }
        public Builder clearType() {
          result.hasType = false;
          result.type_ = 0;
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndMapIndex.MapEncodingRule)
      }
      
      static {
        defaultInstance = new MapEncodingRule(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndMapIndex.MapEncodingRule)
    }
    
    public static final class MapRootLevel extends
        com.google.protobuf.GeneratedMessage {
      // Use MapRootLevel.newBuilder() to construct.
      private MapRootLevel() {
        initFields();
      }
      private MapRootLevel(boolean noInit) {}
      
      private static final MapRootLevel defaultInstance;
      public static MapRootLevel getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public MapRootLevel getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapRootLevel_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapRootLevel_fieldAccessorTable;
      }
      
      // required int32 maxZoom = 1;
      public static final int MAXZOOM_FIELD_NUMBER = 1;
      private boolean hasMaxZoom;
      private int maxZoom_ = 0;
      public boolean hasMaxZoom() { return hasMaxZoom; }
      public int getMaxZoom() { return maxZoom_; }
      
      // required int32 minZoom = 2;
      public static final int MINZOOM_FIELD_NUMBER = 2;
      private boolean hasMinZoom;
      private int minZoom_ = 0;
      public boolean hasMinZoom() { return hasMinZoom; }
      public int getMinZoom() { return minZoom_; }
      
      // required int32 left = 3;
      public static final int LEFT_FIELD_NUMBER = 3;
      private boolean hasLeft;
      private int left_ = 0;
      public boolean hasLeft() { return hasLeft; }
      public int getLeft() { return left_; }
      
      // required int32 right = 4;
      public static final int RIGHT_FIELD_NUMBER = 4;
      private boolean hasRight;
      private int right_ = 0;
      public boolean hasRight() { return hasRight; }
      public int getRight() { return right_; }
      
      // required int32 top = 5;
      public static final int TOP_FIELD_NUMBER = 5;
      private boolean hasTop;
      private int top_ = 0;
      public boolean hasTop() { return hasTop; }
      public int getTop() { return top_; }
      
      // required int32 bottom = 6;
      public static final int BOTTOM_FIELD_NUMBER = 6;
      private boolean hasBottom;
      private int bottom_ = 0;
      public boolean hasBottom() { return hasBottom; }
      public int getBottom() { return bottom_; }
      
      // repeated .OsmAndMapIndex.MapDataBox boxes = 7;
      public static final int BOXES_FIELD_NUMBER = 7;
      private java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox> boxes_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox> getBoxesList() {
        return boxes_;
      }
      public int getBoxesCount() { return boxes_.size(); }
      public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getBoxes(int index) {
        return boxes_.get(index);
      }
      
      // repeated .MapDataBlock blocks = 15;
      public static final int BLOCKS_FIELD_NUMBER = 15;
      private java.util.List<net.osmand.binary.OsmandOdb.MapDataBlock> blocks_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.MapDataBlock> getBlocksList() {
        return blocks_;
      }
      public int getBlocksCount() { return blocks_.size(); }
      public net.osmand.binary.OsmandOdb.MapDataBlock getBlocks(int index) {
        return blocks_.get(index);
      }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        if (!hasMaxZoom) return false;
        if (!hasMinZoom) return false;
        if (!hasLeft) return false;
        if (!hasRight) return false;
        if (!hasTop) return false;
        if (!hasBottom) return false;
        for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) {
          if (!element.isInitialized()) return false;
        }
        for (net.osmand.binary.OsmandOdb.MapDataBlock element : getBlocksList()) {
          if (!element.isInitialized()) return false;
        }
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasMaxZoom()) {
          output.writeInt32(1, getMaxZoom());
        }
        if (hasMinZoom()) {
          output.writeInt32(2, getMinZoom());
        }
        if (hasLeft()) {
          output.writeInt32(3, getLeft());
        }
        if (hasRight()) {
          output.writeInt32(4, getRight());
        }
        if (hasTop()) {
          output.writeInt32(5, getTop());
        }
        if (hasBottom()) {
          output.writeInt32(6, getBottom());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) {
          output.writeMessage(7, element);
        }
        for (net.osmand.binary.OsmandOdb.MapDataBlock element : getBlocksList()) {
          output.writeMessage(15, element);
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasMaxZoom()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, getMaxZoom());
        }
        if (hasMinZoom()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, getMinZoom());
        }
        if (hasLeft()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(3, getLeft());
        }
        if (hasRight()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(4, getRight());
        }
        if (hasTop()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(5, getTop());
        }
        if (hasBottom()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(6, getBottom());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(7, element);
        }
        for (net.osmand.binary.OsmandOdb.MapDataBlock element : getBlocksList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(15, element);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.boxes_ != java.util.Collections.EMPTY_LIST) {
            result.boxes_ =
              java.util.Collections.unmodifiableList(result.boxes_);
          }
          if (result.blocks_ != java.util.Collections.EMPTY_LIST) {
            result.blocks_ =
              java.util.Collections.unmodifiableList(result.blocks_);
          }
          net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.getDefaultInstance()) return this;
          if (other.hasMaxZoom()) {
            setMaxZoom(other.getMaxZoom());
          }
          if (other.hasMinZoom()) {
            setMinZoom(other.getMinZoom());
          }
          if (other.hasLeft()) {
            setLeft(other.getLeft());
          }
          if (other.hasRight()) {
            setRight(other.getRight());
          }
          if (other.hasTop()) {
            setTop(other.getTop());
          }
          if (other.hasBottom()) {
            setBottom(other.getBottom());
          }
          if (!other.boxes_.isEmpty()) {
            if (result.boxes_.isEmpty()) {
              result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox>();
            }
            result.boxes_.addAll(other.boxes_);
          }
          if (!other.blocks_.isEmpty()) {
            if (result.blocks_.isEmpty()) {
              result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapDataBlock>();
            }
            result.blocks_.addAll(other.blocks_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 8: {
                setMaxZoom(input.readInt32());
                break;
              }
              case 16: {
                setMinZoom(input.readInt32());
                break;
              }
              case 24: {
                setLeft(input.readInt32());
                break;
              }
              case 32: {
                setRight(input.readInt32());
                break;
              }
              case 40: {
                setTop(input.readInt32());
                break;
              }
              case 48: {
                setBottom(input.readInt32());
                break;
              }
              case 58: {
                net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addBoxes(subBuilder.buildPartial());
                break;
              }
              case 122: {
                net.osmand.binary.OsmandOdb.MapDataBlock.Builder subBuilder = net.osmand.binary.OsmandOdb.MapDataBlock.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addBlocks(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // required int32 maxZoom = 1;
        public boolean hasMaxZoom() {
          return result.hasMaxZoom();
        }
        public int getMaxZoom() {
          return result.getMaxZoom();
        }
        public Builder setMaxZoom(int value) {
          result.hasMaxZoom = true;
          result.maxZoom_ = value;
          return this;
        }
        public Builder clearMaxZoom() {
          result.hasMaxZoom = false;
          result.maxZoom_ = 0;
          return this;
        }
        
        // required int32 minZoom = 2;
        public boolean hasMinZoom() {
          return result.hasMinZoom();
        }
        public int getMinZoom() {
          return result.getMinZoom();
        }
        public Builder setMinZoom(int value) {
          result.hasMinZoom = true;
          result.minZoom_ = value;
          return this;
        }
        public Builder clearMinZoom() {
          result.hasMinZoom = false;
          result.minZoom_ = 0;
          return this;
        }
        
        // required int32 left = 3;
        public boolean hasLeft() {
          return result.hasLeft();
        }
        public int getLeft() {
          return result.getLeft();
        }
        public Builder setLeft(int value) {
          result.hasLeft = true;
          result.left_ = value;
          return this;
        }
        public Builder clearLeft() {
          result.hasLeft = false;
          result.left_ = 0;
          return this;
        }
        
        // required int32 right = 4;
        public boolean hasRight() {
          return result.hasRight();
        }
        public int getRight() {
          return result.getRight();
        }
        public Builder setRight(int value) {
          result.hasRight = true;
          result.right_ = value;
          return this;
        }
        public Builder clearRight() {
          result.hasRight = false;
          result.right_ = 0;
          return this;
        }
        
        // required int32 top = 5;
        public boolean hasTop() {
          return result.hasTop();
        }
        public int getTop() {
          return result.getTop();
        }
        public Builder setTop(int value) {
          result.hasTop = true;
          result.top_ = value;
          return this;
        }
        public Builder clearTop() {
          result.hasTop = false;
          result.top_ = 0;
          return this;
        }
        
        // required int32 bottom = 6;
        public boolean hasBottom() {
          return result.hasBottom();
        }
        public int getBottom() {
          return result.getBottom();
        }
        public Builder setBottom(int value) {
          result.hasBottom = true;
          result.bottom_ = value;
          return this;
        }
        public Builder clearBottom() {
          result.hasBottom = false;
          result.bottom_ = 0;
          return this;
        }
        
        // repeated .OsmAndMapIndex.MapDataBox boxes = 7;
        public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox> getBoxesList() {
          return java.util.Collections.unmodifiableList(result.boxes_);
        }
        public int getBoxesCount() {
          return result.getBoxesCount();
        }
        public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getBoxes(int index) {
          return result.getBoxes(index);
        }
        public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.boxes_.set(index, value);
          return this;
        }
        public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder builderForValue) {
          result.boxes_.set(index, builderForValue.build());
          return this;
        }
        public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox>();
          }
          result.boxes_.add(value);
          return this;
        }
        public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder builderForValue) {
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox>();
          }
          result.boxes_.add(builderForValue.build());
          return this;
        }
        public Builder addAllBoxes(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox> values) {
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox>();
          }
          super.addAll(values, result.boxes_);
          return this;
        }
        public Builder clearBoxes() {
          result.boxes_ = java.util.Collections.emptyList();
          return this;
        }
        
        // repeated .MapDataBlock blocks = 15;
        public java.util.List<net.osmand.binary.OsmandOdb.MapDataBlock> getBlocksList() {
          return java.util.Collections.unmodifiableList(result.blocks_);
        }
        public int getBlocksCount() {
          return result.getBlocksCount();
        }
        public net.osmand.binary.OsmandOdb.MapDataBlock getBlocks(int index) {
          return result.getBlocks(index);
        }
        public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.MapDataBlock value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.blocks_.set(index, value);
          return this;
        }
        public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.MapDataBlock.Builder builderForValue) {
          result.blocks_.set(index, builderForValue.build());
          return this;
        }
        public Builder addBlocks(net.osmand.binary.OsmandOdb.MapDataBlock value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapDataBlock>();
          }
          result.blocks_.add(value);
          return this;
        }
        public Builder addBlocks(net.osmand.binary.OsmandOdb.MapDataBlock.Builder builderForValue) {
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapDataBlock>();
          }
          result.blocks_.add(builderForValue.build());
          return this;
        }
        public Builder addAllBlocks(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.MapDataBlock> values) {
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapDataBlock>();
          }
          super.addAll(values, result.blocks_);
          return this;
        }
        public Builder clearBlocks() {
          result.blocks_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndMapIndex.MapRootLevel)
      }
      
      static {
        defaultInstance = new MapRootLevel(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndMapIndex.MapRootLevel)
    }
    
    public static final class MapDataBox extends
        com.google.protobuf.GeneratedMessage {
      // Use MapDataBox.newBuilder() to construct.
      private MapDataBox() {
        initFields();
      }
      private MapDataBox(boolean noInit) {}
      
      private static final MapDataBox defaultInstance;
      public static MapDataBox getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public MapDataBox getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapDataBox_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_MapDataBox_fieldAccessorTable;
      }
      
      // required sint32 left = 1;
      public static final int LEFT_FIELD_NUMBER = 1;
      private boolean hasLeft;
      private int left_ = 0;
      public boolean hasLeft() { return hasLeft; }
      public int getLeft() { return left_; }
      
      // required sint32 right = 2;
      public static final int RIGHT_FIELD_NUMBER = 2;
      private boolean hasRight;
      private int right_ = 0;
      public boolean hasRight() { return hasRight; }
      public int getRight() { return right_; }
      
      // required sint32 top = 3;
      public static final int TOP_FIELD_NUMBER = 3;
      private boolean hasTop;
      private int top_ = 0;
      public boolean hasTop() { return hasTop; }
      public int getTop() { return top_; }
      
      // required sint32 bottom = 4;
      public static final int BOTTOM_FIELD_NUMBER = 4;
      private boolean hasBottom;
      private int bottom_ = 0;
      public boolean hasBottom() { return hasBottom; }
      public int getBottom() { return bottom_; }
      
      // optional fixed32 shiftToMapData = 5;
      public static final int SHIFTTOMAPDATA_FIELD_NUMBER = 5;
      private boolean hasShiftToMapData;
      private int shiftToMapData_ = 0;
      public boolean hasShiftToMapData() { return hasShiftToMapData; }
      public int getShiftToMapData() { return shiftToMapData_; }
      
      // optional bool ocean = 6;
      public static final int OCEAN_FIELD_NUMBER = 6;
      private boolean hasOcean;
      private boolean ocean_ = false;
      public boolean hasOcean() { return hasOcean; }
      public boolean getOcean() { return ocean_; }
      
      // repeated .OsmAndMapIndex.MapDataBox boxes = 7;
      public static final int BOXES_FIELD_NUMBER = 7;
      private java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox> boxes_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox> getBoxesList() {
        return boxes_;
      }
      public int getBoxesCount() { return boxes_.size(); }
      public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getBoxes(int index) {
        return boxes_.get(index);
      }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        if (!hasLeft) return false;
        if (!hasRight) return false;
        if (!hasTop) return false;
        if (!hasBottom) return false;
        for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) {
          if (!element.isInitialized()) return false;
        }
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasLeft()) {
          output.writeSInt32(1, getLeft());
        }
        if (hasRight()) {
          output.writeSInt32(2, getRight());
        }
        if (hasTop()) {
          output.writeSInt32(3, getTop());
        }
        if (hasBottom()) {
          output.writeSInt32(4, getBottom());
        }
        if (hasShiftToMapData()) {
          output.writeFixed32(5, getShiftToMapData());
        }
        if (hasOcean()) {
          output.writeBool(6, getOcean());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) {
          output.writeMessage(7, element);
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasLeft()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt32Size(1, getLeft());
        }
        if (hasRight()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt32Size(2, getRight());
        }
        if (hasTop()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt32Size(3, getTop());
        }
        if (hasBottom()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt32Size(4, getBottom());
        }
        if (hasShiftToMapData()) {
          size += com.google.protobuf.CodedOutputStream
            .computeFixed32Size(5, getShiftToMapData());
        }
        if (hasOcean()) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(6, getOcean());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox element : getBoxesList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(7, element);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.boxes_ != java.util.Collections.EMPTY_LIST) {
            result.boxes_ =
              java.util.Collections.unmodifiableList(result.boxes_);
          }
          net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.getDefaultInstance()) return this;
          if (other.hasLeft()) {
            setLeft(other.getLeft());
          }
          if (other.hasRight()) {
            setRight(other.getRight());
          }
          if (other.hasTop()) {
            setTop(other.getTop());
          }
          if (other.hasBottom()) {
            setBottom(other.getBottom());
          }
          if (other.hasShiftToMapData()) {
            setShiftToMapData(other.getShiftToMapData());
          }
          if (other.hasOcean()) {
            setOcean(other.getOcean());
          }
          if (!other.boxes_.isEmpty()) {
            if (result.boxes_.isEmpty()) {
              result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox>();
            }
            result.boxes_.addAll(other.boxes_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 8: {
                setLeft(input.readSInt32());
                break;
              }
              case 16: {
                setRight(input.readSInt32());
                break;
              }
              case 24: {
                setTop(input.readSInt32());
                break;
              }
              case 32: {
                setBottom(input.readSInt32());
                break;
              }
              case 45: {
                setShiftToMapData(input.readFixed32());
                break;
              }
              case 48: {
                setOcean(input.readBool());
                break;
              }
              case 58: {
                net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addBoxes(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // required sint32 left = 1;
        public boolean hasLeft() {
          return result.hasLeft();
        }
        public int getLeft() {
          return result.getLeft();
        }
        public Builder setLeft(int value) {
          result.hasLeft = true;
          result.left_ = value;
          return this;
        }
        public Builder clearLeft() {
          result.hasLeft = false;
          result.left_ = 0;
          return this;
        }
        
        // required sint32 right = 2;
        public boolean hasRight() {
          return result.hasRight();
        }
        public int getRight() {
          return result.getRight();
        }
        public Builder setRight(int value) {
          result.hasRight = true;
          result.right_ = value;
          return this;
        }
        public Builder clearRight() {
          result.hasRight = false;
          result.right_ = 0;
          return this;
        }
        
        // required sint32 top = 3;
        public boolean hasTop() {
          return result.hasTop();
        }
        public int getTop() {
          return result.getTop();
        }
        public Builder setTop(int value) {
          result.hasTop = true;
          result.top_ = value;
          return this;
        }
        public Builder clearTop() {
          result.hasTop = false;
          result.top_ = 0;
          return this;
        }
        
        // required sint32 bottom = 4;
        public boolean hasBottom() {
          return result.hasBottom();
        }
        public int getBottom() {
          return result.getBottom();
        }
        public Builder setBottom(int value) {
          result.hasBottom = true;
          result.bottom_ = value;
          return this;
        }
        public Builder clearBottom() {
          result.hasBottom = false;
          result.bottom_ = 0;
          return this;
        }
        
        // optional fixed32 shiftToMapData = 5;
        public boolean hasShiftToMapData() {
          return result.hasShiftToMapData();
        }
        public int getShiftToMapData() {
          return result.getShiftToMapData();
        }
        public Builder setShiftToMapData(int value) {
          result.hasShiftToMapData = true;
          result.shiftToMapData_ = value;
          return this;
        }
        public Builder clearShiftToMapData() {
          result.hasShiftToMapData = false;
          result.shiftToMapData_ = 0;
          return this;
        }
        
        // optional bool ocean = 6;
        public boolean hasOcean() {
          return result.hasOcean();
        }
        public boolean getOcean() {
          return result.getOcean();
        }
        public Builder setOcean(boolean value) {
          result.hasOcean = true;
          result.ocean_ = value;
          return this;
        }
        public Builder clearOcean() {
          result.hasOcean = false;
          result.ocean_ = false;
          return this;
        }
        
        // repeated .OsmAndMapIndex.MapDataBox boxes = 7;
        public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox> getBoxesList() {
          return java.util.Collections.unmodifiableList(result.boxes_);
        }
        public int getBoxesCount() {
          return result.getBoxesCount();
        }
        public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox getBoxes(int index) {
          return result.getBoxes(index);
        }
        public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.boxes_.set(index, value);
          return this;
        }
        public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder builderForValue) {
          result.boxes_.set(index, builderForValue.build());
          return this;
        }
        public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox>();
          }
          result.boxes_.add(value);
          return this;
        }
        public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder builderForValue) {
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox>();
          }
          result.boxes_.add(builderForValue.build());
          return this;
        }
        public Builder addAllBoxes(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox> values) {
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox>();
          }
          super.addAll(values, result.boxes_);
          return this;
        }
        public Builder clearBoxes() {
          result.boxes_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndMapIndex.MapDataBox)
      }
      
      static {
        defaultInstance = new MapDataBox(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndMapIndex.MapDataBox)
    }
    
    // required string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // repeated .OsmAndMapIndex.MapEncodingRule rules = 4;
    public static final int RULES_FIELD_NUMBER = 4;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule> rules_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule> getRulesList() {
      return rules_;
    }
    public int getRulesCount() { return rules_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule getRules(int index) {
      return rules_.get(index);
    }
    
    // repeated .OsmAndMapIndex.MapRootLevel levels = 5;
    public static final int LEVELS_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel> levels_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel> getLevelsList() {
      return levels_;
    }
    public int getLevelsCount() { return levels_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel getLevels(int index) {
      return levels_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule element : getRulesList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel element : getLevelsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(2, getName());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule element : getRulesList()) {
        output.writeMessage(4, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel element : getLevelsList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getName());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule element : getRulesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel element : getLevelsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndMapIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndMapIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndMapIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndMapIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndMapIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndMapIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.rules_ != java.util.Collections.EMPTY_LIST) {
          result.rules_ =
            java.util.Collections.unmodifiableList(result.rules_);
        }
        if (result.levels_ != java.util.Collections.EMPTY_LIST) {
          result.levels_ =
            java.util.Collections.unmodifiableList(result.levels_);
        }
        net.osmand.binary.OsmandOdb.OsmAndMapIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (!other.rules_.isEmpty()) {
          if (result.rules_.isEmpty()) {
            result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule>();
          }
          result.rules_.addAll(other.rules_);
        }
        if (!other.levels_.isEmpty()) {
          if (result.levels_.isEmpty()) {
            result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel>();
          }
          result.levels_.addAll(other.levels_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 18: {
              setName(input.readString());
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRules(subBuilder.buildPartial());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addLevels(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string name = 2;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // repeated .OsmAndMapIndex.MapEncodingRule rules = 4;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule> getRulesList() {
        return java.util.Collections.unmodifiableList(result.rules_);
      }
      public int getRulesCount() {
        return result.getRulesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule getRules(int index) {
        return result.getRules(index);
      }
      public Builder setRules(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.rules_.set(index, value);
        return this;
      }
      public Builder setRules(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.Builder builderForValue) {
        result.rules_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRules(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule>();
        }
        result.rules_.add(value);
        return this;
      }
      public Builder addRules(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.Builder builderForValue) {
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule>();
        }
        result.rules_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRules(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule> values) {
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule>();
        }
        super.addAll(values, result.rules_);
        return this;
      }
      public Builder clearRules() {
        result.rules_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndMapIndex.MapRootLevel levels = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel> getLevelsList() {
        return java.util.Collections.unmodifiableList(result.levels_);
      }
      public int getLevelsCount() {
        return result.getLevelsCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel getLevels(int index) {
        return result.getLevels(index);
      }
      public Builder setLevels(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.levels_.set(index, value);
        return this;
      }
      public Builder setLevels(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.Builder builderForValue) {
        result.levels_.set(index, builderForValue.build());
        return this;
      }
      public Builder addLevels(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel>();
        }
        result.levels_.add(value);
        return this;
      }
      public Builder addLevels(net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.Builder builderForValue) {
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel>();
        }
        result.levels_.add(builderForValue.build());
        return this;
      }
      public Builder addAllLevels(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel> values) {
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel>();
        }
        super.addAll(values, result.levels_);
        return this;
      }
      public Builder clearLevels() {
        result.levels_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndMapIndex)
    }
    
    static {
      defaultInstance = new OsmAndMapIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndMapIndex)
  }
  
  public static final class MapDataBlock extends
      com.google.protobuf.GeneratedMessage {
    // Use MapDataBlock.newBuilder() to construct.
    private MapDataBlock() {
      initFields();
    }
    private MapDataBlock(boolean noInit) {}
    
    private static final MapDataBlock defaultInstance;
    public static MapDataBlock getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public MapDataBlock getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_MapDataBlock_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_MapDataBlock_fieldAccessorTable;
    }
    
    // optional uint64 baseId = 10;
    public static final int BASEID_FIELD_NUMBER = 10;
    private boolean hasBaseId;
    private long baseId_ = 0L;
    public boolean hasBaseId() { return hasBaseId; }
    public long getBaseId() { return baseId_; }
    
    // repeated .MapData dataObjects = 12;
    public static final int DATAOBJECTS_FIELD_NUMBER = 12;
    private java.util.List<net.osmand.binary.OsmandOdb.MapData> dataObjects_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.MapData> getDataObjectsList() {
      return dataObjects_;
    }
    public int getDataObjectsCount() { return dataObjects_.size(); }
    public net.osmand.binary.OsmandOdb.MapData getDataObjects(int index) {
      return dataObjects_.get(index);
    }
    
    // optional .StringTable stringTable = 15;
    public static final int STRINGTABLE_FIELD_NUMBER = 15;
    private boolean hasStringTable;
    private net.osmand.binary.OsmandOdb.StringTable stringTable_;
    public boolean hasStringTable() { return hasStringTable; }
    public net.osmand.binary.OsmandOdb.StringTable getStringTable() { return stringTable_; }
    
    private void initFields() {
      stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.MapData element : getDataObjectsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasBaseId()) {
        output.writeUInt64(10, getBaseId());
      }
      for (net.osmand.binary.OsmandOdb.MapData element : getDataObjectsList()) {
        output.writeMessage(12, element);
      }
      if (hasStringTable()) {
        output.writeMessage(15, getStringTable());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasBaseId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(10, getBaseId());
      }
      for (net.osmand.binary.OsmandOdb.MapData element : getDataObjectsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, element);
      }
      if (hasStringTable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, getStringTable());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapDataBlock parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.MapDataBlock prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.MapDataBlock result;
      
      // Construct using net.osmand.binary.OsmandOdb.MapDataBlock.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.MapDataBlock();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.MapDataBlock internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.MapDataBlock();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.MapDataBlock.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapDataBlock getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.MapDataBlock.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.MapDataBlock build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.MapDataBlock buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapDataBlock buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.dataObjects_ != java.util.Collections.EMPTY_LIST) {
          result.dataObjects_ =
            java.util.Collections.unmodifiableList(result.dataObjects_);
        }
        net.osmand.binary.OsmandOdb.MapDataBlock returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.MapDataBlock) {
          return mergeFrom((net.osmand.binary.OsmandOdb.MapDataBlock)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.MapDataBlock other) {
        if (other == net.osmand.binary.OsmandOdb.MapDataBlock.getDefaultInstance()) return this;
        if (other.hasBaseId()) {
          setBaseId(other.getBaseId());
        }
        if (!other.dataObjects_.isEmpty()) {
          if (result.dataObjects_.isEmpty()) {
            result.dataObjects_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapData>();
          }
          result.dataObjects_.addAll(other.dataObjects_);
        }
        if (other.hasStringTable()) {
          mergeStringTable(other.getStringTable());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 80: {
              setBaseId(input.readUInt64());
              break;
            }
            case 98: {
              net.osmand.binary.OsmandOdb.MapData.Builder subBuilder = net.osmand.binary.OsmandOdb.MapData.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addDataObjects(subBuilder.buildPartial());
              break;
            }
            case 122: {
              net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder();
              if (hasStringTable()) {
                subBuilder.mergeFrom(getStringTable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setStringTable(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // optional uint64 baseId = 10;
      public boolean hasBaseId() {
        return result.hasBaseId();
      }
      public long getBaseId() {
        return result.getBaseId();
      }
      public Builder setBaseId(long value) {
        result.hasBaseId = true;
        result.baseId_ = value;
        return this;
      }
      public Builder clearBaseId() {
        result.hasBaseId = false;
        result.baseId_ = 0L;
        return this;
      }
      
      // repeated .MapData dataObjects = 12;
      public java.util.List<net.osmand.binary.OsmandOdb.MapData> getDataObjectsList() {
        return java.util.Collections.unmodifiableList(result.dataObjects_);
      }
      public int getDataObjectsCount() {
        return result.getDataObjectsCount();
      }
      public net.osmand.binary.OsmandOdb.MapData getDataObjects(int index) {
        return result.getDataObjects(index);
      }
      public Builder setDataObjects(int index, net.osmand.binary.OsmandOdb.MapData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.dataObjects_.set(index, value);
        return this;
      }
      public Builder setDataObjects(int index, net.osmand.binary.OsmandOdb.MapData.Builder builderForValue) {
        result.dataObjects_.set(index, builderForValue.build());
        return this;
      }
      public Builder addDataObjects(net.osmand.binary.OsmandOdb.MapData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.dataObjects_.isEmpty()) {
          result.dataObjects_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapData>();
        }
        result.dataObjects_.add(value);
        return this;
      }
      public Builder addDataObjects(net.osmand.binary.OsmandOdb.MapData.Builder builderForValue) {
        if (result.dataObjects_.isEmpty()) {
          result.dataObjects_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapData>();
        }
        result.dataObjects_.add(builderForValue.build());
        return this;
      }
      public Builder addAllDataObjects(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.MapData> values) {
        if (result.dataObjects_.isEmpty()) {
          result.dataObjects_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapData>();
        }
        super.addAll(values, result.dataObjects_);
        return this;
      }
      public Builder clearDataObjects() {
        result.dataObjects_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .StringTable stringTable = 15;
      public boolean hasStringTable() {
        return result.hasStringTable();
      }
      public net.osmand.binary.OsmandOdb.StringTable getStringTable() {
        return result.getStringTable();
      }
      public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasStringTable = true;
        result.stringTable_ = value;
        return this;
      }
      public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) {
        result.hasStringTable = true;
        result.stringTable_ = builderForValue.build();
        return this;
      }
      public Builder mergeStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (result.hasStringTable() &&
            result.stringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) {
          result.stringTable_ =
            net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.stringTable_).mergeFrom(value).buildPartial();
        } else {
          result.stringTable_ = value;
        }
        result.hasStringTable = true;
        return this;
      }
      public Builder clearStringTable() {
        result.hasStringTable = false;
        result.stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:MapDataBlock)
    }
    
    static {
      defaultInstance = new MapDataBlock(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:MapDataBlock)
  }
  
  public static final class MapData extends
      com.google.protobuf.GeneratedMessage {
    // Use MapData.newBuilder() to construct.
    private MapData() {
      initFields();
    }
    private MapData(boolean noInit) {}
    
    private static final MapData defaultInstance;
    public static MapData getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public MapData getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_MapData_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_MapData_fieldAccessorTable;
    }
    
    // optional bytes coordinates = 1;
    public static final int COORDINATES_FIELD_NUMBER = 1;
    private boolean hasCoordinates;
    private com.google.protobuf.ByteString coordinates_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasCoordinates() { return hasCoordinates; }
    public com.google.protobuf.ByteString getCoordinates() { return coordinates_; }
    
    // optional bytes areaCoordinates = 2;
    public static final int AREACOORDINATES_FIELD_NUMBER = 2;
    private boolean hasAreaCoordinates;
    private com.google.protobuf.ByteString areaCoordinates_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasAreaCoordinates() { return hasAreaCoordinates; }
    public com.google.protobuf.ByteString getAreaCoordinates() { return areaCoordinates_; }
    
    // repeated bytes polygonInnerCoordinates = 4;
    public static final int POLYGONINNERCOORDINATES_FIELD_NUMBER = 4;
    private java.util.List<com.google.protobuf.ByteString> polygonInnerCoordinates_ =
      java.util.Collections.emptyList();
    public java.util.List<com.google.protobuf.ByteString> getPolygonInnerCoordinatesList() {
      return polygonInnerCoordinates_;
    }
    public int getPolygonInnerCoordinatesCount() { return polygonInnerCoordinates_.size(); }
    public com.google.protobuf.ByteString getPolygonInnerCoordinates(int index) {
      return polygonInnerCoordinates_.get(index);
    }
    
    // optional bytes additionalTypes = 6;
    public static final int ADDITIONALTYPES_FIELD_NUMBER = 6;
    private boolean hasAdditionalTypes;
    private com.google.protobuf.ByteString additionalTypes_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasAdditionalTypes() { return hasAdditionalTypes; }
    public com.google.protobuf.ByteString getAdditionalTypes() { return additionalTypes_; }
    
    // required bytes types = 7;
    public static final int TYPES_FIELD_NUMBER = 7;
    private boolean hasTypes;
    private com.google.protobuf.ByteString types_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasTypes() { return hasTypes; }
    public com.google.protobuf.ByteString getTypes() { return types_; }
    
    // optional bytes stringNames = 10;
    public static final int STRINGNAMES_FIELD_NUMBER = 10;
    private boolean hasStringNames;
    private com.google.protobuf.ByteString stringNames_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasStringNames() { return hasStringNames; }
    public com.google.protobuf.ByteString getStringNames() { return stringNames_; }
    
    // required sint64 id = 12;
    public static final int ID_FIELD_NUMBER = 12;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // optional bytes rasterBytes = 15;
    public static final int RASTERBYTES_FIELD_NUMBER = 15;
    private boolean hasRasterBytes;
    private com.google.protobuf.ByteString rasterBytes_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasRasterBytes() { return hasRasterBytes; }
    public com.google.protobuf.ByteString getRasterBytes() { return rasterBytes_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasTypes) return false;
      if (!hasId) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasCoordinates()) {
        output.writeBytes(1, getCoordinates());
      }
      if (hasAreaCoordinates()) {
        output.writeBytes(2, getAreaCoordinates());
      }
      for (com.google.protobuf.ByteString element : getPolygonInnerCoordinatesList()) {
        output.writeBytes(4, element);
      }
      if (hasAdditionalTypes()) {
        output.writeBytes(6, getAdditionalTypes());
      }
      if (hasTypes()) {
        output.writeBytes(7, getTypes());
      }
      if (hasStringNames()) {
        output.writeBytes(10, getStringNames());
      }
      if (hasId()) {
        output.writeSInt64(12, getId());
      }
      if (hasRasterBytes()) {
        output.writeBytes(15, getRasterBytes());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasCoordinates()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getCoordinates());
      }
      if (hasAreaCoordinates()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getAreaCoordinates());
      }
      {
        int dataSize = 0;
        for (com.google.protobuf.ByteString element : getPolygonInnerCoordinatesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(element);
        }
        size += dataSize;
        size += getPolygonInnerCoordinatesList().size();
      }
      if (hasAdditionalTypes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getAdditionalTypes());
      }
      if (hasTypes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getTypes());
      }
      if (hasStringNames()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, getStringNames());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(12, getId());
      }
      if (hasRasterBytes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(15, getRasterBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.MapData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.MapData result;
      
      // Construct using net.osmand.binary.OsmandOdb.MapData.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.MapData();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.MapData internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.MapData();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.MapData.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapData getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.MapData.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.MapData build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.MapData buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapData buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.polygonInnerCoordinates_ != java.util.Collections.EMPTY_LIST) {
          result.polygonInnerCoordinates_ =
            java.util.Collections.unmodifiableList(result.polygonInnerCoordinates_);
        }
        net.osmand.binary.OsmandOdb.MapData returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.MapData) {
          return mergeFrom((net.osmand.binary.OsmandOdb.MapData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.MapData other) {
        if (other == net.osmand.binary.OsmandOdb.MapData.getDefaultInstance()) return this;
        if (other.hasCoordinates()) {
          setCoordinates(other.getCoordinates());
        }
        if (other.hasAreaCoordinates()) {
          setAreaCoordinates(other.getAreaCoordinates());
        }
        if (!other.polygonInnerCoordinates_.isEmpty()) {
          if (result.polygonInnerCoordinates_.isEmpty()) {
            result.polygonInnerCoordinates_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
          }
          result.polygonInnerCoordinates_.addAll(other.polygonInnerCoordinates_);
        }
        if (other.hasAdditionalTypes()) {
          setAdditionalTypes(other.getAdditionalTypes());
        }
        if (other.hasTypes()) {
          setTypes(other.getTypes());
        }
        if (other.hasStringNames()) {
          setStringNames(other.getStringNames());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasRasterBytes()) {
          setRasterBytes(other.getRasterBytes());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setCoordinates(input.readBytes());
              break;
            }
            case 18: {
              setAreaCoordinates(input.readBytes());
              break;
            }
            case 34: {
              addPolygonInnerCoordinates(input.readBytes());
              break;
            }
            case 50: {
              setAdditionalTypes(input.readBytes());
              break;
            }
            case 58: {
              setTypes(input.readBytes());
              break;
            }
            case 82: {
              setStringNames(input.readBytes());
              break;
            }
            case 96: {
              setId(input.readSInt64());
              break;
            }
            case 122: {
              setRasterBytes(input.readBytes());
              break;
            }
          }
        }
      }
      
      
      // optional bytes coordinates = 1;
      public boolean hasCoordinates() {
        return result.hasCoordinates();
      }
      public com.google.protobuf.ByteString getCoordinates() {
        return result.getCoordinates();
      }
      public Builder setCoordinates(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasCoordinates = true;
        result.coordinates_ = value;
        return this;
      }
      public Builder clearCoordinates() {
        result.hasCoordinates = false;
        result.coordinates_ = getDefaultInstance().getCoordinates();
        return this;
      }
      
      // optional bytes areaCoordinates = 2;
      public boolean hasAreaCoordinates() {
        return result.hasAreaCoordinates();
      }
      public com.google.protobuf.ByteString getAreaCoordinates() {
        return result.getAreaCoordinates();
      }
      public Builder setAreaCoordinates(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasAreaCoordinates = true;
        result.areaCoordinates_ = value;
        return this;
      }
      public Builder clearAreaCoordinates() {
        result.hasAreaCoordinates = false;
        result.areaCoordinates_ = getDefaultInstance().getAreaCoordinates();
        return this;
      }
      
      // repeated bytes polygonInnerCoordinates = 4;
      public java.util.List<com.google.protobuf.ByteString> getPolygonInnerCoordinatesList() {
        return java.util.Collections.unmodifiableList(result.polygonInnerCoordinates_);
      }
      public int getPolygonInnerCoordinatesCount() {
        return result.getPolygonInnerCoordinatesCount();
      }
      public com.google.protobuf.ByteString getPolygonInnerCoordinates(int index) {
        return result.getPolygonInnerCoordinates(index);
      }
      public Builder setPolygonInnerCoordinates(int index, com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.polygonInnerCoordinates_.set(index, value);
        return this;
      }
      public Builder addPolygonInnerCoordinates(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.polygonInnerCoordinates_.isEmpty()) {
          result.polygonInnerCoordinates_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
        }
        result.polygonInnerCoordinates_.add(value);
        return this;
      }
      public Builder addAllPolygonInnerCoordinates(
          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
        if (result.polygonInnerCoordinates_.isEmpty()) {
          result.polygonInnerCoordinates_ = new java.util.ArrayList<com.google.protobuf.ByteString>();
        }
        super.addAll(values, result.polygonInnerCoordinates_);
        return this;
      }
      public Builder clearPolygonInnerCoordinates() {
        result.polygonInnerCoordinates_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional bytes additionalTypes = 6;
      public boolean hasAdditionalTypes() {
        return result.hasAdditionalTypes();
      }
      public com.google.protobuf.ByteString getAdditionalTypes() {
        return result.getAdditionalTypes();
      }
      public Builder setAdditionalTypes(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasAdditionalTypes = true;
        result.additionalTypes_ = value;
        return this;
      }
      public Builder clearAdditionalTypes() {
        result.hasAdditionalTypes = false;
        result.additionalTypes_ = getDefaultInstance().getAdditionalTypes();
        return this;
      }
      
      // required bytes types = 7;
      public boolean hasTypes() {
        return result.hasTypes();
      }
      public com.google.protobuf.ByteString getTypes() {
        return result.getTypes();
      }
      public Builder setTypes(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasTypes = true;
        result.types_ = value;
        return this;
      }
      public Builder clearTypes() {
        result.hasTypes = false;
        result.types_ = getDefaultInstance().getTypes();
        return this;
      }
      
      // optional bytes stringNames = 10;
      public boolean hasStringNames() {
        return result.hasStringNames();
      }
      public com.google.protobuf.ByteString getStringNames() {
        return result.getStringNames();
      }
      public Builder setStringNames(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasStringNames = true;
        result.stringNames_ = value;
        return this;
      }
      public Builder clearStringNames() {
        result.hasStringNames = false;
        result.stringNames_ = getDefaultInstance().getStringNames();
        return this;
      }
      
      // required sint64 id = 12;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // optional bytes rasterBytes = 15;
      public boolean hasRasterBytes() {
        return result.hasRasterBytes();
      }
      public com.google.protobuf.ByteString getRasterBytes() {
        return result.getRasterBytes();
      }
      public Builder setRasterBytes(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasRasterBytes = true;
        result.rasterBytes_ = value;
        return this;
      }
      public Builder clearRasterBytes() {
        result.hasRasterBytes = false;
        result.rasterBytes_ = getDefaultInstance().getRasterBytes();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:MapData)
    }
    
    static {
      defaultInstance = new MapData(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:MapData)
  }
  
  public static final class OsmAndAddressIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndAddressIndex.newBuilder() to construct.
    private OsmAndAddressIndex() {
      initFields();
    }
    private OsmAndAddressIndex(boolean noInit) {}
    
    private static final OsmAndAddressIndex defaultInstance;
    public static OsmAndAddressIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndAddressIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_fieldAccessorTable;
    }
    
    public static final class CitiesIndex extends
        com.google.protobuf.GeneratedMessage {
      // Use CitiesIndex.newBuilder() to construct.
      private CitiesIndex() {
        initFields();
      }
      private CitiesIndex(boolean noInit) {}
      
      private static final CitiesIndex defaultInstance;
      public static CitiesIndex getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public CitiesIndex getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_CitiesIndex_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_CitiesIndex_fieldAccessorTable;
      }
      
      // required uint32 type = 2;
      public static final int TYPE_FIELD_NUMBER = 2;
      private boolean hasType;
      private int type_ = 0;
      public boolean hasType() { return hasType; }
      public int getType() { return type_; }
      
      // repeated .CityIndex cities = 5;
      public static final int CITIES_FIELD_NUMBER = 5;
      private java.util.List<net.osmand.binary.OsmandOdb.CityIndex> cities_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.CityIndex> getCitiesList() {
        return cities_;
      }
      public int getCitiesCount() { return cities_.size(); }
      public net.osmand.binary.OsmandOdb.CityIndex getCities(int index) {
        return cities_.get(index);
      }
      
      // repeated .CityBlockIndex blocks = 7;
      public static final int BLOCKS_FIELD_NUMBER = 7;
      private java.util.List<net.osmand.binary.OsmandOdb.CityBlockIndex> blocks_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.CityBlockIndex> getBlocksList() {
        return blocks_;
      }
      public int getBlocksCount() { return blocks_.size(); }
      public net.osmand.binary.OsmandOdb.CityBlockIndex getBlocks(int index) {
        return blocks_.get(index);
      }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        if (!hasType) return false;
        for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) {
          if (!element.isInitialized()) return false;
        }
        for (net.osmand.binary.OsmandOdb.CityBlockIndex element : getBlocksList()) {
          if (!element.isInitialized()) return false;
        }
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasType()) {
          output.writeUInt32(2, getType());
        }
        for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) {
          output.writeMessage(5, element);
        }
        for (net.osmand.binary.OsmandOdb.CityBlockIndex element : getBlocksList()) {
          output.writeMessage(7, element);
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasType()) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(2, getType());
        }
        for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, element);
        }
        for (net.osmand.binary.OsmandOdb.CityBlockIndex element : getBlocksList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(7, element);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.cities_ != java.util.Collections.EMPTY_LIST) {
            result.cities_ =
              java.util.Collections.unmodifiableList(result.cities_);
          }
          if (result.blocks_ != java.util.Collections.EMPTY_LIST) {
            result.blocks_ =
              java.util.Collections.unmodifiableList(result.blocks_);
          }
          net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.getDefaultInstance()) return this;
          if (other.hasType()) {
            setType(other.getType());
          }
          if (!other.cities_.isEmpty()) {
            if (result.cities_.isEmpty()) {
              result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityIndex>();
            }
            result.cities_.addAll(other.cities_);
          }
          if (!other.blocks_.isEmpty()) {
            if (result.blocks_.isEmpty()) {
              result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityBlockIndex>();
            }
            result.blocks_.addAll(other.blocks_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 16: {
                setType(input.readUInt32());
                break;
              }
              case 42: {
                net.osmand.binary.OsmandOdb.CityIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.CityIndex.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addCities(subBuilder.buildPartial());
                break;
              }
              case 58: {
                net.osmand.binary.OsmandOdb.CityBlockIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.CityBlockIndex.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addBlocks(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // required uint32 type = 2;
        public boolean hasType() {
          return result.hasType();
        }
        public int getType() {
          return result.getType();
        }
        public Builder setType(int value) {
          result.hasType = true;
          result.type_ = value;
          return this;
        }
        public Builder clearType() {
          result.hasType = false;
          result.type_ = 0;
          return this;
        }
        
        // repeated .CityIndex cities = 5;
        public java.util.List<net.osmand.binary.OsmandOdb.CityIndex> getCitiesList() {
          return java.util.Collections.unmodifiableList(result.cities_);
        }
        public int getCitiesCount() {
          return result.getCitiesCount();
        }
        public net.osmand.binary.OsmandOdb.CityIndex getCities(int index) {
          return result.getCities(index);
        }
        public Builder setCities(int index, net.osmand.binary.OsmandOdb.CityIndex value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.cities_.set(index, value);
          return this;
        }
        public Builder setCities(int index, net.osmand.binary.OsmandOdb.CityIndex.Builder builderForValue) {
          result.cities_.set(index, builderForValue.build());
          return this;
        }
        public Builder addCities(net.osmand.binary.OsmandOdb.CityIndex value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.cities_.isEmpty()) {
            result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityIndex>();
          }
          result.cities_.add(value);
          return this;
        }
        public Builder addCities(net.osmand.binary.OsmandOdb.CityIndex.Builder builderForValue) {
          if (result.cities_.isEmpty()) {
            result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityIndex>();
          }
          result.cities_.add(builderForValue.build());
          return this;
        }
        public Builder addAllCities(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.CityIndex> values) {
          if (result.cities_.isEmpty()) {
            result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityIndex>();
          }
          super.addAll(values, result.cities_);
          return this;
        }
        public Builder clearCities() {
          result.cities_ = java.util.Collections.emptyList();
          return this;
        }
        
        // repeated .CityBlockIndex blocks = 7;
        public java.util.List<net.osmand.binary.OsmandOdb.CityBlockIndex> getBlocksList() {
          return java.util.Collections.unmodifiableList(result.blocks_);
        }
        public int getBlocksCount() {
          return result.getBlocksCount();
        }
        public net.osmand.binary.OsmandOdb.CityBlockIndex getBlocks(int index) {
          return result.getBlocks(index);
        }
        public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.CityBlockIndex value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.blocks_.set(index, value);
          return this;
        }
        public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.CityBlockIndex.Builder builderForValue) {
          result.blocks_.set(index, builderForValue.build());
          return this;
        }
        public Builder addBlocks(net.osmand.binary.OsmandOdb.CityBlockIndex value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityBlockIndex>();
          }
          result.blocks_.add(value);
          return this;
        }
        public Builder addBlocks(net.osmand.binary.OsmandOdb.CityBlockIndex.Builder builderForValue) {
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityBlockIndex>();
          }
          result.blocks_.add(builderForValue.build());
          return this;
        }
        public Builder addAllBlocks(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.CityBlockIndex> values) {
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityBlockIndex>();
          }
          super.addAll(values, result.blocks_);
          return this;
        }
        public Builder clearBlocks() {
          result.blocks_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndAddressIndex.CitiesIndex)
      }
      
      static {
        defaultInstance = new CitiesIndex(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndAddressIndex.CitiesIndex)
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 2;
    public static final int NAME_EN_FIELD_NUMBER = 2;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional .OsmAndTileBox boundaries = 3;
    public static final int BOUNDARIES_FIELD_NUMBER = 3;
    private boolean hasBoundaries;
    private net.osmand.binary.OsmandOdb.OsmAndTileBox boundaries_;
    public boolean hasBoundaries() { return hasBoundaries; }
    public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { return boundaries_; }
    
    // repeated .OsmAndAddressIndex.CitiesIndex cities = 6;
    public static final int CITIES_FIELD_NUMBER = 6;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex> cities_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex> getCitiesList() {
      return cities_;
    }
    public int getCitiesCount() { return cities_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex getCities(int index) {
      return cities_.get(index);
    }
    
    // optional .OsmAndAddressNameIndexData nameIndex = 7;
    public static final int NAMEINDEX_FIELD_NUMBER = 7;
    private boolean hasNameIndex;
    private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData nameIndex_;
    public boolean hasNameIndex() { return hasNameIndex; }
    public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData getNameIndex() { return nameIndex_; }
    
    private void initFields() {
      boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
      nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (hasBoundaries()) {
        if (!getBoundaries().isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex element : getCitiesList()) {
        if (!element.isInitialized()) return false;
      }
      if (hasNameIndex()) {
        if (!getNameIndex().isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasNameEn()) {
        output.writeString(2, getNameEn());
      }
      if (hasBoundaries()) {
        output.writeMessage(3, getBoundaries());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex element : getCitiesList()) {
        output.writeMessage(6, element);
      }
      if (hasNameIndex()) {
        output.writeMessage(7, getNameIndex());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getNameEn());
      }
      if (hasBoundaries()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getBoundaries());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex element : getCitiesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, element);
      }
      if (hasNameIndex()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, getNameIndex());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndAddressIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndAddressIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndAddressIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.cities_ != java.util.Collections.EMPTY_LIST) {
          result.cities_ =
            java.util.Collections.unmodifiableList(result.cities_);
        }
        net.osmand.binary.OsmandOdb.OsmAndAddressIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasBoundaries()) {
          mergeBoundaries(other.getBoundaries());
        }
        if (!other.cities_.isEmpty()) {
          if (result.cities_.isEmpty()) {
            result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex>();
          }
          result.cities_.addAll(other.cities_);
        }
        if (other.hasNameIndex()) {
          mergeNameIndex(other.getNameIndex());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              setNameEn(input.readString());
              break;
            }
            case 26: {
              net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder();
              if (hasBoundaries()) {
                subBuilder.mergeFrom(getBoundaries());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setBoundaries(subBuilder.buildPartial());
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addCities(subBuilder.buildPartial());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.newBuilder();
              if (hasNameIndex()) {
                subBuilder.mergeFrom(getNameIndex());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setNameIndex(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 2;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional .OsmAndTileBox boundaries = 3;
      public boolean hasBoundaries() {
        return result.hasBoundaries();
      }
      public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() {
        return result.getBoundaries();
      }
      public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasBoundaries = true;
        result.boundaries_ = value;
        return this;
      }
      public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder builderForValue) {
        result.hasBoundaries = true;
        result.boundaries_ = builderForValue.build();
        return this;
      }
      public Builder mergeBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) {
        if (result.hasBoundaries() &&
            result.boundaries_ != net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) {
          result.boundaries_ =
            net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(result.boundaries_).mergeFrom(value).buildPartial();
        } else {
          result.boundaries_ = value;
        }
        result.hasBoundaries = true;
        return this;
      }
      public Builder clearBoundaries() {
        result.hasBoundaries = false;
        result.boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndAddressIndex.CitiesIndex cities = 6;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex> getCitiesList() {
        return java.util.Collections.unmodifiableList(result.cities_);
      }
      public int getCitiesCount() {
        return result.getCitiesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex getCities(int index) {
        return result.getCities(index);
      }
      public Builder setCities(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.cities_.set(index, value);
        return this;
      }
      public Builder setCities(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.Builder builderForValue) {
        result.cities_.set(index, builderForValue.build());
        return this;
      }
      public Builder addCities(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex>();
        }
        result.cities_.add(value);
        return this;
      }
      public Builder addCities(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.Builder builderForValue) {
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex>();
        }
        result.cities_.add(builderForValue.build());
        return this;
      }
      public Builder addAllCities(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex> values) {
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex>();
        }
        super.addAll(values, result.cities_);
        return this;
      }
      public Builder clearCities() {
        result.cities_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .OsmAndAddressNameIndexData nameIndex = 7;
      public boolean hasNameIndex() {
        return result.hasNameIndex();
      }
      public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData getNameIndex() {
        return result.getNameIndex();
      }
      public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasNameIndex = true;
        result.nameIndex_ = value;
        return this;
      }
      public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.Builder builderForValue) {
        result.hasNameIndex = true;
        result.nameIndex_ = builderForValue.build();
        return this;
      }
      public Builder mergeNameIndex(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData value) {
        if (result.hasNameIndex() &&
            result.nameIndex_ != net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance()) {
          result.nameIndex_ =
            net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.newBuilder(result.nameIndex_).mergeFrom(value).buildPartial();
        } else {
          result.nameIndex_ = value;
        }
        result.hasNameIndex = true;
        return this;
      }
      public Builder clearNameIndex() {
        result.hasNameIndex = false;
        result.nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndAddressIndex)
    }
    
    static {
      defaultInstance = new OsmAndAddressIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndAddressIndex)
  }
  
  public static final class OsmAndAddressNameIndexData extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndAddressNameIndexData.newBuilder() to construct.
    private OsmAndAddressNameIndexData() {
      initFields();
    }
    private OsmAndAddressNameIndexData(boolean noInit) {}
    
    private static final OsmAndAddressNameIndexData defaultInstance;
    public static OsmAndAddressNameIndexData getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndAddressNameIndexData getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressNameIndexData_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressNameIndexData_fieldAccessorTable;
    }
    
    public static final class AddressNameIndexData extends
        com.google.protobuf.GeneratedMessage {
      // Use AddressNameIndexData.newBuilder() to construct.
      private AddressNameIndexData() {
        initFields();
      }
      private AddressNameIndexData(boolean noInit) {}
      
      private static final AddressNameIndexData defaultInstance;
      public static AddressNameIndexData getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public AddressNameIndexData getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_fieldAccessorTable;
      }
      
      // repeated .AddressNameIndexDataAtom atom = 4;
      public static final int ATOM_FIELD_NUMBER = 4;
      private java.util.List<net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom> atom_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom> getAtomList() {
        return atom_;
      }
      public int getAtomCount() { return atom_.size(); }
      public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom getAtom(int index) {
        return atom_.get(index);
      }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        for (net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom element : getAtomList()) {
          if (!element.isInitialized()) return false;
        }
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        for (net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom element : getAtomList()) {
          output.writeMessage(4, element);
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        for (net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom element : getAtomList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, element);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.atom_ != java.util.Collections.EMPTY_LIST) {
            result.atom_ =
              java.util.Collections.unmodifiableList(result.atom_);
          }
          net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.getDefaultInstance()) return this;
          if (!other.atom_.isEmpty()) {
            if (result.atom_.isEmpty()) {
              result.atom_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom>();
            }
            result.atom_.addAll(other.atom_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 34: {
                net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.Builder subBuilder = net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addAtom(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // repeated .AddressNameIndexDataAtom atom = 4;
        public java.util.List<net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom> getAtomList() {
          return java.util.Collections.unmodifiableList(result.atom_);
        }
        public int getAtomCount() {
          return result.getAtomCount();
        }
        public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom getAtom(int index) {
          return result.getAtom(index);
        }
        public Builder setAtom(int index, net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.atom_.set(index, value);
          return this;
        }
        public Builder setAtom(int index, net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.Builder builderForValue) {
          result.atom_.set(index, builderForValue.build());
          return this;
        }
        public Builder addAtom(net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.atom_.isEmpty()) {
            result.atom_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom>();
          }
          result.atom_.add(value);
          return this;
        }
        public Builder addAtom(net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.Builder builderForValue) {
          if (result.atom_.isEmpty()) {
            result.atom_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom>();
          }
          result.atom_.add(builderForValue.build());
          return this;
        }
        public Builder addAllAtom(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom> values) {
          if (result.atom_.isEmpty()) {
            result.atom_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom>();
          }
          super.addAll(values, result.atom_);
          return this;
        }
        public Builder clearAtom() {
          result.atom_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndAddressNameIndexData.AddressNameIndexData)
      }
      
      static {
        defaultInstance = new AddressNameIndexData(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndAddressNameIndexData.AddressNameIndexData)
    }
    
    // required .IndexedStringTable table = 4;
    public static final int TABLE_FIELD_NUMBER = 4;
    private boolean hasTable;
    private net.osmand.binary.OsmandOdb.IndexedStringTable table_;
    public boolean hasTable() { return hasTable; }
    public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() { return table_; }
    
    // repeated .OsmAndAddressNameIndexData.AddressNameIndexData atom = 7;
    public static final int ATOM_FIELD_NUMBER = 7;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData> atom_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData> getAtomList() {
      return atom_;
    }
    public int getAtomCount() { return atom_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData getAtom(int index) {
      return atom_.get(index);
    }
    
    private void initFields() {
      table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasTable) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData element : getAtomList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasTable()) {
        output.writeMessage(4, getTable());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData element : getAtomList()) {
        output.writeMessage(7, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasTable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getTable());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData element : getAtomList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.atom_ != java.util.Collections.EMPTY_LIST) {
          result.atom_ =
            java.util.Collections.unmodifiableList(result.atom_);
        }
        net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.getDefaultInstance()) return this;
        if (other.hasTable()) {
          mergeTable(other.getTable());
        }
        if (!other.atom_.isEmpty()) {
          if (result.atom_.isEmpty()) {
            result.atom_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData>();
          }
          result.atom_.addAll(other.atom_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.IndexedStringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder();
              if (hasTable()) {
                subBuilder.mergeFrom(getTable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setTable(subBuilder.buildPartial());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addAtom(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required .IndexedStringTable table = 4;
      public boolean hasTable() {
        return result.hasTable();
      }
      public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() {
        return result.getTable();
      }
      public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasTable = true;
        result.table_ = value;
        return this;
      }
      public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) {
        result.hasTable = true;
        result.table_ = builderForValue.build();
        return this;
      }
      public Builder mergeTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (result.hasTable() &&
            result.table_ != net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance()) {
          result.table_ =
            net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder(result.table_).mergeFrom(value).buildPartial();
        } else {
          result.table_ = value;
        }
        result.hasTable = true;
        return this;
      }
      public Builder clearTable() {
        result.hasTable = false;
        result.table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndAddressNameIndexData.AddressNameIndexData atom = 7;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData> getAtomList() {
        return java.util.Collections.unmodifiableList(result.atom_);
      }
      public int getAtomCount() {
        return result.getAtomCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData getAtom(int index) {
        return result.getAtom(index);
      }
      public Builder setAtom(int index, net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.atom_.set(index, value);
        return this;
      }
      public Builder setAtom(int index, net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.Builder builderForValue) {
        result.atom_.set(index, builderForValue.build());
        return this;
      }
      public Builder addAtom(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.atom_.isEmpty()) {
          result.atom_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData>();
        }
        result.atom_.add(value);
        return this;
      }
      public Builder addAtom(net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.Builder builderForValue) {
        if (result.atom_.isEmpty()) {
          result.atom_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData>();
        }
        result.atom_.add(builderForValue.build());
        return this;
      }
      public Builder addAllAtom(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData> values) {
        if (result.atom_.isEmpty()) {
          result.atom_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData>();
        }
        super.addAll(values, result.atom_);
        return this;
      }
      public Builder clearAtom() {
        result.atom_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndAddressNameIndexData)
    }
    
    static {
      defaultInstance = new OsmAndAddressNameIndexData(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndAddressNameIndexData)
  }
  
  public static final class AddressNameIndexDataAtom extends
      com.google.protobuf.GeneratedMessage {
    // Use AddressNameIndexDataAtom.newBuilder() to construct.
    private AddressNameIndexDataAtom() {
      initFields();
    }
    private AddressNameIndexDataAtom(boolean noInit) {}
    
    private static final AddressNameIndexDataAtom defaultInstance;
    public static AddressNameIndexDataAtom getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public AddressNameIndexDataAtom getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_AddressNameIndexDataAtom_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_AddressNameIndexDataAtom_fieldAccessorTable;
    }
    
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string nameEn = 2;
    public static final int NAMEEN_FIELD_NUMBER = 2;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // required uint32 type = 3;
    public static final int TYPE_FIELD_NUMBER = 3;
    private boolean hasType;
    private int type_ = 0;
    public boolean hasType() { return hasType; }
    public int getType() { return type_; }
    
    // repeated int32 shiftToIndex = 5;
    public static final int SHIFTTOINDEX_FIELD_NUMBER = 5;
    private java.util.List<java.lang.Integer> shiftToIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getShiftToIndexList() {
      return shiftToIndex_;
    }
    public int getShiftToIndexCount() { return shiftToIndex_.size(); }
    public int getShiftToIndex(int index) {
      return shiftToIndex_.get(index);
    }
    
    // repeated int32 shiftToCityIndex = 6;
    public static final int SHIFTTOCITYINDEX_FIELD_NUMBER = 6;
    private java.util.List<java.lang.Integer> shiftToCityIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getShiftToCityIndexList() {
      return shiftToCityIndex_;
    }
    public int getShiftToCityIndexCount() { return shiftToCityIndex_.size(); }
    public int getShiftToCityIndex(int index) {
      return shiftToCityIndex_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasType) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasNameEn()) {
        output.writeString(2, getNameEn());
      }
      if (hasType()) {
        output.writeUInt32(3, getType());
      }
      for (int element : getShiftToIndexList()) {
        output.writeInt32(5, element);
      }
      for (int element : getShiftToCityIndexList()) {
        output.writeInt32(6, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getNameEn());
      }
      if (hasType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getType());
      }
      {
        int dataSize = 0;
        for (int element : getShiftToIndexList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(element);
        }
        size += dataSize;
        size += getShiftToIndexList().size();
      }
      {
        int dataSize = 0;
        for (int element : getShiftToCityIndexList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(element);
        }
        size += dataSize;
        size += getShiftToCityIndexList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom result;
      
      // Construct using net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.shiftToIndex_ != java.util.Collections.EMPTY_LIST) {
          result.shiftToIndex_ =
            java.util.Collections.unmodifiableList(result.shiftToIndex_);
        }
        if (result.shiftToCityIndex_ != java.util.Collections.EMPTY_LIST) {
          result.shiftToCityIndex_ =
            java.util.Collections.unmodifiableList(result.shiftToCityIndex_);
        }
        net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom) {
          return mergeFrom((net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom other) {
        if (other == net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (!other.shiftToIndex_.isEmpty()) {
          if (result.shiftToIndex_.isEmpty()) {
            result.shiftToIndex_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.shiftToIndex_.addAll(other.shiftToIndex_);
        }
        if (!other.shiftToCityIndex_.isEmpty()) {
          if (result.shiftToCityIndex_.isEmpty()) {
            result.shiftToCityIndex_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.shiftToCityIndex_.addAll(other.shiftToCityIndex_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              setNameEn(input.readString());
              break;
            }
            case 24: {
              setType(input.readUInt32());
              break;
            }
            case 40: {
              addShiftToIndex(input.readInt32());
              break;
            }
            case 42: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addShiftToIndex(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 48: {
              addShiftToCityIndex(input.readInt32());
              break;
            }
            case 50: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addShiftToCityIndex(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // optional string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string nameEn = 2;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // required uint32 type = 3;
      public boolean hasType() {
        return result.hasType();
      }
      public int getType() {
        return result.getType();
      }
      public Builder setType(int value) {
        result.hasType = true;
        result.type_ = value;
        return this;
      }
      public Builder clearType() {
        result.hasType = false;
        result.type_ = 0;
        return this;
      }
      
      // repeated int32 shiftToIndex = 5;
      public java.util.List<java.lang.Integer> getShiftToIndexList() {
        return java.util.Collections.unmodifiableList(result.shiftToIndex_);
      }
      public int getShiftToIndexCount() {
        return result.getShiftToIndexCount();
      }
      public int getShiftToIndex(int index) {
        return result.getShiftToIndex(index);
      }
      public Builder setShiftToIndex(int index, int value) {
        result.shiftToIndex_.set(index, value);
        return this;
      }
      public Builder addShiftToIndex(int value) {
        if (result.shiftToIndex_.isEmpty()) {
          result.shiftToIndex_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.shiftToIndex_.add(value);
        return this;
      }
      public Builder addAllShiftToIndex(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.shiftToIndex_.isEmpty()) {
          result.shiftToIndex_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.shiftToIndex_);
        return this;
      }
      public Builder clearShiftToIndex() {
        result.shiftToIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated int32 shiftToCityIndex = 6;
      public java.util.List<java.lang.Integer> getShiftToCityIndexList() {
        return java.util.Collections.unmodifiableList(result.shiftToCityIndex_);
      }
      public int getShiftToCityIndexCount() {
        return result.getShiftToCityIndexCount();
      }
      public int getShiftToCityIndex(int index) {
        return result.getShiftToCityIndex(index);
      }
      public Builder setShiftToCityIndex(int index, int value) {
        result.shiftToCityIndex_.set(index, value);
        return this;
      }
      public Builder addShiftToCityIndex(int value) {
        if (result.shiftToCityIndex_.isEmpty()) {
          result.shiftToCityIndex_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.shiftToCityIndex_.add(value);
        return this;
      }
      public Builder addAllShiftToCityIndex(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.shiftToCityIndex_.isEmpty()) {
          result.shiftToCityIndex_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.shiftToCityIndex_);
        return this;
      }
      public Builder clearShiftToCityIndex() {
        result.shiftToCityIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:AddressNameIndexDataAtom)
    }
    
    static {
      defaultInstance = new AddressNameIndexDataAtom(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:AddressNameIndexDataAtom)
  }
  
  public static final class CityIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use CityIndex.newBuilder() to construct.
    private CityIndex() {
      initFields();
    }
    private CityIndex(boolean noInit) {}
    
    private static final CityIndex defaultInstance;
    public static CityIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public CityIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_CityIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_CityIndex_fieldAccessorTable;
    }
    
    // optional uint32 city_type = 1;
    public static final int CITY_TYPE_FIELD_NUMBER = 1;
    private boolean hasCityType;
    private int cityType_ = 0;
    public boolean hasCityType() { return hasCityType; }
    public int getCityType() { return cityType_; }
    
    // required string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 3;
    public static final int NAME_EN_FIELD_NUMBER = 3;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional uint64 id = 4;
    public static final int ID_FIELD_NUMBER = 4;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // required uint32 x = 5;
    public static final int X_FIELD_NUMBER = 5;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // required uint32 y = 6;
    public static final int Y_FIELD_NUMBER = 6;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // optional fixed32 shiftToCityBlockIndex = 10;
    public static final int SHIFTTOCITYBLOCKINDEX_FIELD_NUMBER = 10;
    private boolean hasShiftToCityBlockIndex;
    private int shiftToCityBlockIndex_ = 0;
    public boolean hasShiftToCityBlockIndex() { return hasShiftToCityBlockIndex; }
    public int getShiftToCityBlockIndex() { return shiftToCityBlockIndex_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasX) return false;
      if (!hasY) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasCityType()) {
        output.writeUInt32(1, getCityType());
      }
      if (hasName()) {
        output.writeString(2, getName());
      }
      if (hasNameEn()) {
        output.writeString(3, getNameEn());
      }
      if (hasId()) {
        output.writeUInt64(4, getId());
      }
      if (hasX()) {
        output.writeUInt32(5, getX());
      }
      if (hasY()) {
        output.writeUInt32(6, getY());
      }
      if (hasShiftToCityBlockIndex()) {
        output.writeFixed32(10, getShiftToCityBlockIndex());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasCityType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getCityType());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getNameEn());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, getId());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(5, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, getY());
      }
      if (hasShiftToCityBlockIndex()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(10, getShiftToCityBlockIndex());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.CityIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.CityIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.CityIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.CityIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.CityIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.CityIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.CityIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.CityIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.CityIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.CityIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.CityIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.CityIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.CityIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.CityIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.CityIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.CityIndex other) {
        if (other == net.osmand.binary.OsmandOdb.CityIndex.getDefaultInstance()) return this;
        if (other.hasCityType()) {
          setCityType(other.getCityType());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (other.hasShiftToCityBlockIndex()) {
          setShiftToCityBlockIndex(other.getShiftToCityBlockIndex());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setCityType(input.readUInt32());
              break;
            }
            case 18: {
              setName(input.readString());
              break;
            }
            case 26: {
              setNameEn(input.readString());
              break;
            }
            case 32: {
              setId(input.readUInt64());
              break;
            }
            case 40: {
              setX(input.readUInt32());
              break;
            }
            case 48: {
              setY(input.readUInt32());
              break;
            }
            case 85: {
              setShiftToCityBlockIndex(input.readFixed32());
              break;
            }
          }
        }
      }
      
      
      // optional uint32 city_type = 1;
      public boolean hasCityType() {
        return result.hasCityType();
      }
      public int getCityType() {
        return result.getCityType();
      }
      public Builder setCityType(int value) {
        result.hasCityType = true;
        result.cityType_ = value;
        return this;
      }
      public Builder clearCityType() {
        result.hasCityType = false;
        result.cityType_ = 0;
        return this;
      }
      
      // required string name = 2;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 3;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional uint64 id = 4;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // required uint32 x = 5;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // required uint32 y = 6;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // optional fixed32 shiftToCityBlockIndex = 10;
      public boolean hasShiftToCityBlockIndex() {
        return result.hasShiftToCityBlockIndex();
      }
      public int getShiftToCityBlockIndex() {
        return result.getShiftToCityBlockIndex();
      }
      public Builder setShiftToCityBlockIndex(int value) {
        result.hasShiftToCityBlockIndex = true;
        result.shiftToCityBlockIndex_ = value;
        return this;
      }
      public Builder clearShiftToCityBlockIndex() {
        result.hasShiftToCityBlockIndex = false;
        result.shiftToCityBlockIndex_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:CityIndex)
    }
    
    static {
      defaultInstance = new CityIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:CityIndex)
  }
  
  public static final class CityBlockIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use CityBlockIndex.newBuilder() to construct.
    private CityBlockIndex() {
      initFields();
    }
    private CityBlockIndex(boolean noInit) {}
    
    private static final CityBlockIndex defaultInstance;
    public static CityBlockIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public CityBlockIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_CityBlockIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_CityBlockIndex_fieldAccessorTable;
    }
    
    // optional fixed32 shiftToCityIndex = 4;
    public static final int SHIFTTOCITYINDEX_FIELD_NUMBER = 4;
    private boolean hasShiftToCityIndex;
    private int shiftToCityIndex_ = 0;
    public boolean hasShiftToCityIndex() { return hasShiftToCityIndex; }
    public int getShiftToCityIndex() { return shiftToCityIndex_; }
    
    // repeated .BuildingIndex buildings = 10;
    public static final int BUILDINGS_FIELD_NUMBER = 10;
    private java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> buildings_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> getBuildingsList() {
      return buildings_;
    }
    public int getBuildingsCount() { return buildings_.size(); }
    public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) {
      return buildings_.get(index);
    }
    
    // repeated .StreetIndex streets = 12;
    public static final int STREETS_FIELD_NUMBER = 12;
    private java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> streets_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> getStreetsList() {
      return streets_;
    }
    public int getStreetsCount() { return streets_.size(); }
    public net.osmand.binary.OsmandOdb.StreetIndex getStreets(int index) {
      return streets_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasShiftToCityIndex()) {
        output.writeFixed32(4, getShiftToCityIndex());
      }
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        output.writeMessage(10, element);
      }
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        output.writeMessage(12, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasShiftToCityIndex()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(4, getShiftToCityIndex());
      }
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, element);
      }
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityBlockIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.CityBlockIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.CityBlockIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.CityBlockIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.CityBlockIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.CityBlockIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.CityBlockIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.CityBlockIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.CityBlockIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.CityBlockIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.CityBlockIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.CityBlockIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.CityBlockIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.buildings_ != java.util.Collections.EMPTY_LIST) {
          result.buildings_ =
            java.util.Collections.unmodifiableList(result.buildings_);
        }
        if (result.streets_ != java.util.Collections.EMPTY_LIST) {
          result.streets_ =
            java.util.Collections.unmodifiableList(result.streets_);
        }
        net.osmand.binary.OsmandOdb.CityBlockIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.CityBlockIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.CityBlockIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.CityBlockIndex other) {
        if (other == net.osmand.binary.OsmandOdb.CityBlockIndex.getDefaultInstance()) return this;
        if (other.hasShiftToCityIndex()) {
          setShiftToCityIndex(other.getShiftToCityIndex());
        }
        if (!other.buildings_.isEmpty()) {
          if (result.buildings_.isEmpty()) {
            result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
          }
          result.buildings_.addAll(other.buildings_);
        }
        if (!other.streets_.isEmpty()) {
          if (result.streets_.isEmpty()) {
            result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
          }
          result.streets_.addAll(other.streets_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 37: {
              setShiftToCityIndex(input.readFixed32());
              break;
            }
            case 82: {
              net.osmand.binary.OsmandOdb.BuildingIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.BuildingIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addBuildings(subBuilder.buildPartial());
              break;
            }
            case 98: {
              net.osmand.binary.OsmandOdb.StreetIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.StreetIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addStreets(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // optional fixed32 shiftToCityIndex = 4;
      public boolean hasShiftToCityIndex() {
        return result.hasShiftToCityIndex();
      }
      public int getShiftToCityIndex() {
        return result.getShiftToCityIndex();
      }
      public Builder setShiftToCityIndex(int value) {
        result.hasShiftToCityIndex = true;
        result.shiftToCityIndex_ = value;
        return this;
      }
      public Builder clearShiftToCityIndex() {
        result.hasShiftToCityIndex = false;
        result.shiftToCityIndex_ = 0;
        return this;
      }
      
      // repeated .BuildingIndex buildings = 10;
      public java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> getBuildingsList() {
        return java.util.Collections.unmodifiableList(result.buildings_);
      }
      public int getBuildingsCount() {
        return result.getBuildingsCount();
      }
      public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) {
        return result.getBuildings(index);
      }
      public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.buildings_.set(index, value);
        return this;
      }
      public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) {
        result.buildings_.set(index, builderForValue.build());
        return this;
      }
      public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        result.buildings_.add(value);
        return this;
      }
      public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) {
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        result.buildings_.add(builderForValue.build());
        return this;
      }
      public Builder addAllBuildings(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.BuildingIndex> values) {
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        super.addAll(values, result.buildings_);
        return this;
      }
      public Builder clearBuildings() {
        result.buildings_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .StreetIndex streets = 12;
      public java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> getStreetsList() {
        return java.util.Collections.unmodifiableList(result.streets_);
      }
      public int getStreetsCount() {
        return result.getStreetsCount();
      }
      public net.osmand.binary.OsmandOdb.StreetIndex getStreets(int index) {
        return result.getStreets(index);
      }
      public Builder setStreets(int index, net.osmand.binary.OsmandOdb.StreetIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.streets_.set(index, value);
        return this;
      }
      public Builder setStreets(int index, net.osmand.binary.OsmandOdb.StreetIndex.Builder builderForValue) {
        result.streets_.set(index, builderForValue.build());
        return this;
      }
      public Builder addStreets(net.osmand.binary.OsmandOdb.StreetIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        result.streets_.add(value);
        return this;
      }
      public Builder addStreets(net.osmand.binary.OsmandOdb.StreetIndex.Builder builderForValue) {
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        result.streets_.add(builderForValue.build());
        return this;
      }
      public Builder addAllStreets(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.StreetIndex> values) {
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        super.addAll(values, result.streets_);
        return this;
      }
      public Builder clearStreets() {
        result.streets_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:CityBlockIndex)
    }
    
    static {
      defaultInstance = new CityBlockIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:CityBlockIndex)
  }
  
  public static final class StreetIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use StreetIndex.newBuilder() to construct.
    private StreetIndex() {
      initFields();
    }
    private StreetIndex(boolean noInit) {}
    
    private static final StreetIndex defaultInstance;
    public static StreetIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public StreetIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_StreetIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_StreetIndex_fieldAccessorTable;
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 2;
    public static final int NAME_EN_FIELD_NUMBER = 2;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // required sint32 x = 3;
    public static final int X_FIELD_NUMBER = 3;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // required sint32 y = 4;
    public static final int Y_FIELD_NUMBER = 4;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // optional uint64 id = 6;
    public static final int ID_FIELD_NUMBER = 6;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // repeated .BuildingIndex buildings = 12;
    public static final int BUILDINGS_FIELD_NUMBER = 12;
    private java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> buildings_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> getBuildingsList() {
      return buildings_;
    }
    public int getBuildingsCount() { return buildings_.size(); }
    public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) {
      return buildings_.get(index);
    }
    
    // repeated .StreetIntersection intersections = 5;
    public static final int INTERSECTIONS_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.StreetIntersection> intersections_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.StreetIntersection> getIntersectionsList() {
      return intersections_;
    }
    public int getIntersectionsCount() { return intersections_.size(); }
    public net.osmand.binary.OsmandOdb.StreetIntersection getIntersections(int index) {
      return intersections_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasX) return false;
      if (!hasY) return false;
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasNameEn()) {
        output.writeString(2, getNameEn());
      }
      if (hasX()) {
        output.writeSInt32(3, getX());
      }
      if (hasY()) {
        output.writeSInt32(4, getY());
      }
      for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) {
        output.writeMessage(5, element);
      }
      if (hasId()) {
        output.writeUInt64(6, getId());
      }
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        output.writeMessage(12, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getNameEn());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(4, getY());
      }
      for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(6, getId());
      }
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.StreetIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.StreetIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.StreetIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.StreetIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.StreetIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.StreetIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.StreetIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StreetIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.StreetIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.StreetIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.StreetIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StreetIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.buildings_ != java.util.Collections.EMPTY_LIST) {
          result.buildings_ =
            java.util.Collections.unmodifiableList(result.buildings_);
        }
        if (result.intersections_ != java.util.Collections.EMPTY_LIST) {
          result.intersections_ =
            java.util.Collections.unmodifiableList(result.intersections_);
        }
        net.osmand.binary.OsmandOdb.StreetIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.StreetIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.StreetIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.StreetIndex other) {
        if (other == net.osmand.binary.OsmandOdb.StreetIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (!other.buildings_.isEmpty()) {
          if (result.buildings_.isEmpty()) {
            result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
          }
          result.buildings_.addAll(other.buildings_);
        }
        if (!other.intersections_.isEmpty()) {
          if (result.intersections_.isEmpty()) {
            result.intersections_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIntersection>();
          }
          result.intersections_.addAll(other.intersections_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              setNameEn(input.readString());
              break;
            }
            case 24: {
              setX(input.readSInt32());
              break;
            }
            case 32: {
              setY(input.readSInt32());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.StreetIntersection.Builder subBuilder = net.osmand.binary.OsmandOdb.StreetIntersection.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addIntersections(subBuilder.buildPartial());
              break;
            }
            case 48: {
              setId(input.readUInt64());
              break;
            }
            case 98: {
              net.osmand.binary.OsmandOdb.BuildingIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.BuildingIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addBuildings(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 2;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // required sint32 x = 3;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // required sint32 y = 4;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // optional uint64 id = 6;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // repeated .BuildingIndex buildings = 12;
      public java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> getBuildingsList() {
        return java.util.Collections.unmodifiableList(result.buildings_);
      }
      public int getBuildingsCount() {
        return result.getBuildingsCount();
      }
      public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) {
        return result.getBuildings(index);
      }
      public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.buildings_.set(index, value);
        return this;
      }
      public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) {
        result.buildings_.set(index, builderForValue.build());
        return this;
      }
      public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        result.buildings_.add(value);
        return this;
      }
      public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) {
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        result.buildings_.add(builderForValue.build());
        return this;
      }
      public Builder addAllBuildings(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.BuildingIndex> values) {
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        super.addAll(values, result.buildings_);
        return this;
      }
      public Builder clearBuildings() {
        result.buildings_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .StreetIntersection intersections = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.StreetIntersection> getIntersectionsList() {
        return java.util.Collections.unmodifiableList(result.intersections_);
      }
      public int getIntersectionsCount() {
        return result.getIntersectionsCount();
      }
      public net.osmand.binary.OsmandOdb.StreetIntersection getIntersections(int index) {
        return result.getIntersections(index);
      }
      public Builder setIntersections(int index, net.osmand.binary.OsmandOdb.StreetIntersection value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.intersections_.set(index, value);
        return this;
      }
      public Builder setIntersections(int index, net.osmand.binary.OsmandOdb.StreetIntersection.Builder builderForValue) {
        result.intersections_.set(index, builderForValue.build());
        return this;
      }
      public Builder addIntersections(net.osmand.binary.OsmandOdb.StreetIntersection value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.intersections_.isEmpty()) {
          result.intersections_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIntersection>();
        }
        result.intersections_.add(value);
        return this;
      }
      public Builder addIntersections(net.osmand.binary.OsmandOdb.StreetIntersection.Builder builderForValue) {
        if (result.intersections_.isEmpty()) {
          result.intersections_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIntersection>();
        }
        result.intersections_.add(builderForValue.build());
        return this;
      }
      public Builder addAllIntersections(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.StreetIntersection> values) {
        if (result.intersections_.isEmpty()) {
          result.intersections_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIntersection>();
        }
        super.addAll(values, result.intersections_);
        return this;
      }
      public Builder clearIntersections() {
        result.intersections_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:StreetIndex)
    }
    
    static {
      defaultInstance = new StreetIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:StreetIndex)
  }
  
  public static final class StreetIntersection extends
      com.google.protobuf.GeneratedMessage {
    // Use StreetIntersection.newBuilder() to construct.
    private StreetIntersection() {
      initFields();
    }
    private StreetIntersection(boolean noInit) {}
    
    private static final StreetIntersection defaultInstance;
    public static StreetIntersection getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public StreetIntersection getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_StreetIntersection_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_StreetIntersection_fieldAccessorTable;
    }
    
    // required string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 3;
    public static final int NAME_EN_FIELD_NUMBER = 3;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // required sint32 intersectedX = 4;
    public static final int INTERSECTEDX_FIELD_NUMBER = 4;
    private boolean hasIntersectedX;
    private int intersectedX_ = 0;
    public boolean hasIntersectedX() { return hasIntersectedX; }
    public int getIntersectedX() { return intersectedX_; }
    
    // required sint32 intersectedY = 5;
    public static final int INTERSECTEDY_FIELD_NUMBER = 5;
    private boolean hasIntersectedY;
    private int intersectedY_ = 0;
    public boolean hasIntersectedY() { return hasIntersectedY; }
    public int getIntersectedY() { return intersectedY_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasIntersectedX) return false;
      if (!hasIntersectedY) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(2, getName());
      }
      if (hasNameEn()) {
        output.writeString(3, getNameEn());
      }
      if (hasIntersectedX()) {
        output.writeSInt32(4, getIntersectedX());
      }
      if (hasIntersectedY()) {
        output.writeSInt32(5, getIntersectedY());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getNameEn());
      }
      if (hasIntersectedX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(4, getIntersectedX());
      }
      if (hasIntersectedY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(5, getIntersectedY());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.StreetIntersection prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.StreetIntersection result;
      
      // Construct using net.osmand.binary.OsmandOdb.StreetIntersection.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.StreetIntersection();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.StreetIntersection internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.StreetIntersection();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.StreetIntersection.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StreetIntersection getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.StreetIntersection.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.StreetIntersection build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.StreetIntersection buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StreetIntersection buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.StreetIntersection returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.StreetIntersection) {
          return mergeFrom((net.osmand.binary.OsmandOdb.StreetIntersection)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.StreetIntersection other) {
        if (other == net.osmand.binary.OsmandOdb.StreetIntersection.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasIntersectedX()) {
          setIntersectedX(other.getIntersectedX());
        }
        if (other.hasIntersectedY()) {
          setIntersectedY(other.getIntersectedY());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 18: {
              setName(input.readString());
              break;
            }
            case 26: {
              setNameEn(input.readString());
              break;
            }
            case 32: {
              setIntersectedX(input.readSInt32());
              break;
            }
            case 40: {
              setIntersectedY(input.readSInt32());
              break;
            }
          }
        }
      }
      
      
      // required string name = 2;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 3;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // required sint32 intersectedX = 4;
      public boolean hasIntersectedX() {
        return result.hasIntersectedX();
      }
      public int getIntersectedX() {
        return result.getIntersectedX();
      }
      public Builder setIntersectedX(int value) {
        result.hasIntersectedX = true;
        result.intersectedX_ = value;
        return this;
      }
      public Builder clearIntersectedX() {
        result.hasIntersectedX = false;
        result.intersectedX_ = 0;
        return this;
      }
      
      // required sint32 intersectedY = 5;
      public boolean hasIntersectedY() {
        return result.hasIntersectedY();
      }
      public int getIntersectedY() {
        return result.getIntersectedY();
      }
      public Builder setIntersectedY(int value) {
        result.hasIntersectedY = true;
        result.intersectedY_ = value;
        return this;
      }
      public Builder clearIntersectedY() {
        result.hasIntersectedY = false;
        result.intersectedY_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:StreetIntersection)
    }
    
    static {
      defaultInstance = new StreetIntersection(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:StreetIntersection)
  }
  
  public static final class BuildingIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use BuildingIndex.newBuilder() to construct.
    private BuildingIndex() {
      initFields();
    }
    private BuildingIndex(boolean noInit) {}
    
    private static final BuildingIndex defaultInstance;
    public static BuildingIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public BuildingIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_BuildingIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_BuildingIndex_fieldAccessorTable;
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 2;
    public static final int NAME_EN_FIELD_NUMBER = 2;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional string name2 = 3;
    public static final int NAME2_FIELD_NUMBER = 3;
    private boolean hasName2;
    private java.lang.String name2_ = "";
    public boolean hasName2() { return hasName2; }
    public java.lang.String getName2() { return name2_; }
    
    // optional string name_en2 = 4;
    public static final int NAME_EN2_FIELD_NUMBER = 4;
    private boolean hasNameEn2;
    private java.lang.String nameEn2_ = "";
    public boolean hasNameEn2() { return hasNameEn2; }
    public java.lang.String getNameEn2() { return nameEn2_; }
    
    // optional sint32 interpolation = 5;
    public static final int INTERPOLATION_FIELD_NUMBER = 5;
    private boolean hasInterpolation;
    private int interpolation_ = 0;
    public boolean hasInterpolation() { return hasInterpolation; }
    public int getInterpolation() { return interpolation_; }
    
    // required sint32 x = 7;
    public static final int X_FIELD_NUMBER = 7;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // required sint32 y = 8;
    public static final int Y_FIELD_NUMBER = 8;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // optional sint32 x2 = 9;
    public static final int X2_FIELD_NUMBER = 9;
    private boolean hasX2;
    private int x2_ = 0;
    public boolean hasX2() { return hasX2; }
    public int getX2() { return x2_; }
    
    // optional sint32 y2 = 10;
    public static final int Y2_FIELD_NUMBER = 10;
    private boolean hasY2;
    private int y2_ = 0;
    public boolean hasY2() { return hasY2; }
    public int getY2() { return y2_; }
    
    // optional uint64 id = 13;
    public static final int ID_FIELD_NUMBER = 13;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // optional string postcode = 14;
    public static final int POSTCODE_FIELD_NUMBER = 14;
    private boolean hasPostcode;
    private java.lang.String postcode_ = "";
    public boolean hasPostcode() { return hasPostcode; }
    public java.lang.String getPostcode() { return postcode_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasX) return false;
      if (!hasY) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasNameEn()) {
        output.writeString(2, getNameEn());
      }
      if (hasName2()) {
        output.writeString(3, getName2());
      }
      if (hasNameEn2()) {
        output.writeString(4, getNameEn2());
      }
      if (hasInterpolation()) {
        output.writeSInt32(5, getInterpolation());
      }
      if (hasX()) {
        output.writeSInt32(7, getX());
      }
      if (hasY()) {
        output.writeSInt32(8, getY());
      }
      if (hasX2()) {
        output.writeSInt32(9, getX2());
      }
      if (hasY2()) {
        output.writeSInt32(10, getY2());
      }
      if (hasId()) {
        output.writeUInt64(13, getId());
      }
      if (hasPostcode()) {
        output.writeString(14, getPostcode());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getNameEn());
      }
      if (hasName2()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getName2());
      }
      if (hasNameEn2()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(4, getNameEn2());
      }
      if (hasInterpolation()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(5, getInterpolation());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(7, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(8, getY());
      }
      if (hasX2()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(9, getX2());
      }
      if (hasY2()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(10, getY2());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(13, getId());
      }
      if (hasPostcode()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(14, getPostcode());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.BuildingIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.BuildingIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.BuildingIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.BuildingIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.BuildingIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.BuildingIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.BuildingIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.BuildingIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.BuildingIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.BuildingIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.BuildingIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.BuildingIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.BuildingIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.BuildingIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.BuildingIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.BuildingIndex other) {
        if (other == net.osmand.binary.OsmandOdb.BuildingIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasName2()) {
          setName2(other.getName2());
        }
        if (other.hasNameEn2()) {
          setNameEn2(other.getNameEn2());
        }
        if (other.hasInterpolation()) {
          setInterpolation(other.getInterpolation());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (other.hasX2()) {
          setX2(other.getX2());
        }
        if (other.hasY2()) {
          setY2(other.getY2());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasPostcode()) {
          setPostcode(other.getPostcode());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              setNameEn(input.readString());
              break;
            }
            case 26: {
              setName2(input.readString());
              break;
            }
            case 34: {
              setNameEn2(input.readString());
              break;
            }
            case 40: {
              setInterpolation(input.readSInt32());
              break;
            }
            case 56: {
              setX(input.readSInt32());
              break;
            }
            case 64: {
              setY(input.readSInt32());
              break;
            }
            case 72: {
              setX2(input.readSInt32());
              break;
            }
            case 80: {
              setY2(input.readSInt32());
              break;
            }
            case 104: {
              setId(input.readUInt64());
              break;
            }
            case 114: {
              setPostcode(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 2;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional string name2 = 3;
      public boolean hasName2() {
        return result.hasName2();
      }
      public java.lang.String getName2() {
        return result.getName2();
      }
      public Builder setName2(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName2 = true;
        result.name2_ = value;
        return this;
      }
      public Builder clearName2() {
        result.hasName2 = false;
        result.name2_ = getDefaultInstance().getName2();
        return this;
      }
      
      // optional string name_en2 = 4;
      public boolean hasNameEn2() {
        return result.hasNameEn2();
      }
      public java.lang.String getNameEn2() {
        return result.getNameEn2();
      }
      public Builder setNameEn2(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn2 = true;
        result.nameEn2_ = value;
        return this;
      }
      public Builder clearNameEn2() {
        result.hasNameEn2 = false;
        result.nameEn2_ = getDefaultInstance().getNameEn2();
        return this;
      }
      
      // optional sint32 interpolation = 5;
      public boolean hasInterpolation() {
        return result.hasInterpolation();
      }
      public int getInterpolation() {
        return result.getInterpolation();
      }
      public Builder setInterpolation(int value) {
        result.hasInterpolation = true;
        result.interpolation_ = value;
        return this;
      }
      public Builder clearInterpolation() {
        result.hasInterpolation = false;
        result.interpolation_ = 0;
        return this;
      }
      
      // required sint32 x = 7;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // required sint32 y = 8;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // optional sint32 x2 = 9;
      public boolean hasX2() {
        return result.hasX2();
      }
      public int getX2() {
        return result.getX2();
      }
      public Builder setX2(int value) {
        result.hasX2 = true;
        result.x2_ = value;
        return this;
      }
      public Builder clearX2() {
        result.hasX2 = false;
        result.x2_ = 0;
        return this;
      }
      
      // optional sint32 y2 = 10;
      public boolean hasY2() {
        return result.hasY2();
      }
      public int getY2() {
        return result.getY2();
      }
      public Builder setY2(int value) {
        result.hasY2 = true;
        result.y2_ = value;
        return this;
      }
      public Builder clearY2() {
        result.hasY2 = false;
        result.y2_ = 0;
        return this;
      }
      
      // optional uint64 id = 13;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // optional string postcode = 14;
      public boolean hasPostcode() {
        return result.hasPostcode();
      }
      public java.lang.String getPostcode() {
        return result.getPostcode();
      }
      public Builder setPostcode(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPostcode = true;
        result.postcode_ = value;
        return this;
      }
      public Builder clearPostcode() {
        result.hasPostcode = false;
        result.postcode_ = getDefaultInstance().getPostcode();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:BuildingIndex)
    }
    
    static {
      defaultInstance = new BuildingIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:BuildingIndex)
  }
  
  public static final class TransportRoutes extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportRoutes.newBuilder() to construct.
    private TransportRoutes() {
      initFields();
    }
    private TransportRoutes(boolean noInit) {}
    
    private static final TransportRoutes defaultInstance;
    public static TransportRoutes getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportRoutes getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRoutes_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRoutes_fieldAccessorTable;
    }
    
    // repeated .TransportRoute routes = 6;
    public static final int ROUTES_FIELD_NUMBER = 6;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportRoute> routes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportRoute> getRoutesList() {
      return routes_;
    }
    public int getRoutesCount() { return routes_.size(); }
    public net.osmand.binary.OsmandOdb.TransportRoute getRoutes(int index) {
      return routes_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) {
        output.writeMessage(6, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRoutes prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportRoutes result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportRoutes();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportRoutes internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportRoutes();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportRoutes.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoutes getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoutes build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportRoutes buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoutes buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.routes_ != java.util.Collections.EMPTY_LIST) {
          result.routes_ =
            java.util.Collections.unmodifiableList(result.routes_);
        }
        net.osmand.binary.OsmandOdb.TransportRoutes returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportRoutes) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportRoutes)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRoutes other) {
        if (other == net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance()) return this;
        if (!other.routes_.isEmpty()) {
          if (result.routes_.isEmpty()) {
            result.routes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRoute>();
          }
          result.routes_.addAll(other.routes_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.TransportRoute.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRoute.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRoutes(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // repeated .TransportRoute routes = 6;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportRoute> getRoutesList() {
        return java.util.Collections.unmodifiableList(result.routes_);
      }
      public int getRoutesCount() {
        return result.getRoutesCount();
      }
      public net.osmand.binary.OsmandOdb.TransportRoute getRoutes(int index) {
        return result.getRoutes(index);
      }
      public Builder setRoutes(int index, net.osmand.binary.OsmandOdb.TransportRoute value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.routes_.set(index, value);
        return this;
      }
      public Builder setRoutes(int index, net.osmand.binary.OsmandOdb.TransportRoute.Builder builderForValue) {
        result.routes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRoutes(net.osmand.binary.OsmandOdb.TransportRoute value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRoute>();
        }
        result.routes_.add(value);
        return this;
      }
      public Builder addRoutes(net.osmand.binary.OsmandOdb.TransportRoute.Builder builderForValue) {
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRoute>();
        }
        result.routes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRoutes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportRoute> values) {
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRoute>();
        }
        super.addAll(values, result.routes_);
        return this;
      }
      public Builder clearRoutes() {
        result.routes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportRoutes)
    }
    
    static {
      defaultInstance = new TransportRoutes(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportRoutes)
  }
  
  public static final class TransportRoute extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportRoute.newBuilder() to construct.
    private TransportRoute() {
      initFields();
    }
    private TransportRoute(boolean noInit) {}
    
    private static final TransportRoute defaultInstance;
    public static TransportRoute getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportRoute getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRoute_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRoute_fieldAccessorTable;
    }
    
    // required uint64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // optional uint32 type = 3;
    public static final int TYPE_FIELD_NUMBER = 3;
    private boolean hasType;
    private int type_ = 0;
    public boolean hasType() { return hasType; }
    public int getType() { return type_; }
    
    // optional uint32 operator = 4;
    public static final int OPERATOR_FIELD_NUMBER = 4;
    private boolean hasOperator;
    private int operator_ = 0;
    public boolean hasOperator() { return hasOperator; }
    public int getOperator() { return operator_; }
    
    // optional string ref = 5;
    public static final int REF_FIELD_NUMBER = 5;
    private boolean hasRef;
    private java.lang.String ref_ = "";
    public boolean hasRef() { return hasRef; }
    public java.lang.String getRef() { return ref_; }
    
    // optional uint32 name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private boolean hasName;
    private int name_ = 0;
    public boolean hasName() { return hasName; }
    public int getName() { return name_; }
    
    // optional uint32 name_en = 7;
    public static final int NAME_EN_FIELD_NUMBER = 7;
    private boolean hasNameEn;
    private int nameEn_ = 0;
    public boolean hasNameEn() { return hasNameEn; }
    public int getNameEn() { return nameEn_; }
    
    // optional uint32 distance = 8;
    public static final int DISTANCE_FIELD_NUMBER = 8;
    private boolean hasDistance;
    private int distance_ = 0;
    public boolean hasDistance() { return hasDistance; }
    public int getDistance() { return distance_; }
    
    // repeated .TransportRouteStop directStops = 15;
    public static final int DIRECTSTOPS_FIELD_NUMBER = 15;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> directStops_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getDirectStopsList() {
      return directStops_;
    }
    public int getDirectStopsCount() { return directStops_.size(); }
    public net.osmand.binary.OsmandOdb.TransportRouteStop getDirectStops(int index) {
      return directStops_.get(index);
    }
    
    // repeated .TransportRouteStop reverseStops = 16;
    public static final int REVERSESTOPS_FIELD_NUMBER = 16;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> reverseStops_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getReverseStopsList() {
      return reverseStops_;
    }
    public int getReverseStopsCount() { return reverseStops_.size(); }
    public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) {
      return reverseStops_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasId) return false;
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasId()) {
        output.writeUInt64(1, getId());
      }
      if (hasType()) {
        output.writeUInt32(3, getType());
      }
      if (hasOperator()) {
        output.writeUInt32(4, getOperator());
      }
      if (hasRef()) {
        output.writeString(5, getRef());
      }
      if (hasName()) {
        output.writeUInt32(6, getName());
      }
      if (hasNameEn()) {
        output.writeUInt32(7, getNameEn());
      }
      if (hasDistance()) {
        output.writeUInt32(8, getDistance());
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) {
        output.writeMessage(15, element);
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) {
        output.writeMessage(16, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, getId());
      }
      if (hasType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getType());
      }
      if (hasOperator()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, getOperator());
      }
      if (hasRef()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(5, getRef());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, getNameEn());
      }
      if (hasDistance()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(8, getDistance());
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, element);
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRoute prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportRoute result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportRoute.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportRoute();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportRoute internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportRoute();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportRoute.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoute getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportRoute.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoute build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportRoute buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoute buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.directStops_ != java.util.Collections.EMPTY_LIST) {
          result.directStops_ =
            java.util.Collections.unmodifiableList(result.directStops_);
        }
        if (result.reverseStops_ != java.util.Collections.EMPTY_LIST) {
          result.reverseStops_ =
            java.util.Collections.unmodifiableList(result.reverseStops_);
        }
        net.osmand.binary.OsmandOdb.TransportRoute returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportRoute) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportRoute)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRoute other) {
        if (other == net.osmand.binary.OsmandOdb.TransportRoute.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasOperator()) {
          setOperator(other.getOperator());
        }
        if (other.hasRef()) {
          setRef(other.getRef());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasDistance()) {
          setDistance(other.getDistance());
        }
        if (!other.directStops_.isEmpty()) {
          if (result.directStops_.isEmpty()) {
            result.directStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
          }
          result.directStops_.addAll(other.directStops_);
        }
        if (!other.reverseStops_.isEmpty()) {
          if (result.reverseStops_.isEmpty()) {
            result.reverseStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
          }
          result.reverseStops_.addAll(other.reverseStops_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setId(input.readUInt64());
              break;
            }
            case 24: {
              setType(input.readUInt32());
              break;
            }
            case 32: {
              setOperator(input.readUInt32());
              break;
            }
            case 42: {
              setRef(input.readString());
              break;
            }
            case 48: {
              setName(input.readUInt32());
              break;
            }
            case 56: {
              setNameEn(input.readUInt32());
              break;
            }
            case 64: {
              setDistance(input.readUInt32());
              break;
            }
            case 122: {
              net.osmand.binary.OsmandOdb.TransportRouteStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addDirectStops(subBuilder.buildPartial());
              break;
            }
            case 130: {
              net.osmand.binary.OsmandOdb.TransportRouteStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addReverseStops(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required uint64 id = 1;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // optional uint32 type = 3;
      public boolean hasType() {
        return result.hasType();
      }
      public int getType() {
        return result.getType();
      }
      public Builder setType(int value) {
        result.hasType = true;
        result.type_ = value;
        return this;
      }
      public Builder clearType() {
        result.hasType = false;
        result.type_ = 0;
        return this;
      }
      
      // optional uint32 operator = 4;
      public boolean hasOperator() {
        return result.hasOperator();
      }
      public int getOperator() {
        return result.getOperator();
      }
      public Builder setOperator(int value) {
        result.hasOperator = true;
        result.operator_ = value;
        return this;
      }
      public Builder clearOperator() {
        result.hasOperator = false;
        result.operator_ = 0;
        return this;
      }
      
      // optional string ref = 5;
      public boolean hasRef() {
        return result.hasRef();
      }
      public java.lang.String getRef() {
        return result.getRef();
      }
      public Builder setRef(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasRef = true;
        result.ref_ = value;
        return this;
      }
      public Builder clearRef() {
        result.hasRef = false;
        result.ref_ = getDefaultInstance().getRef();
        return this;
      }
      
      // optional uint32 name = 6;
      public boolean hasName() {
        return result.hasName();
      }
      public int getName() {
        return result.getName();
      }
      public Builder setName(int value) {
        result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = 0;
        return this;
      }
      
      // optional uint32 name_en = 7;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public int getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(int value) {
        result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = 0;
        return this;
      }
      
      // optional uint32 distance = 8;
      public boolean hasDistance() {
        return result.hasDistance();
      }
      public int getDistance() {
        return result.getDistance();
      }
      public Builder setDistance(int value) {
        result.hasDistance = true;
        result.distance_ = value;
        return this;
      }
      public Builder clearDistance() {
        result.hasDistance = false;
        result.distance_ = 0;
        return this;
      }
      
      // repeated .TransportRouteStop directStops = 15;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getDirectStopsList() {
        return java.util.Collections.unmodifiableList(result.directStops_);
      }
      public int getDirectStopsCount() {
        return result.getDirectStopsCount();
      }
      public net.osmand.binary.OsmandOdb.TransportRouteStop getDirectStops(int index) {
        return result.getDirectStops(index);
      }
      public Builder setDirectStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.directStops_.set(index, value);
        return this;
      }
      public Builder setDirectStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
        result.directStops_.set(index, builderForValue.build());
        return this;
      }
      public Builder addDirectStops(net.osmand.binary.OsmandOdb.TransportRouteStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.directStops_.isEmpty()) {
          result.directStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        result.directStops_.add(value);
        return this;
      }
      public Builder addDirectStops(net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
        if (result.directStops_.isEmpty()) {
          result.directStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        result.directStops_.add(builderForValue.build());
        return this;
      }
      public Builder addAllDirectStops(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportRouteStop> values) {
        if (result.directStops_.isEmpty()) {
          result.directStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        super.addAll(values, result.directStops_);
        return this;
      }
      public Builder clearDirectStops() {
        result.directStops_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .TransportRouteStop reverseStops = 16;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getReverseStopsList() {
        return java.util.Collections.unmodifiableList(result.reverseStops_);
      }
      public int getReverseStopsCount() {
        return result.getReverseStopsCount();
      }
      public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) {
        return result.getReverseStops(index);
      }
      public Builder setReverseStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.reverseStops_.set(index, value);
        return this;
      }
      public Builder setReverseStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
        result.reverseStops_.set(index, builderForValue.build());
        return this;
      }
      public Builder addReverseStops(net.osmand.binary.OsmandOdb.TransportRouteStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.reverseStops_.isEmpty()) {
          result.reverseStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        result.reverseStops_.add(value);
        return this;
      }
      public Builder addReverseStops(net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
        if (result.reverseStops_.isEmpty()) {
          result.reverseStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        result.reverseStops_.add(builderForValue.build());
        return this;
      }
      public Builder addAllReverseStops(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportRouteStop> values) {
        if (result.reverseStops_.isEmpty()) {
          result.reverseStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        super.addAll(values, result.reverseStops_);
        return this;
      }
      public Builder clearReverseStops() {
        result.reverseStops_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportRoute)
    }
    
    static {
      defaultInstance = new TransportRoute(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportRoute)
  }
  
  public static final class TransportRouteStop extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportRouteStop.newBuilder() to construct.
    private TransportRouteStop() {
      initFields();
    }
    private TransportRouteStop(boolean noInit) {}
    
    private static final TransportRouteStop defaultInstance;
    public static TransportRouteStop getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportRouteStop getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRouteStop_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRouteStop_fieldAccessorTable;
    }
    
    // required sint64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // required sint32 dx = 2;
    public static final int DX_FIELD_NUMBER = 2;
    private boolean hasDx;
    private int dx_ = 0;
    public boolean hasDx() { return hasDx; }
    public int getDx() { return dx_; }
    
    // required sint32 dy = 3;
    public static final int DY_FIELD_NUMBER = 3;
    private boolean hasDy;
    private int dy_ = 0;
    public boolean hasDy() { return hasDy; }
    public int getDy() { return dy_; }
    
    // required uint32 name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private boolean hasName;
    private int name_ = 0;
    public boolean hasName() { return hasName; }
    public int getName() { return name_; }
    
    // optional uint32 name_en = 7;
    public static final int NAME_EN_FIELD_NUMBER = 7;
    private boolean hasNameEn;
    private int nameEn_ = 0;
    public boolean hasNameEn() { return hasNameEn; }
    public int getNameEn() { return nameEn_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasId) return false;
      if (!hasDx) return false;
      if (!hasDy) return false;
      if (!hasName) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasId()) {
        output.writeSInt64(1, getId());
      }
      if (hasDx()) {
        output.writeSInt32(2, getDx());
      }
      if (hasDy()) {
        output.writeSInt32(3, getDy());
      }
      if (hasName()) {
        output.writeUInt32(6, getName());
      }
      if (hasNameEn()) {
        output.writeUInt32(7, getNameEn());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(1, getId());
      }
      if (hasDx()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getDx());
      }
      if (hasDy()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getDy());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, getNameEn());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRouteStop prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportRouteStop result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportRouteStop();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportRouteStop internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportRouteStop();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportRouteStop.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRouteStop getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportRouteStop.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportRouteStop build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportRouteStop buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRouteStop buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.TransportRouteStop returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportRouteStop) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportRouteStop)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRouteStop other) {
        if (other == net.osmand.binary.OsmandOdb.TransportRouteStop.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasDx()) {
          setDx(other.getDx());
        }
        if (other.hasDy()) {
          setDy(other.getDy());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setId(input.readSInt64());
              break;
            }
            case 16: {
              setDx(input.readSInt32());
              break;
            }
            case 24: {
              setDy(input.readSInt32());
              break;
            }
            case 48: {
              setName(input.readUInt32());
              break;
            }
            case 56: {
              setNameEn(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required sint64 id = 1;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // required sint32 dx = 2;
      public boolean hasDx() {
        return result.hasDx();
      }
      public int getDx() {
        return result.getDx();
      }
      public Builder setDx(int value) {
        result.hasDx = true;
        result.dx_ = value;
        return this;
      }
      public Builder clearDx() {
        result.hasDx = false;
        result.dx_ = 0;
        return this;
      }
      
      // required sint32 dy = 3;
      public boolean hasDy() {
        return result.hasDy();
      }
      public int getDy() {
        return result.getDy();
      }
      public Builder setDy(int value) {
        result.hasDy = true;
        result.dy_ = value;
        return this;
      }
      public Builder clearDy() {
        result.hasDy = false;
        result.dy_ = 0;
        return this;
      }
      
      // required uint32 name = 6;
      public boolean hasName() {
        return result.hasName();
      }
      public int getName() {
        return result.getName();
      }
      public Builder setName(int value) {
        result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = 0;
        return this;
      }
      
      // optional uint32 name_en = 7;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public int getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(int value) {
        result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportRouteStop)
    }
    
    static {
      defaultInstance = new TransportRouteStop(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportRouteStop)
  }
  
  public static final class TransportStop extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportStop.newBuilder() to construct.
    private TransportStop() {
      initFields();
    }
    private TransportStop(boolean noInit) {}
    
    private static final TransportStop defaultInstance;
    public static TransportStop getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportStop getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportStop_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportStop_fieldAccessorTable;
    }
    
    // required sint32 dx = 1;
    public static final int DX_FIELD_NUMBER = 1;
    private boolean hasDx;
    private int dx_ = 0;
    public boolean hasDx() { return hasDx; }
    public int getDx() { return dx_; }
    
    // required sint32 dy = 2;
    public static final int DY_FIELD_NUMBER = 2;
    private boolean hasDy;
    private int dy_ = 0;
    public boolean hasDy() { return hasDy; }
    public int getDy() { return dy_; }
    
    // required sint64 id = 5;
    public static final int ID_FIELD_NUMBER = 5;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // required uint32 name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private boolean hasName;
    private int name_ = 0;
    public boolean hasName() { return hasName; }
    public int getName() { return name_; }
    
    // optional uint32 name_en = 7;
    public static final int NAME_EN_FIELD_NUMBER = 7;
    private boolean hasNameEn;
    private int nameEn_ = 0;
    public boolean hasNameEn() { return hasNameEn; }
    public int getNameEn() { return nameEn_; }
    
    // repeated uint32 routes = 16;
    public static final int ROUTES_FIELD_NUMBER = 16;
    private java.util.List<java.lang.Integer> routes_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getRoutesList() {
      return routes_;
    }
    public int getRoutesCount() { return routes_.size(); }
    public int getRoutes(int index) {
      return routes_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasDx) return false;
      if (!hasDy) return false;
      if (!hasId) return false;
      if (!hasName) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasDx()) {
        output.writeSInt32(1, getDx());
      }
      if (hasDy()) {
        output.writeSInt32(2, getDy());
      }
      if (hasId()) {
        output.writeSInt64(5, getId());
      }
      if (hasName()) {
        output.writeUInt32(6, getName());
      }
      if (hasNameEn()) {
        output.writeUInt32(7, getNameEn());
      }
      for (int element : getRoutesList()) {
        output.writeUInt32(16, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasDx()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(1, getDx());
      }
      if (hasDy()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getDy());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(5, getId());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, getNameEn());
      }
      {
        int dataSize = 0;
        for (int element : getRoutesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * getRoutesList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportStop prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportStop result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportStop.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportStop();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportStop internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportStop();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportStop.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportStop getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportStop.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportStop build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportStop buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportStop buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.routes_ != java.util.Collections.EMPTY_LIST) {
          result.routes_ =
            java.util.Collections.unmodifiableList(result.routes_);
        }
        net.osmand.binary.OsmandOdb.TransportStop returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportStop) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportStop)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportStop other) {
        if (other == net.osmand.binary.OsmandOdb.TransportStop.getDefaultInstance()) return this;
        if (other.hasDx()) {
          setDx(other.getDx());
        }
        if (other.hasDy()) {
          setDy(other.getDy());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (!other.routes_.isEmpty()) {
          if (result.routes_.isEmpty()) {
            result.routes_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.routes_.addAll(other.routes_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setDx(input.readSInt32());
              break;
            }
            case 16: {
              setDy(input.readSInt32());
              break;
            }
            case 40: {
              setId(input.readSInt64());
              break;
            }
            case 48: {
              setName(input.readUInt32());
              break;
            }
            case 56: {
              setNameEn(input.readUInt32());
              break;
            }
            case 128: {
              addRoutes(input.readUInt32());
              break;
            }
            case 130: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addRoutes(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // required sint32 dx = 1;
      public boolean hasDx() {
        return result.hasDx();
      }
      public int getDx() {
        return result.getDx();
      }
      public Builder setDx(int value) {
        result.hasDx = true;
        result.dx_ = value;
        return this;
      }
      public Builder clearDx() {
        result.hasDx = false;
        result.dx_ = 0;
        return this;
      }
      
      // required sint32 dy = 2;
      public boolean hasDy() {
        return result.hasDy();
      }
      public int getDy() {
        return result.getDy();
      }
      public Builder setDy(int value) {
        result.hasDy = true;
        result.dy_ = value;
        return this;
      }
      public Builder clearDy() {
        result.hasDy = false;
        result.dy_ = 0;
        return this;
      }
      
      // required sint64 id = 5;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // required uint32 name = 6;
      public boolean hasName() {
        return result.hasName();
      }
      public int getName() {
        return result.getName();
      }
      public Builder setName(int value) {
        result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = 0;
        return this;
      }
      
      // optional uint32 name_en = 7;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public int getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(int value) {
        result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = 0;
        return this;
      }
      
      // repeated uint32 routes = 16;
      public java.util.List<java.lang.Integer> getRoutesList() {
        return java.util.Collections.unmodifiableList(result.routes_);
      }
      public int getRoutesCount() {
        return result.getRoutesCount();
      }
      public int getRoutes(int index) {
        return result.getRoutes(index);
      }
      public Builder setRoutes(int index, int value) {
        result.routes_.set(index, value);
        return this;
      }
      public Builder addRoutes(int value) {
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.routes_.add(value);
        return this;
      }
      public Builder addAllRoutes(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.routes_);
        return this;
      }
      public Builder clearRoutes() {
        result.routes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportStop)
    }
    
    static {
      defaultInstance = new TransportStop(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportStop)
  }
  
  public static final class TransportStopsTree extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportStopsTree.newBuilder() to construct.
    private TransportStopsTree() {
      initFields();
    }
    private TransportStopsTree(boolean noInit) {}
    
    private static final TransportStopsTree defaultInstance;
    public static TransportStopsTree getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportStopsTree getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportStopsTree_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportStopsTree_fieldAccessorTable;
    }
    
    // required sint32 left = 1;
    public static final int LEFT_FIELD_NUMBER = 1;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required sint32 right = 2;
    public static final int RIGHT_FIELD_NUMBER = 2;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required sint32 top = 3;
    public static final int TOP_FIELD_NUMBER = 3;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required sint32 bottom = 4;
    public static final int BOTTOM_FIELD_NUMBER = 4;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    // repeated .TransportStopsTree subtrees = 7;
    public static final int SUBTREES_FIELD_NUMBER = 7;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportStopsTree> subtrees_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportStopsTree> getSubtreesList() {
      return subtrees_;
    }
    public int getSubtreesCount() { return subtrees_.size(); }
    public net.osmand.binary.OsmandOdb.TransportStopsTree getSubtrees(int index) {
      return subtrees_.get(index);
    }
    
    // repeated .TransportStop leafs = 8;
    public static final int LEAFS_FIELD_NUMBER = 8;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportStop> leafs_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportStop> getLeafsList() {
      return leafs_;
    }
    public int getLeafsCount() { return leafs_.size(); }
    public net.osmand.binary.OsmandOdb.TransportStop getLeafs(int index) {
      return leafs_.get(index);
    }
    
    // optional uint64 baseId = 16;
    public static final int BASEID_FIELD_NUMBER = 16;
    private boolean hasBaseId;
    private long baseId_ = 0L;
    public boolean hasBaseId() { return hasBaseId; }
    public long getBaseId() { return baseId_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasLeft()) {
        output.writeSInt32(1, getLeft());
      }
      if (hasRight()) {
        output.writeSInt32(2, getRight());
      }
      if (hasTop()) {
        output.writeSInt32(3, getTop());
      }
      if (hasBottom()) {
        output.writeSInt32(4, getBottom());
      }
      for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) {
        output.writeMessage(7, element);
      }
      for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) {
        output.writeMessage(8, element);
      }
      if (hasBaseId()) {
        output.writeUInt64(16, getBaseId());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(1, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(4, getBottom());
      }
      for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, element);
      }
      for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, element);
      }
      if (hasBaseId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(16, getBaseId());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportStopsTree prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportStopsTree result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportStopsTree();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportStopsTree internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportStopsTree();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportStopsTree.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportStopsTree getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportStopsTree build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportStopsTree buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportStopsTree buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.subtrees_ != java.util.Collections.EMPTY_LIST) {
          result.subtrees_ =
            java.util.Collections.unmodifiableList(result.subtrees_);
        }
        if (result.leafs_ != java.util.Collections.EMPTY_LIST) {
          result.leafs_ =
            java.util.Collections.unmodifiableList(result.leafs_);
        }
        net.osmand.binary.OsmandOdb.TransportStopsTree returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportStopsTree) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportStopsTree)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportStopsTree other) {
        if (other == net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance()) return this;
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        if (!other.subtrees_.isEmpty()) {
          if (result.subtrees_.isEmpty()) {
            result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStopsTree>();
          }
          result.subtrees_.addAll(other.subtrees_);
        }
        if (!other.leafs_.isEmpty()) {
          if (result.leafs_.isEmpty()) {
            result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStop>();
          }
          result.leafs_.addAll(other.leafs_);
        }
        if (other.hasBaseId()) {
          setBaseId(other.getBaseId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setLeft(input.readSInt32());
              break;
            }
            case 16: {
              setRight(input.readSInt32());
              break;
            }
            case 24: {
              setTop(input.readSInt32());
              break;
            }
            case 32: {
              setBottom(input.readSInt32());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.TransportStopsTree.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addSubtrees(subBuilder.buildPartial());
              break;
            }
            case 66: {
              net.osmand.binary.OsmandOdb.TransportStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStop.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addLeafs(subBuilder.buildPartial());
              break;
            }
            case 128: {
              setBaseId(input.readUInt64());
              break;
            }
          }
        }
      }
      
      
      // required sint32 left = 1;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required sint32 right = 2;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required sint32 top = 3;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required sint32 bottom = 4;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // repeated .TransportStopsTree subtrees = 7;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportStopsTree> getSubtreesList() {
        return java.util.Collections.unmodifiableList(result.subtrees_);
      }
      public int getSubtreesCount() {
        return result.getSubtreesCount();
      }
      public net.osmand.binary.OsmandOdb.TransportStopsTree getSubtrees(int index) {
        return result.getSubtrees(index);
      }
      public Builder setSubtrees(int index, net.osmand.binary.OsmandOdb.TransportStopsTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.subtrees_.set(index, value);
        return this;
      }
      public Builder setSubtrees(int index, net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) {
        result.subtrees_.set(index, builderForValue.build());
        return this;
      }
      public Builder addSubtrees(net.osmand.binary.OsmandOdb.TransportStopsTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStopsTree>();
        }
        result.subtrees_.add(value);
        return this;
      }
      public Builder addSubtrees(net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) {
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStopsTree>();
        }
        result.subtrees_.add(builderForValue.build());
        return this;
      }
      public Builder addAllSubtrees(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportStopsTree> values) {
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStopsTree>();
        }
        super.addAll(values, result.subtrees_);
        return this;
      }
      public Builder clearSubtrees() {
        result.subtrees_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .TransportStop leafs = 8;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportStop> getLeafsList() {
        return java.util.Collections.unmodifiableList(result.leafs_);
      }
      public int getLeafsCount() {
        return result.getLeafsCount();
      }
      public net.osmand.binary.OsmandOdb.TransportStop getLeafs(int index) {
        return result.getLeafs(index);
      }
      public Builder setLeafs(int index, net.osmand.binary.OsmandOdb.TransportStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.leafs_.set(index, value);
        return this;
      }
      public Builder setLeafs(int index, net.osmand.binary.OsmandOdb.TransportStop.Builder builderForValue) {
        result.leafs_.set(index, builderForValue.build());
        return this;
      }
      public Builder addLeafs(net.osmand.binary.OsmandOdb.TransportStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStop>();
        }
        result.leafs_.add(value);
        return this;
      }
      public Builder addLeafs(net.osmand.binary.OsmandOdb.TransportStop.Builder builderForValue) {
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStop>();
        }
        result.leafs_.add(builderForValue.build());
        return this;
      }
      public Builder addAllLeafs(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportStop> values) {
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStop>();
        }
        super.addAll(values, result.leafs_);
        return this;
      }
      public Builder clearLeafs() {
        result.leafs_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional uint64 baseId = 16;
      public boolean hasBaseId() {
        return result.hasBaseId();
      }
      public long getBaseId() {
        return result.getBaseId();
      }
      public Builder setBaseId(long value) {
        result.hasBaseId = true;
        result.baseId_ = value;
        return this;
      }
      public Builder clearBaseId() {
        result.hasBaseId = false;
        result.baseId_ = 0L;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportStopsTree)
    }
    
    static {
      defaultInstance = new TransportStopsTree(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportStopsTree)
  }
  
  public static final class OsmAndTransportIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndTransportIndex.newBuilder() to construct.
    private OsmAndTransportIndex() {
      initFields();
    }
    private OsmAndTransportIndex(boolean noInit) {}
    
    private static final OsmAndTransportIndex defaultInstance;
    public static OsmAndTransportIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndTransportIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndTransportIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndTransportIndex_fieldAccessorTable;
    }
    
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional .TransportRoutes routes = 3;
    public static final int ROUTES_FIELD_NUMBER = 3;
    private boolean hasRoutes;
    private net.osmand.binary.OsmandOdb.TransportRoutes routes_;
    public boolean hasRoutes() { return hasRoutes; }
    public net.osmand.binary.OsmandOdb.TransportRoutes getRoutes() { return routes_; }
    
    // optional .TransportStopsTree stops = 6;
    public static final int STOPS_FIELD_NUMBER = 6;
    private boolean hasStops;
    private net.osmand.binary.OsmandOdb.TransportStopsTree stops_;
    public boolean hasStops() { return hasStops; }
    public net.osmand.binary.OsmandOdb.TransportStopsTree getStops() { return stops_; }
    
    // required .StringTable stringTable = 9;
    public static final int STRINGTABLE_FIELD_NUMBER = 9;
    private boolean hasStringTable;
    private net.osmand.binary.OsmandOdb.StringTable stringTable_;
    public boolean hasStringTable() { return hasStringTable; }
    public net.osmand.binary.OsmandOdb.StringTable getStringTable() { return stringTable_; }
    
    private void initFields() {
      routes_ = net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance();
      stops_ = net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance();
      stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasStringTable) return false;
      if (hasRoutes()) {
        if (!getRoutes().isInitialized()) return false;
      }
      if (hasStops()) {
        if (!getStops().isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasRoutes()) {
        output.writeMessage(3, getRoutes());
      }
      if (hasStops()) {
        output.writeMessage(6, getStops());
      }
      if (hasStringTable()) {
        output.writeMessage(9, getStringTable());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasRoutes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getRoutes());
      }
      if (hasStops()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getStops());
      }
      if (hasStringTable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, getStringTable());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndTransportIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndTransportIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndTransportIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndTransportIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndTransportIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndTransportIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTransportIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndTransportIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTransportIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.OsmAndTransportIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndTransportIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndTransportIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndTransportIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasRoutes()) {
          mergeRoutes(other.getRoutes());
        }
        if (other.hasStops()) {
          mergeStops(other.getStops());
        }
        if (other.hasStringTable()) {
          mergeStringTable(other.getStringTable());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 26: {
              net.osmand.binary.OsmandOdb.TransportRoutes.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder();
              if (hasRoutes()) {
                subBuilder.mergeFrom(getRoutes());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setRoutes(subBuilder.buildPartial());
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.TransportStopsTree.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder();
              if (hasStops()) {
                subBuilder.mergeFrom(getStops());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setStops(subBuilder.buildPartial());
              break;
            }
            case 74: {
              net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder();
              if (hasStringTable()) {
                subBuilder.mergeFrom(getStringTable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setStringTable(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // optional string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional .TransportRoutes routes = 3;
      public boolean hasRoutes() {
        return result.hasRoutes();
      }
      public net.osmand.binary.OsmandOdb.TransportRoutes getRoutes() {
        return result.getRoutes();
      }
      public Builder setRoutes(net.osmand.binary.OsmandOdb.TransportRoutes value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasRoutes = true;
        result.routes_ = value;
        return this;
      }
      public Builder setRoutes(net.osmand.binary.OsmandOdb.TransportRoutes.Builder builderForValue) {
        result.hasRoutes = true;
        result.routes_ = builderForValue.build();
        return this;
      }
      public Builder mergeRoutes(net.osmand.binary.OsmandOdb.TransportRoutes value) {
        if (result.hasRoutes() &&
            result.routes_ != net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance()) {
          result.routes_ =
            net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder(result.routes_).mergeFrom(value).buildPartial();
        } else {
          result.routes_ = value;
        }
        result.hasRoutes = true;
        return this;
      }
      public Builder clearRoutes() {
        result.hasRoutes = false;
        result.routes_ = net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance();
        return this;
      }
      
      // optional .TransportStopsTree stops = 6;
      public boolean hasStops() {
        return result.hasStops();
      }
      public net.osmand.binary.OsmandOdb.TransportStopsTree getStops() {
        return result.getStops();
      }
      public Builder setStops(net.osmand.binary.OsmandOdb.TransportStopsTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasStops = true;
        result.stops_ = value;
        return this;
      }
      public Builder setStops(net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) {
        result.hasStops = true;
        result.stops_ = builderForValue.build();
        return this;
      }
      public Builder mergeStops(net.osmand.binary.OsmandOdb.TransportStopsTree value) {
        if (result.hasStops() &&
            result.stops_ != net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance()) {
          result.stops_ =
            net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder(result.stops_).mergeFrom(value).buildPartial();
        } else {
          result.stops_ = value;
        }
        result.hasStops = true;
        return this;
      }
      public Builder clearStops() {
        result.hasStops = false;
        result.stops_ = net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance();
        return this;
      }
      
      // required .StringTable stringTable = 9;
      public boolean hasStringTable() {
        return result.hasStringTable();
      }
      public net.osmand.binary.OsmandOdb.StringTable getStringTable() {
        return result.getStringTable();
      }
      public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasStringTable = true;
        result.stringTable_ = value;
        return this;
      }
      public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) {
        result.hasStringTable = true;
        result.stringTable_ = builderForValue.build();
        return this;
      }
      public Builder mergeStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (result.hasStringTable() &&
            result.stringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) {
          result.stringTable_ =
            net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.stringTable_).mergeFrom(value).buildPartial();
        } else {
          result.stringTable_ = value;
        }
        result.hasStringTable = true;
        return this;
      }
      public Builder clearStringTable() {
        result.hasStringTable = false;
        result.stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndTransportIndex)
    }
    
    static {
      defaultInstance = new OsmAndTransportIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndTransportIndex)
  }
  
  public static final class OsmAndPoiIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiIndex.newBuilder() to construct.
    private OsmAndPoiIndex() {
      initFields();
    }
    private OsmAndPoiIndex(boolean noInit) {}
    
    private static final OsmAndPoiIndex defaultInstance;
    public static OsmAndPoiIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiIndex_fieldAccessorTable;
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // required .OsmAndTileBox boundaries = 2;
    public static final int BOUNDARIES_FIELD_NUMBER = 2;
    private boolean hasBoundaries;
    private net.osmand.binary.OsmandOdb.OsmAndTileBox boundaries_;
    public boolean hasBoundaries() { return hasBoundaries; }
    public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { return boundaries_; }
    
    // repeated .OsmAndCategoryTable categoriesTable = 3;
    public static final int CATEGORIESTABLE_FIELD_NUMBER = 3;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndCategoryTable> categoriesTable_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndCategoryTable> getCategoriesTableList() {
      return categoriesTable_;
    }
    public int getCategoriesTableCount() { return categoriesTable_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getCategoriesTable(int index) {
      return categoriesTable_.get(index);
    }
    
    // optional .OsmAndPoiNameIndex nameIndex = 4;
    public static final int NAMEINDEX_FIELD_NUMBER = 4;
    private boolean hasNameIndex;
    private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex nameIndex_;
    public boolean hasNameIndex() { return hasNameIndex; }
    public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getNameIndex() { return nameIndex_; }
    
    // repeated .OsmAndPoiBox boxes = 6;
    public static final int BOXES_FIELD_NUMBER = 6;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> boxes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> getBoxesList() {
      return boxes_;
    }
    public int getBoxesCount() { return boxes_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiBox getBoxes(int index) {
      return boxes_.get(index);
    }
    
    // repeated .OsmAndPoiBoxData poiData = 9;
    public static final int POIDATA_FIELD_NUMBER = 9;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData> poiData_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData> getPoiDataList() {
      return poiData_;
    }
    public int getPoiDataCount() { return poiData_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getPoiData(int index) {
      return poiData_.get(index);
    }
    
    private void initFields() {
      boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
      nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasBoundaries) return false;
      if (!getBoundaries().isInitialized()) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) {
        if (!element.isInitialized()) return false;
      }
      if (hasNameIndex()) {
        if (!getNameIndex().isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasBoundaries()) {
        output.writeMessage(2, getBoundaries());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) {
        output.writeMessage(3, element);
      }
      if (hasNameIndex()) {
        output.writeMessage(4, getNameIndex());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) {
        output.writeMessage(6, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) {
        output.writeMessage(9, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasBoundaries()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getBoundaries());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, element);
      }
      if (hasNameIndex()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getNameIndex());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.categoriesTable_ != java.util.Collections.EMPTY_LIST) {
          result.categoriesTable_ =
            java.util.Collections.unmodifiableList(result.categoriesTable_);
        }
        if (result.boxes_ != java.util.Collections.EMPTY_LIST) {
          result.boxes_ =
            java.util.Collections.unmodifiableList(result.boxes_);
        }
        if (result.poiData_ != java.util.Collections.EMPTY_LIST) {
          result.poiData_ =
            java.util.Collections.unmodifiableList(result.poiData_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasBoundaries()) {
          mergeBoundaries(other.getBoundaries());
        }
        if (!other.categoriesTable_.isEmpty()) {
          if (result.categoriesTable_.isEmpty()) {
            result.categoriesTable_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndCategoryTable>();
          }
          result.categoriesTable_.addAll(other.categoriesTable_);
        }
        if (other.hasNameIndex()) {
          mergeNameIndex(other.getNameIndex());
        }
        if (!other.boxes_.isEmpty()) {
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
          }
          result.boxes_.addAll(other.boxes_);
        }
        if (!other.poiData_.isEmpty()) {
          if (result.poiData_.isEmpty()) {
            result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData>();
          }
          result.poiData_.addAll(other.poiData_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder();
              if (hasBoundaries()) {
                subBuilder.mergeFrom(getBoundaries());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setBoundaries(subBuilder.buildPartial());
              break;
            }
            case 26: {
              net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndCategoryTable.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addCategoriesTable(subBuilder.buildPartial());
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder();
              if (hasNameIndex()) {
                subBuilder.mergeFrom(getNameIndex());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setNameIndex(subBuilder.buildPartial());
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addBoxes(subBuilder.buildPartial());
              break;
            }
            case 74: {
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPoiData(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // required .OsmAndTileBox boundaries = 2;
      public boolean hasBoundaries() {
        return result.hasBoundaries();
      }
      public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() {
        return result.getBoundaries();
      }
      public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasBoundaries = true;
        result.boundaries_ = value;
        return this;
      }
      public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder builderForValue) {
        result.hasBoundaries = true;
        result.boundaries_ = builderForValue.build();
        return this;
      }
      public Builder mergeBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) {
        if (result.hasBoundaries() &&
            result.boundaries_ != net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) {
          result.boundaries_ =
            net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(result.boundaries_).mergeFrom(value).buildPartial();
        } else {
          result.boundaries_ = value;
        }
        result.hasBoundaries = true;
        return this;
      }
      public Builder clearBoundaries() {
        result.hasBoundaries = false;
        result.boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndCategoryTable categoriesTable = 3;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndCategoryTable> getCategoriesTableList() {
        return java.util.Collections.unmodifiableList(result.categoriesTable_);
      }
      public int getCategoriesTableCount() {
        return result.getCategoriesTableCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getCategoriesTable(int index) {
        return result.getCategoriesTable(index);
      }
      public Builder setCategoriesTable(int index, net.osmand.binary.OsmandOdb.OsmAndCategoryTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.categoriesTable_.set(index, value);
        return this;
      }
      public Builder setCategoriesTable(int index, net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder builderForValue) {
        result.categoriesTable_.set(index, builderForValue.build());
        return this;
      }
      public Builder addCategoriesTable(net.osmand.binary.OsmandOdb.OsmAndCategoryTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.categoriesTable_.isEmpty()) {
          result.categoriesTable_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndCategoryTable>();
        }
        result.categoriesTable_.add(value);
        return this;
      }
      public Builder addCategoriesTable(net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder builderForValue) {
        if (result.categoriesTable_.isEmpty()) {
          result.categoriesTable_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndCategoryTable>();
        }
        result.categoriesTable_.add(builderForValue.build());
        return this;
      }
      public Builder addAllCategoriesTable(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndCategoryTable> values) {
        if (result.categoriesTable_.isEmpty()) {
          result.categoriesTable_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndCategoryTable>();
        }
        super.addAll(values, result.categoriesTable_);
        return this;
      }
      public Builder clearCategoriesTable() {
        result.categoriesTable_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .OsmAndPoiNameIndex nameIndex = 4;
      public boolean hasNameIndex() {
        return result.hasNameIndex();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getNameIndex() {
        return result.getNameIndex();
      }
      public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasNameIndex = true;
        result.nameIndex_ = value;
        return this;
      }
      public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder builderForValue) {
        result.hasNameIndex = true;
        result.nameIndex_ = builderForValue.build();
        return this;
      }
      public Builder mergeNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex value) {
        if (result.hasNameIndex() &&
            result.nameIndex_ != net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance()) {
          result.nameIndex_ =
            net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder(result.nameIndex_).mergeFrom(value).buildPartial();
        } else {
          result.nameIndex_ = value;
        }
        result.hasNameIndex = true;
        return this;
      }
      public Builder clearNameIndex() {
        result.hasNameIndex = false;
        result.nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndPoiBox boxes = 6;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> getBoxesList() {
        return java.util.Collections.unmodifiableList(result.boxes_);
      }
      public int getBoxesCount() {
        return result.getBoxesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiBox getBoxes(int index) {
        return result.getBoxes(index);
      }
      public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.boxes_.set(index, value);
        return this;
      }
      public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) {
        result.boxes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.boxes_.isEmpty()) {
          result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        result.boxes_.add(value);
        return this;
      }
      public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) {
        if (result.boxes_.isEmpty()) {
          result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        result.boxes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllBoxes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiBox> values) {
        if (result.boxes_.isEmpty()) {
          result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        super.addAll(values, result.boxes_);
        return this;
      }
      public Builder clearBoxes() {
        result.boxes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndPoiBoxData poiData = 9;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData> getPoiDataList() {
        return java.util.Collections.unmodifiableList(result.poiData_);
      }
      public int getPoiDataCount() {
        return result.getPoiDataCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getPoiData(int index) {
        return result.getPoiData(index);
      }
      public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.poiData_.set(index, value);
        return this;
      }
      public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder builderForValue) {
        result.poiData_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData>();
        }
        result.poiData_.add(value);
        return this;
      }
      public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder builderForValue) {
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData>();
        }
        result.poiData_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPoiData(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiBoxData> values) {
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData>();
        }
        super.addAll(values, result.poiData_);
        return this;
      }
      public Builder clearPoiData() {
        result.poiData_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiIndex)
    }
    
    static {
      defaultInstance = new OsmAndPoiIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiIndex)
  }
  
  public static final class OsmAndPoiNameIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiNameIndex.newBuilder() to construct.
    private OsmAndPoiNameIndex() {
      initFields();
    }
    private OsmAndPoiNameIndex(boolean noInit) {}
    
    private static final OsmAndPoiNameIndex defaultInstance;
    public static OsmAndPoiNameIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiNameIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_fieldAccessorTable;
    }
    
    public static final class OsmAndPoiNameIndexData extends
        com.google.protobuf.GeneratedMessage {
      // Use OsmAndPoiNameIndexData.newBuilder() to construct.
      private OsmAndPoiNameIndexData() {
        initFields();
      }
      private OsmAndPoiNameIndexData(boolean noInit) {}
      
      private static final OsmAndPoiNameIndexData defaultInstance;
      public static OsmAndPoiNameIndexData getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public OsmAndPoiNameIndexData getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_fieldAccessorTable;
      }
      
      // repeated .OsmAndPoiNameIndexDataAtom atoms = 3;
      public static final int ATOMS_FIELD_NUMBER = 3;
      private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom> atoms_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom> getAtomsList() {
        return atoms_;
      }
      public int getAtomsCount() { return atoms_.size(); }
      public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getAtoms(int index) {
        return atoms_.get(index);
      }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom element : getAtomsList()) {
          output.writeMessage(3, element);
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom element : getAtomsList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, element);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.atoms_ != java.util.Collections.EMPTY_LIST) {
            result.atoms_ =
              java.util.Collections.unmodifiableList(result.atoms_);
          }
          net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.getDefaultInstance()) return this;
          if (!other.atoms_.isEmpty()) {
            if (result.atoms_.isEmpty()) {
              result.atoms_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom>();
            }
            result.atoms_.addAll(other.atoms_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 26: {
                net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addAtoms(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // repeated .OsmAndPoiNameIndexDataAtom atoms = 3;
        public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom> getAtomsList() {
          return java.util.Collections.unmodifiableList(result.atoms_);
        }
        public int getAtomsCount() {
          return result.getAtomsCount();
        }
        public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getAtoms(int index) {
          return result.getAtoms(index);
        }
        public Builder setAtoms(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.atoms_.set(index, value);
          return this;
        }
        public Builder setAtoms(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder builderForValue) {
          result.atoms_.set(index, builderForValue.build());
          return this;
        }
        public Builder addAtoms(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.atoms_.isEmpty()) {
            result.atoms_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom>();
          }
          result.atoms_.add(value);
          return this;
        }
        public Builder addAtoms(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder builderForValue) {
          if (result.atoms_.isEmpty()) {
            result.atoms_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom>();
          }
          result.atoms_.add(builderForValue.build());
          return this;
        }
        public Builder addAllAtoms(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom> values) {
          if (result.atoms_.isEmpty()) {
            result.atoms_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom>();
          }
          super.addAll(values, result.atoms_);
          return this;
        }
        public Builder clearAtoms() {
          result.atoms_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndex.OsmAndPoiNameIndexData)
      }
      
      static {
        defaultInstance = new OsmAndPoiNameIndexData(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndex.OsmAndPoiNameIndexData)
    }
    
    // required .IndexedStringTable table = 3;
    public static final int TABLE_FIELD_NUMBER = 3;
    private boolean hasTable;
    private net.osmand.binary.OsmandOdb.IndexedStringTable table_;
    public boolean hasTable() { return hasTable; }
    public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() { return table_; }
    
    // repeated .OsmAndPoiNameIndex.OsmAndPoiNameIndexData data = 5;
    public static final int DATA_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData> data_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData> getDataList() {
      return data_;
    }
    public int getDataCount() { return data_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData getData(int index) {
      return data_.get(index);
    }
    
    private void initFields() {
      table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasTable) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasTable()) {
        output.writeMessage(3, getTable());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData element : getDataList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasTable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getTable());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData element : getDataList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.data_ != java.util.Collections.EMPTY_LIST) {
          result.data_ =
            java.util.Collections.unmodifiableList(result.data_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance()) return this;
        if (other.hasTable()) {
          mergeTable(other.getTable());
        }
        if (!other.data_.isEmpty()) {
          if (result.data_.isEmpty()) {
            result.data_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData>();
          }
          result.data_.addAll(other.data_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 26: {
              net.osmand.binary.OsmandOdb.IndexedStringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder();
              if (hasTable()) {
                subBuilder.mergeFrom(getTable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setTable(subBuilder.buildPartial());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addData(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required .IndexedStringTable table = 3;
      public boolean hasTable() {
        return result.hasTable();
      }
      public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() {
        return result.getTable();
      }
      public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasTable = true;
        result.table_ = value;
        return this;
      }
      public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) {
        result.hasTable = true;
        result.table_ = builderForValue.build();
        return this;
      }
      public Builder mergeTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (result.hasTable() &&
            result.table_ != net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance()) {
          result.table_ =
            net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder(result.table_).mergeFrom(value).buildPartial();
        } else {
          result.table_ = value;
        }
        result.hasTable = true;
        return this;
      }
      public Builder clearTable() {
        result.hasTable = false;
        result.table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndPoiNameIndex.OsmAndPoiNameIndexData data = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData> getDataList() {
        return java.util.Collections.unmodifiableList(result.data_);
      }
      public int getDataCount() {
        return result.getDataCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData getData(int index) {
        return result.getData(index);
      }
      public Builder setData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.data_.set(index, value);
        return this;
      }
      public Builder setData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.Builder builderForValue) {
        result.data_.set(index, builderForValue.build());
        return this;
      }
      public Builder addData(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.data_.isEmpty()) {
          result.data_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData>();
        }
        result.data_.add(value);
        return this;
      }
      public Builder addData(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.Builder builderForValue) {
        if (result.data_.isEmpty()) {
          result.data_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData>();
        }
        result.data_.add(builderForValue.build());
        return this;
      }
      public Builder addAllData(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData> values) {
        if (result.data_.isEmpty()) {
          result.data_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData>();
        }
        super.addAll(values, result.data_);
        return this;
      }
      public Builder clearData() {
        result.data_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndex)
    }
    
    static {
      defaultInstance = new OsmAndPoiNameIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndex)
  }
  
  public static final class OsmAndPoiNameIndexDataAtom extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiNameIndexDataAtom.newBuilder() to construct.
    private OsmAndPoiNameIndexDataAtom() {
      initFields();
    }
    private OsmAndPoiNameIndexDataAtom(boolean noInit) {}
    
    private static final OsmAndPoiNameIndexDataAtom defaultInstance;
    public static OsmAndPoiNameIndexDataAtom getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiNameIndexDataAtom getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndexDataAtom_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable;
    }
    
    // optional uint32 zoom = 2;
    public static final int ZOOM_FIELD_NUMBER = 2;
    private boolean hasZoom;
    private int zoom_ = 0;
    public boolean hasZoom() { return hasZoom; }
    public int getZoom() { return zoom_; }
    
    // optional uint32 x = 3;
    public static final int X_FIELD_NUMBER = 3;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // optional uint32 y = 4;
    public static final int Y_FIELD_NUMBER = 4;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // optional fixed32 shiftTo = 14;
    public static final int SHIFTTO_FIELD_NUMBER = 14;
    private boolean hasShiftTo;
    private int shiftTo_ = 0;
    public boolean hasShiftTo() { return hasShiftTo; }
    public int getShiftTo() { return shiftTo_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasZoom()) {
        output.writeUInt32(2, getZoom());
      }
      if (hasX()) {
        output.writeUInt32(3, getX());
      }
      if (hasY()) {
        output.writeUInt32(4, getY());
      }
      if (hasShiftTo()) {
        output.writeFixed32(14, getShiftTo());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, getZoom());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, getY());
      }
      if (hasShiftTo()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(14, getShiftTo());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDefaultInstance()) return this;
        if (other.hasZoom()) {
          setZoom(other.getZoom());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (other.hasShiftTo()) {
          setShiftTo(other.getShiftTo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 16: {
              setZoom(input.readUInt32());
              break;
            }
            case 24: {
              setX(input.readUInt32());
              break;
            }
            case 32: {
              setY(input.readUInt32());
              break;
            }
            case 117: {
              setShiftTo(input.readFixed32());
              break;
            }
          }
        }
      }
      
      
      // optional uint32 zoom = 2;
      public boolean hasZoom() {
        return result.hasZoom();
      }
      public int getZoom() {
        return result.getZoom();
      }
      public Builder setZoom(int value) {
        result.hasZoom = true;
        result.zoom_ = value;
        return this;
      }
      public Builder clearZoom() {
        result.hasZoom = false;
        result.zoom_ = 0;
        return this;
      }
      
      // optional uint32 x = 3;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // optional uint32 y = 4;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // optional fixed32 shiftTo = 14;
      public boolean hasShiftTo() {
        return result.hasShiftTo();
      }
      public int getShiftTo() {
        return result.getShiftTo();
      }
      public Builder setShiftTo(int value) {
        result.hasShiftTo = true;
        result.shiftTo_ = value;
        return this;
      }
      public Builder clearShiftTo() {
        result.hasShiftTo = false;
        result.shiftTo_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndexDataAtom)
    }
    
    static {
      defaultInstance = new OsmAndPoiNameIndexDataAtom(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndexDataAtom)
  }
  
  public static final class OsmAndCategoryTable extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndCategoryTable.newBuilder() to construct.
    private OsmAndCategoryTable() {
      initFields();
    }
    private OsmAndCategoryTable(boolean noInit) {}
    
    private static final OsmAndCategoryTable defaultInstance;
    public static OsmAndCategoryTable getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndCategoryTable getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndCategoryTable_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndCategoryTable_fieldAccessorTable;
    }
    
    // required string category = 1;
    public static final int CATEGORY_FIELD_NUMBER = 1;
    private boolean hasCategory;
    private java.lang.String category_ = "";
    public boolean hasCategory() { return hasCategory; }
    public java.lang.String getCategory() { return category_; }
    
    // repeated string subcategories = 3;
    public static final int SUBCATEGORIES_FIELD_NUMBER = 3;
    private java.util.List<java.lang.String> subcategories_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getSubcategoriesList() {
      return subcategories_;
    }
    public int getSubcategoriesCount() { return subcategories_.size(); }
    public java.lang.String getSubcategories(int index) {
      return subcategories_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasCategory) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasCategory()) {
        output.writeString(1, getCategory());
      }
      for (java.lang.String element : getSubcategoriesList()) {
        output.writeString(3, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasCategory()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getCategory());
      }
      {
        int dataSize = 0;
        for (java.lang.String element : getSubcategoriesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += getSubcategoriesList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndCategoryTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndCategoryTable result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndCategoryTable.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndCategoryTable();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndCategoryTable internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndCategoryTable();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndCategoryTable build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndCategoryTable buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndCategoryTable buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.subcategories_ != java.util.Collections.EMPTY_LIST) {
          result.subcategories_ =
            java.util.Collections.unmodifiableList(result.subcategories_);
        }
        net.osmand.binary.OsmandOdb.OsmAndCategoryTable returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndCategoryTable) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndCategoryTable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndCategoryTable other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDefaultInstance()) return this;
        if (other.hasCategory()) {
          setCategory(other.getCategory());
        }
        if (!other.subcategories_.isEmpty()) {
          if (result.subcategories_.isEmpty()) {
            result.subcategories_ = new java.util.ArrayList<java.lang.String>();
          }
          result.subcategories_.addAll(other.subcategories_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setCategory(input.readString());
              break;
            }
            case 26: {
              addSubcategories(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required string category = 1;
      public boolean hasCategory() {
        return result.hasCategory();
      }
      public java.lang.String getCategory() {
        return result.getCategory();
      }
      public Builder setCategory(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasCategory = true;
        result.category_ = value;
        return this;
      }
      public Builder clearCategory() {
        result.hasCategory = false;
        result.category_ = getDefaultInstance().getCategory();
        return this;
      }
      
      // repeated string subcategories = 3;
      public java.util.List<java.lang.String> getSubcategoriesList() {
        return java.util.Collections.unmodifiableList(result.subcategories_);
      }
      public int getSubcategoriesCount() {
        return result.getSubcategoriesCount();
      }
      public java.lang.String getSubcategories(int index) {
        return result.getSubcategories(index);
      }
      public Builder setSubcategories(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.subcategories_.set(index, value);
        return this;
      }
      public Builder addSubcategories(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.subcategories_.isEmpty()) {
          result.subcategories_ = new java.util.ArrayList<java.lang.String>();
        }
        result.subcategories_.add(value);
        return this;
      }
      public Builder addAllSubcategories(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.subcategories_.isEmpty()) {
          result.subcategories_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.subcategories_);
        return this;
      }
      public Builder clearSubcategories() {
        result.subcategories_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndCategoryTable)
    }
    
    static {
      defaultInstance = new OsmAndCategoryTable(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndCategoryTable)
  }
  
  public static final class OsmAndPoiBox extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiBox.newBuilder() to construct.
    private OsmAndPoiBox() {
      initFields();
    }
    private OsmAndPoiBox(boolean noInit) {}
    
    private static final OsmAndPoiBox defaultInstance;
    public static OsmAndPoiBox getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiBox getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBox_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBox_fieldAccessorTable;
    }
    
    // required uint32 zoom = 1;
    public static final int ZOOM_FIELD_NUMBER = 1;
    private boolean hasZoom;
    private int zoom_ = 0;
    public boolean hasZoom() { return hasZoom; }
    public int getZoom() { return zoom_; }
    
    // required sint32 left = 2;
    public static final int LEFT_FIELD_NUMBER = 2;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required sint32 top = 3;
    public static final int TOP_FIELD_NUMBER = 3;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // optional .OsmAndPoiCategories categories = 4;
    public static final int CATEGORIES_FIELD_NUMBER = 4;
    private boolean hasCategories;
    private net.osmand.binary.OsmandOdb.OsmAndPoiCategories categories_;
    public boolean hasCategories() { return hasCategories; }
    public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getCategories() { return categories_; }
    
    // repeated .OsmAndPoiBox subBoxes = 10;
    public static final int SUBBOXES_FIELD_NUMBER = 10;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> subBoxes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> getSubBoxesList() {
      return subBoxes_;
    }
    public int getSubBoxesCount() { return subBoxes_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiBox getSubBoxes(int index) {
      return subBoxes_.get(index);
    }
    
    // optional fixed32 shiftToData = 14;
    public static final int SHIFTTODATA_FIELD_NUMBER = 14;
    private boolean hasShiftToData;
    private int shiftToData_ = 0;
    public boolean hasShiftToData() { return hasShiftToData; }
    public int getShiftToData() { return shiftToData_; }
    
    private void initFields() {
      categories_ = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasZoom) return false;
      if (!hasLeft) return false;
      if (!hasTop) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasZoom()) {
        output.writeUInt32(1, getZoom());
      }
      if (hasLeft()) {
        output.writeSInt32(2, getLeft());
      }
      if (hasTop()) {
        output.writeSInt32(3, getTop());
      }
      if (hasCategories()) {
        output.writeMessage(4, getCategories());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) {
        output.writeMessage(10, element);
      }
      if (hasShiftToData()) {
        output.writeFixed32(14, getShiftToData());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getZoom());
      }
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getLeft());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getTop());
      }
      if (hasCategories()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getCategories());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, element);
      }
      if (hasShiftToData()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(14, getShiftToData());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBox prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiBox result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBox();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiBox internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiBox();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBox getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBox build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiBox buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBox buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.subBoxes_ != java.util.Collections.EMPTY_LIST) {
          result.subBoxes_ =
            java.util.Collections.unmodifiableList(result.subBoxes_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiBox returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBox) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBox)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBox other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDefaultInstance()) return this;
        if (other.hasZoom()) {
          setZoom(other.getZoom());
        }
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasCategories()) {
          mergeCategories(other.getCategories());
        }
        if (!other.subBoxes_.isEmpty()) {
          if (result.subBoxes_.isEmpty()) {
            result.subBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
          }
          result.subBoxes_.addAll(other.subBoxes_);
        }
        if (other.hasShiftToData()) {
          setShiftToData(other.getShiftToData());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setZoom(input.readUInt32());
              break;
            }
            case 16: {
              setLeft(input.readSInt32());
              break;
            }
            case 24: {
              setTop(input.readSInt32());
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder();
              if (hasCategories()) {
                subBuilder.mergeFrom(getCategories());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setCategories(subBuilder.buildPartial());
              break;
            }
            case 82: {
              net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addSubBoxes(subBuilder.buildPartial());
              break;
            }
            case 117: {
              setShiftToData(input.readFixed32());
              break;
            }
          }
        }
      }
      
      
      // required uint32 zoom = 1;
      public boolean hasZoom() {
        return result.hasZoom();
      }
      public int getZoom() {
        return result.getZoom();
      }
      public Builder setZoom(int value) {
        result.hasZoom = true;
        result.zoom_ = value;
        return this;
      }
      public Builder clearZoom() {
        result.hasZoom = false;
        result.zoom_ = 0;
        return this;
      }
      
      // required sint32 left = 2;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required sint32 top = 3;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // optional .OsmAndPoiCategories categories = 4;
      public boolean hasCategories() {
        return result.hasCategories();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getCategories() {
        return result.getCategories();
      }
      public Builder setCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasCategories = true;
        result.categories_ = value;
        return this;
      }
      public Builder setCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder builderForValue) {
        result.hasCategories = true;
        result.categories_ = builderForValue.build();
        return this;
      }
      public Builder mergeCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories value) {
        if (result.hasCategories() &&
            result.categories_ != net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance()) {
          result.categories_ =
            net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder(result.categories_).mergeFrom(value).buildPartial();
        } else {
          result.categories_ = value;
        }
        result.hasCategories = true;
        return this;
      }
      public Builder clearCategories() {
        result.hasCategories = false;
        result.categories_ = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndPoiBox subBoxes = 10;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> getSubBoxesList() {
        return java.util.Collections.unmodifiableList(result.subBoxes_);
      }
      public int getSubBoxesCount() {
        return result.getSubBoxesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiBox getSubBoxes(int index) {
        return result.getSubBoxes(index);
      }
      public Builder setSubBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.subBoxes_.set(index, value);
        return this;
      }
      public Builder setSubBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) {
        result.subBoxes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addSubBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.subBoxes_.isEmpty()) {
          result.subBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        result.subBoxes_.add(value);
        return this;
      }
      public Builder addSubBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) {
        if (result.subBoxes_.isEmpty()) {
          result.subBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        result.subBoxes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllSubBoxes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiBox> values) {
        if (result.subBoxes_.isEmpty()) {
          result.subBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        super.addAll(values, result.subBoxes_);
        return this;
      }
      public Builder clearSubBoxes() {
        result.subBoxes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional fixed32 shiftToData = 14;
      public boolean hasShiftToData() {
        return result.hasShiftToData();
      }
      public int getShiftToData() {
        return result.getShiftToData();
      }
      public Builder setShiftToData(int value) {
        result.hasShiftToData = true;
        result.shiftToData_ = value;
        return this;
      }
      public Builder clearShiftToData() {
        result.hasShiftToData = false;
        result.shiftToData_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiBox)
    }
    
    static {
      defaultInstance = new OsmAndPoiBox(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiBox)
  }
  
  public static final class OsmAndPoiCategories extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiCategories.newBuilder() to construct.
    private OsmAndPoiCategories() {
      initFields();
    }
    private OsmAndPoiCategories(boolean noInit) {}
    
    private static final OsmAndPoiCategories defaultInstance;
    public static OsmAndPoiCategories getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiCategories getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiCategories_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiCategories_fieldAccessorTable;
    }
    
    // repeated uint32 categories = 3;
    public static final int CATEGORIES_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> categories_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getCategoriesList() {
      return categories_;
    }
    public int getCategoriesCount() { return categories_.size(); }
    public int getCategories(int index) {
      return categories_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int element : getCategoriesList()) {
        output.writeUInt32(3, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      {
        int dataSize = 0;
        for (int element : getCategoriesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += getCategoriesList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiCategories prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiCategories result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiCategories();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiCategories internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiCategories();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiCategories build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiCategories buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiCategories buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.categories_ != java.util.Collections.EMPTY_LIST) {
          result.categories_ =
            java.util.Collections.unmodifiableList(result.categories_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiCategories returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiCategories) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiCategories)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiCategories other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance()) return this;
        if (!other.categories_.isEmpty()) {
          if (result.categories_.isEmpty()) {
            result.categories_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.categories_.addAll(other.categories_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 24: {
              addCategories(input.readUInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addCategories(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // repeated uint32 categories = 3;
      public java.util.List<java.lang.Integer> getCategoriesList() {
        return java.util.Collections.unmodifiableList(result.categories_);
      }
      public int getCategoriesCount() {
        return result.getCategoriesCount();
      }
      public int getCategories(int index) {
        return result.getCategories(index);
      }
      public Builder setCategories(int index, int value) {
        result.categories_.set(index, value);
        return this;
      }
      public Builder addCategories(int value) {
        if (result.categories_.isEmpty()) {
          result.categories_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.categories_.add(value);
        return this;
      }
      public Builder addAllCategories(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.categories_.isEmpty()) {
          result.categories_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.categories_);
        return this;
      }
      public Builder clearCategories() {
        result.categories_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiCategories)
    }
    
    static {
      defaultInstance = new OsmAndPoiCategories(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiCategories)
  }
  
  public static final class OsmAndPoiBoxData extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiBoxData.newBuilder() to construct.
    private OsmAndPoiBoxData() {
      initFields();
    }
    private OsmAndPoiBoxData(boolean noInit) {}
    
    private static final OsmAndPoiBoxData defaultInstance;
    public static OsmAndPoiBoxData getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiBoxData getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxData_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxData_fieldAccessorTable;
    }
    
    // optional uint32 zoom = 1;
    public static final int ZOOM_FIELD_NUMBER = 1;
    private boolean hasZoom;
    private int zoom_ = 0;
    public boolean hasZoom() { return hasZoom; }
    public int getZoom() { return zoom_; }
    
    // optional uint32 x = 2;
    public static final int X_FIELD_NUMBER = 2;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // optional uint32 y = 3;
    public static final int Y_FIELD_NUMBER = 3;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // repeated .OsmAndPoiBoxDataAtom poiData = 5;
    public static final int POIDATA_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom> poiData_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom> getPoiDataList() {
      return poiData_;
    }
    public int getPoiDataCount() { return poiData_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getPoiData(int index) {
      return poiData_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasZoom()) {
        output.writeUInt32(1, getZoom());
      }
      if (hasX()) {
        output.writeUInt32(2, getX());
      }
      if (hasY()) {
        output.writeUInt32(3, getY());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getZoom());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getY());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiBoxData result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxData();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiBoxData internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxData();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiBoxData buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.poiData_ != java.util.Collections.EMPTY_LIST) {
          result.poiData_ =
            java.util.Collections.unmodifiableList(result.poiData_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiBoxData returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBoxData) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBoxData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDefaultInstance()) return this;
        if (other.hasZoom()) {
          setZoom(other.getZoom());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (!other.poiData_.isEmpty()) {
          if (result.poiData_.isEmpty()) {
            result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom>();
          }
          result.poiData_.addAll(other.poiData_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setZoom(input.readUInt32());
              break;
            }
            case 16: {
              setX(input.readUInt32());
              break;
            }
            case 24: {
              setY(input.readUInt32());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPoiData(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // optional uint32 zoom = 1;
      public boolean hasZoom() {
        return result.hasZoom();
      }
      public int getZoom() {
        return result.getZoom();
      }
      public Builder setZoom(int value) {
        result.hasZoom = true;
        result.zoom_ = value;
        return this;
      }
      public Builder clearZoom() {
        result.hasZoom = false;
        result.zoom_ = 0;
        return this;
      }
      
      // optional uint32 x = 2;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // optional uint32 y = 3;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // repeated .OsmAndPoiBoxDataAtom poiData = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom> getPoiDataList() {
        return java.util.Collections.unmodifiableList(result.poiData_);
      }
      public int getPoiDataCount() {
        return result.getPoiDataCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getPoiData(int index) {
        return result.getPoiData(index);
      }
      public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.poiData_.set(index, value);
        return this;
      }
      public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder builderForValue) {
        result.poiData_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom>();
        }
        result.poiData_.add(value);
        return this;
      }
      public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder builderForValue) {
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom>();
        }
        result.poiData_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPoiData(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom> values) {
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom>();
        }
        super.addAll(values, result.poiData_);
        return this;
      }
      public Builder clearPoiData() {
        result.poiData_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiBoxData)
    }
    
    static {
      defaultInstance = new OsmAndPoiBoxData(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiBoxData)
  }
  
  public static final class OsmAndPoiBoxDataAtom extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiBoxDataAtom.newBuilder() to construct.
    private OsmAndPoiBoxDataAtom() {
      initFields();
    }
    private OsmAndPoiBoxDataAtom(boolean noInit) {}
    
    private static final OsmAndPoiBoxDataAtom defaultInstance;
    public static OsmAndPoiBoxDataAtom getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiBoxDataAtom getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxDataAtom_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxDataAtom_fieldAccessorTable;
    }
    
    // required sint32 dx = 2;
    public static final int DX_FIELD_NUMBER = 2;
    private boolean hasDx;
    private int dx_ = 0;
    public boolean hasDx() { return hasDx; }
    public int getDx() { return dx_; }
    
    // required sint32 dy = 3;
    public static final int DY_FIELD_NUMBER = 3;
    private boolean hasDy;
    private int dy_ = 0;
    public boolean hasDy() { return hasDy; }
    public int getDy() { return dy_; }
    
    // repeated uint32 categories = 4;
    public static final int CATEGORIES_FIELD_NUMBER = 4;
    private java.util.List<java.lang.Integer> categories_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getCategoriesList() {
      return categories_;
    }
    public int getCategoriesCount() { return categories_.size(); }
    public int getCategories(int index) {
      return categories_.get(index);
    }
    
    // optional string name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string nameEn = 7;
    public static final int NAMEEN_FIELD_NUMBER = 7;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional uint64 id = 8;
    public static final int ID_FIELD_NUMBER = 8;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // optional string openingHours = 10;
    public static final int OPENINGHOURS_FIELD_NUMBER = 10;
    private boolean hasOpeningHours;
    private java.lang.String openingHours_ = "";
    public boolean hasOpeningHours() { return hasOpeningHours; }
    public java.lang.String getOpeningHours() { return openingHours_; }
    
    // optional string site = 11;
    public static final int SITE_FIELD_NUMBER = 11;
    private boolean hasSite;
    private java.lang.String site_ = "";
    public boolean hasSite() { return hasSite; }
    public java.lang.String getSite() { return site_; }
    
    // optional string phone = 12;
    public static final int PHONE_FIELD_NUMBER = 12;
    private boolean hasPhone;
    private java.lang.String phone_ = "";
    public boolean hasPhone() { return hasPhone; }
    public java.lang.String getPhone() { return phone_; }
    
    // optional string note = 13;
    public static final int NOTE_FIELD_NUMBER = 13;
    private boolean hasNote;
    private java.lang.String note_ = "";
    public boolean hasNote() { return hasNote; }
    public java.lang.String getNote() { return note_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasDx) return false;
      if (!hasDy) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasDx()) {
        output.writeSInt32(2, getDx());
      }
      if (hasDy()) {
        output.writeSInt32(3, getDy());
      }
      for (int element : getCategoriesList()) {
        output.writeUInt32(4, element);
      }
      if (hasName()) {
        output.writeString(6, getName());
      }
      if (hasNameEn()) {
        output.writeString(7, getNameEn());
      }
      if (hasId()) {
        output.writeUInt64(8, getId());
      }
      if (hasOpeningHours()) {
        output.writeString(10, getOpeningHours());
      }
      if (hasSite()) {
        output.writeString(11, getSite());
      }
      if (hasPhone()) {
        output.writeString(12, getPhone());
      }
      if (hasNote()) {
        output.writeString(13, getNote());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasDx()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getDx());
      }
      if (hasDy()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getDy());
      }
      {
        int dataSize = 0;
        for (int element : getCategoriesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += getCategoriesList().size();
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(6, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(7, getNameEn());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, getId());
      }
      if (hasOpeningHours()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(10, getOpeningHours());
      }
      if (hasSite()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(11, getSite());
      }
      if (hasPhone()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(12, getPhone());
      }
      if (hasNote()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(13, getNote());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.categories_ != java.util.Collections.EMPTY_LIST) {
          result.categories_ =
            java.util.Collections.unmodifiableList(result.categories_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDefaultInstance()) return this;
        if (other.hasDx()) {
          setDx(other.getDx());
        }
        if (other.hasDy()) {
          setDy(other.getDy());
        }
        if (!other.categories_.isEmpty()) {
          if (result.categories_.isEmpty()) {
            result.categories_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.categories_.addAll(other.categories_);
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasOpeningHours()) {
          setOpeningHours(other.getOpeningHours());
        }
        if (other.hasSite()) {
          setSite(other.getSite());
        }
        if (other.hasPhone()) {
          setPhone(other.getPhone());
        }
        if (other.hasNote()) {
          setNote(other.getNote());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 16: {
              setDx(input.readSInt32());
              break;
            }
            case 24: {
              setDy(input.readSInt32());
              break;
            }
            case 32: {
              addCategories(input.readUInt32());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addCategories(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 50: {
              setName(input.readString());
              break;
            }
            case 58: {
              setNameEn(input.readString());
              break;
            }
            case 64: {
              setId(input.readUInt64());
              break;
            }
            case 82: {
              setOpeningHours(input.readString());
              break;
            }
            case 90: {
              setSite(input.readString());
              break;
            }
            case 98: {
              setPhone(input.readString());
              break;
            }
            case 106: {
              setNote(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required sint32 dx = 2;
      public boolean hasDx() {
        return result.hasDx();
      }
      public int getDx() {
        return result.getDx();
      }
      public Builder setDx(int value) {
        result.hasDx = true;
        result.dx_ = value;
        return this;
      }
      public Builder clearDx() {
        result.hasDx = false;
        result.dx_ = 0;
        return this;
      }
      
      // required sint32 dy = 3;
      public boolean hasDy() {
        return result.hasDy();
      }
      public int getDy() {
        return result.getDy();
      }
      public Builder setDy(int value) {
        result.hasDy = true;
        result.dy_ = value;
        return this;
      }
      public Builder clearDy() {
        result.hasDy = false;
        result.dy_ = 0;
        return this;
      }
      
      // repeated uint32 categories = 4;
      public java.util.List<java.lang.Integer> getCategoriesList() {
        return java.util.Collections.unmodifiableList(result.categories_);
      }
      public int getCategoriesCount() {
        return result.getCategoriesCount();
      }
      public int getCategories(int index) {
        return result.getCategories(index);
      }
      public Builder setCategories(int index, int value) {
        result.categories_.set(index, value);
        return this;
      }
      public Builder addCategories(int value) {
        if (result.categories_.isEmpty()) {
          result.categories_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.categories_.add(value);
        return this;
      }
      public Builder addAllCategories(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.categories_.isEmpty()) {
          result.categories_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.categories_);
        return this;
      }
      public Builder clearCategories() {
        result.categories_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional string name = 6;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string nameEn = 7;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional uint64 id = 8;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // optional string openingHours = 10;
      public boolean hasOpeningHours() {
        return result.hasOpeningHours();
      }
      public java.lang.String getOpeningHours() {
        return result.getOpeningHours();
      }
      public Builder setOpeningHours(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasOpeningHours = true;
        result.openingHours_ = value;
        return this;
      }
      public Builder clearOpeningHours() {
        result.hasOpeningHours = false;
        result.openingHours_ = getDefaultInstance().getOpeningHours();
        return this;
      }
      
      // optional string site = 11;
      public boolean hasSite() {
        return result.hasSite();
      }
      public java.lang.String getSite() {
        return result.getSite();
      }
      public Builder setSite(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasSite = true;
        result.site_ = value;
        return this;
      }
      public Builder clearSite() {
        result.hasSite = false;
        result.site_ = getDefaultInstance().getSite();
        return this;
      }
      
      // optional string phone = 12;
      public boolean hasPhone() {
        return result.hasPhone();
      }
      public java.lang.String getPhone() {
        return result.getPhone();
      }
      public Builder setPhone(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPhone = true;
        result.phone_ = value;
        return this;
      }
      public Builder clearPhone() {
        result.hasPhone = false;
        result.phone_ = getDefaultInstance().getPhone();
        return this;
      }
      
      // optional string note = 13;
      public boolean hasNote() {
        return result.hasNote();
      }
      public java.lang.String getNote() {
        return result.getNote();
      }
      public Builder setNote(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNote = true;
        result.note_ = value;
        return this;
      }
      public Builder clearNote() {
        result.hasNote = false;
        result.note_ = getDefaultInstance().getNote();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiBoxDataAtom)
    }
    
    static {
      defaultInstance = new OsmAndPoiBoxDataAtom(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiBoxDataAtom)
  }
  
  public static final class IdTable extends
      com.google.protobuf.GeneratedMessage {
    // Use IdTable.newBuilder() to construct.
    private IdTable() {
      initFields();
    }
    private IdTable(boolean noInit) {}
    
    private static final IdTable defaultInstance;
    public static IdTable getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public IdTable getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_IdTable_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_IdTable_fieldAccessorTable;
    }
    
    // repeated sint64 routeId = 1;
    public static final int ROUTEID_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Long> routeId_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Long> getRouteIdList() {
      return routeId_;
    }
    public int getRouteIdCount() { return routeId_.size(); }
    public long getRouteId(int index) {
      return routeId_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (long element : getRouteIdList()) {
        output.writeSInt64(1, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      {
        int dataSize = 0;
        for (long element : getRouteIdList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeSInt64SizeNoTag(element);
        }
        size += dataSize;
        size += getRouteIdList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.IdTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IdTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.IdTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.IdTable result;
      
      // Construct using net.osmand.binary.OsmandOdb.IdTable.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.IdTable();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.IdTable internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.IdTable();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.IdTable.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.IdTable getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.IdTable build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.IdTable buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.IdTable buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.routeId_ != java.util.Collections.EMPTY_LIST) {
          result.routeId_ =
            java.util.Collections.unmodifiableList(result.routeId_);
        }
        net.osmand.binary.OsmandOdb.IdTable returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.IdTable) {
          return mergeFrom((net.osmand.binary.OsmandOdb.IdTable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.IdTable other) {
        if (other == net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance()) return this;
        if (!other.routeId_.isEmpty()) {
          if (result.routeId_.isEmpty()) {
            result.routeId_ = new java.util.ArrayList<java.lang.Long>();
          }
          result.routeId_.addAll(other.routeId_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              addRouteId(input.readSInt64());
              break;
            }
            case 10: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addRouteId(input.readSInt64());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // repeated sint64 routeId = 1;
      public java.util.List<java.lang.Long> getRouteIdList() {
        return java.util.Collections.unmodifiableList(result.routeId_);
      }
      public int getRouteIdCount() {
        return result.getRouteIdCount();
      }
      public long getRouteId(int index) {
        return result.getRouteId(index);
      }
      public Builder setRouteId(int index, long value) {
        result.routeId_.set(index, value);
        return this;
      }
      public Builder addRouteId(long value) {
        if (result.routeId_.isEmpty()) {
          result.routeId_ = new java.util.ArrayList<java.lang.Long>();
        }
        result.routeId_.add(value);
        return this;
      }
      public Builder addAllRouteId(
          java.lang.Iterable<? extends java.lang.Long> values) {
        if (result.routeId_.isEmpty()) {
          result.routeId_ = new java.util.ArrayList<java.lang.Long>();
        }
        super.addAll(values, result.routeId_);
        return this;
      }
      public Builder clearRouteId() {
        result.routeId_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:IdTable)
    }
    
    static {
      defaultInstance = new IdTable(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:IdTable)
  }
  
  public static final class RestrictionData extends
      com.google.protobuf.GeneratedMessage {
    // Use RestrictionData.newBuilder() to construct.
    private RestrictionData() {
      initFields();
    }
    private RestrictionData(boolean noInit) {}
    
    private static final RestrictionData defaultInstance;
    public static RestrictionData getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public RestrictionData getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_RestrictionData_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_RestrictionData_fieldAccessorTable;
    }
    
    // required int32 type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private boolean hasType;
    private int type_ = 0;
    public boolean hasType() { return hasType; }
    public int getType() { return type_; }
    
    // required int32 from = 2;
    public static final int FROM_FIELD_NUMBER = 2;
    private boolean hasFrom;
    private int from_ = 0;
    public boolean hasFrom() { return hasFrom; }
    public int getFrom() { return from_; }
    
    // required int32 to = 3;
    public static final int TO_FIELD_NUMBER = 3;
    private boolean hasTo;
    private int to_ = 0;
    public boolean hasTo() { return hasTo; }
    public int getTo() { return to_; }
    
    // optional int32 via = 4;
    public static final int VIA_FIELD_NUMBER = 4;
    private boolean hasVia;
    private int via_ = 0;
    public boolean hasVia() { return hasVia; }
    public int getVia() { return via_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasType) return false;
      if (!hasFrom) return false;
      if (!hasTo) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasType()) {
        output.writeInt32(1, getType());
      }
      if (hasFrom()) {
        output.writeInt32(2, getFrom());
      }
      if (hasTo()) {
        output.writeInt32(3, getTo());
      }
      if (hasVia()) {
        output.writeInt32(4, getVia());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, getType());
      }
      if (hasFrom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, getFrom());
      }
      if (hasTo()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, getTo());
      }
      if (hasVia()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, getVia());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RestrictionData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.RestrictionData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.RestrictionData result;
      
      // Construct using net.osmand.binary.OsmandOdb.RestrictionData.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.RestrictionData();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.RestrictionData internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.RestrictionData();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.RestrictionData.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.RestrictionData getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.RestrictionData.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.RestrictionData build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.RestrictionData buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.RestrictionData buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.RestrictionData returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.RestrictionData) {
          return mergeFrom((net.osmand.binary.OsmandOdb.RestrictionData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.RestrictionData other) {
        if (other == net.osmand.binary.OsmandOdb.RestrictionData.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasFrom()) {
          setFrom(other.getFrom());
        }
        if (other.hasTo()) {
          setTo(other.getTo());
        }
        if (other.hasVia()) {
          setVia(other.getVia());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setType(input.readInt32());
              break;
            }
            case 16: {
              setFrom(input.readInt32());
              break;
            }
            case 24: {
              setTo(input.readInt32());
              break;
            }
            case 32: {
              setVia(input.readInt32());
              break;
            }
          }
        }
      }
      
      
      // required int32 type = 1;
      public boolean hasType() {
        return result.hasType();
      }
      public int getType() {
        return result.getType();
      }
      public Builder setType(int value) {
        result.hasType = true;
        result.type_ = value;
        return this;
      }
      public Builder clearType() {
        result.hasType = false;
        result.type_ = 0;
        return this;
      }
      
      // required int32 from = 2;
      public boolean hasFrom() {
        return result.hasFrom();
      }
      public int getFrom() {
        return result.getFrom();
      }
      public Builder setFrom(int value) {
        result.hasFrom = true;
        result.from_ = value;
        return this;
      }
      public Builder clearFrom() {
        result.hasFrom = false;
        result.from_ = 0;
        return this;
      }
      
      // required int32 to = 3;
      public boolean hasTo() {
        return result.hasTo();
      }
      public int getTo() {
        return result.getTo();
      }
      public Builder setTo(int value) {
        result.hasTo = true;
        result.to_ = value;
        return this;
      }
      public Builder clearTo() {
        result.hasTo = false;
        result.to_ = 0;
        return this;
      }
      
      // optional int32 via = 4;
      public boolean hasVia() {
        return result.hasVia();
      }
      public int getVia() {
        return result.getVia();
      }
      public Builder setVia(int value) {
        result.hasVia = true;
        result.via_ = value;
        return this;
      }
      public Builder clearVia() {
        result.hasVia = false;
        result.via_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:RestrictionData)
    }
    
    static {
      defaultInstance = new RestrictionData(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:RestrictionData)
  }
  
  public static final class RouteData extends
      com.google.protobuf.GeneratedMessage {
    // Use RouteData.newBuilder() to construct.
    private RouteData() {
      initFields();
    }
    private RouteData(boolean noInit) {}
    
    private static final RouteData defaultInstance;
    public static RouteData getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public RouteData getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_RouteData_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_RouteData_fieldAccessorTable;
    }
    
    // required bytes points = 1;
    public static final int POINTS_FIELD_NUMBER = 1;
    private boolean hasPoints;
    private com.google.protobuf.ByteString points_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasPoints() { return hasPoints; }
    public com.google.protobuf.ByteString getPoints() { return points_; }
    
    // optional bytes pointTypes = 4;
    public static final int POINTTYPES_FIELD_NUMBER = 4;
    private boolean hasPointTypes;
    private com.google.protobuf.ByteString pointTypes_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasPointTypes() { return hasPointTypes; }
    public com.google.protobuf.ByteString getPointTypes() { return pointTypes_; }
    
    // required bytes types = 7;
    public static final int TYPES_FIELD_NUMBER = 7;
    private boolean hasTypes;
    private com.google.protobuf.ByteString types_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasTypes() { return hasTypes; }
    public com.google.protobuf.ByteString getTypes() { return types_; }
    
    // required int32 routeId = 12;
    public static final int ROUTEID_FIELD_NUMBER = 12;
    private boolean hasRouteId;
    private int routeId_ = 0;
    public boolean hasRouteId() { return hasRouteId; }
    public int getRouteId() { return routeId_; }
    
    // optional bytes stringNames = 14;
    public static final int STRINGNAMES_FIELD_NUMBER = 14;
    private boolean hasStringNames;
    private com.google.protobuf.ByteString stringNames_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasStringNames() { return hasStringNames; }
    public com.google.protobuf.ByteString getStringNames() { return stringNames_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasPoints) return false;
      if (!hasTypes) return false;
      if (!hasRouteId) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasPoints()) {
        output.writeBytes(1, getPoints());
      }
      if (hasPointTypes()) {
        output.writeBytes(4, getPointTypes());
      }
      if (hasTypes()) {
        output.writeBytes(7, getTypes());
      }
      if (hasRouteId()) {
        output.writeInt32(12, getRouteId());
      }
      if (hasStringNames()) {
        output.writeBytes(14, getStringNames());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasPoints()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getPoints());
      }
      if (hasPointTypes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getPointTypes());
      }
      if (hasTypes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getTypes());
      }
      if (hasRouteId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(12, getRouteId());
      }
      if (hasStringNames()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(14, getStringNames());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.RouteData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.RouteData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.RouteData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.RouteData result;
      
      // Construct using net.osmand.binary.OsmandOdb.RouteData.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.RouteData();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.RouteData internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.RouteData();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.RouteData.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.RouteData getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.RouteData.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.RouteData build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.RouteData buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.RouteData buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.RouteData returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.RouteData) {
          return mergeFrom((net.osmand.binary.OsmandOdb.RouteData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.RouteData other) {
        if (other == net.osmand.binary.OsmandOdb.RouteData.getDefaultInstance()) return this;
        if (other.hasPoints()) {
          setPoints(other.getPoints());
        }
        if (other.hasPointTypes()) {
          setPointTypes(other.getPointTypes());
        }
        if (other.hasTypes()) {
          setTypes(other.getTypes());
        }
        if (other.hasRouteId()) {
          setRouteId(other.getRouteId());
        }
        if (other.hasStringNames()) {
          setStringNames(other.getStringNames());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setPoints(input.readBytes());
              break;
            }
            case 34: {
              setPointTypes(input.readBytes());
              break;
            }
            case 58: {
              setTypes(input.readBytes());
              break;
            }
            case 96: {
              setRouteId(input.readInt32());
              break;
            }
            case 114: {
              setStringNames(input.readBytes());
              break;
            }
          }
        }
      }
      
      
      // required bytes points = 1;
      public boolean hasPoints() {
        return result.hasPoints();
      }
      public com.google.protobuf.ByteString getPoints() {
        return result.getPoints();
      }
      public Builder setPoints(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPoints = true;
        result.points_ = value;
        return this;
      }
      public Builder clearPoints() {
        result.hasPoints = false;
        result.points_ = getDefaultInstance().getPoints();
        return this;
      }
      
      // optional bytes pointTypes = 4;
      public boolean hasPointTypes() {
        return result.hasPointTypes();
      }
      public com.google.protobuf.ByteString getPointTypes() {
        return result.getPointTypes();
      }
      public Builder setPointTypes(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPointTypes = true;
        result.pointTypes_ = value;
        return this;
      }
      public Builder clearPointTypes() {
        result.hasPointTypes = false;
        result.pointTypes_ = getDefaultInstance().getPointTypes();
        return this;
      }
      
      // required bytes types = 7;
      public boolean hasTypes() {
        return result.hasTypes();
      }
      public com.google.protobuf.ByteString getTypes() {
        return result.getTypes();
      }
      public Builder setTypes(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasTypes = true;
        result.types_ = value;
        return this;
      }
      public Builder clearTypes() {
        result.hasTypes = false;
        result.types_ = getDefaultInstance().getTypes();
        return this;
      }
      
      // required int32 routeId = 12;
      public boolean hasRouteId() {
        return result.hasRouteId();
      }
      public int getRouteId() {
        return result.getRouteId();
      }
      public Builder setRouteId(int value) {
        result.hasRouteId = true;
        result.routeId_ = value;
        return this;
      }
      public Builder clearRouteId() {
        result.hasRouteId = false;
        result.routeId_ = 0;
        return this;
      }
      
      // optional bytes stringNames = 14;
      public boolean hasStringNames() {
        return result.hasStringNames();
      }
      public com.google.protobuf.ByteString getStringNames() {
        return result.getStringNames();
      }
      public Builder setStringNames(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasStringNames = true;
        result.stringNames_ = value;
        return this;
      }
      public Builder clearStringNames() {
        result.hasStringNames = false;
        result.stringNames_ = getDefaultInstance().getStringNames();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:RouteData)
    }
    
    static {
      defaultInstance = new RouteData(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:RouteData)
  }
  
  public static final class OsmAndRoutingIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndRoutingIndex.newBuilder() to construct.
    private OsmAndRoutingIndex() {
      initFields();
    }
    private OsmAndRoutingIndex(boolean noInit) {}
    
    private static final OsmAndRoutingIndex defaultInstance;
    public static OsmAndRoutingIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndRoutingIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_fieldAccessorTable;
    }
    
    public static final class RouteEncodingRule extends
        com.google.protobuf.GeneratedMessage {
      // Use RouteEncodingRule.newBuilder() to construct.
      private RouteEncodingRule() {
        initFields();
      }
      private RouteEncodingRule(boolean noInit) {}
      
      private static final RouteEncodingRule defaultInstance;
      public static RouteEncodingRule getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public RouteEncodingRule getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteEncodingRule_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteEncodingRule_fieldAccessorTable;
      }
      
      // required string tag = 3;
      public static final int TAG_FIELD_NUMBER = 3;
      private boolean hasTag;
      private java.lang.String tag_ = "";
      public boolean hasTag() { return hasTag; }
      public java.lang.String getTag() { return tag_; }
      
      // required string value = 5;
      public static final int VALUE_FIELD_NUMBER = 5;
      private boolean hasValue;
      private java.lang.String value_ = "";
      public boolean hasValue() { return hasValue; }
      public java.lang.String getValue() { return value_; }
      
      // optional uint32 id = 7;
      public static final int ID_FIELD_NUMBER = 7;
      private boolean hasId;
      private int id_ = 0;
      public boolean hasId() { return hasId; }
      public int getId() { return id_; }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        if (!hasTag) return false;
        if (!hasValue) return false;
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasTag()) {
          output.writeString(3, getTag());
        }
        if (hasValue()) {
          output.writeString(5, getValue());
        }
        if (hasId()) {
          output.writeUInt32(7, getId());
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasTag()) {
          size += com.google.protobuf.CodedOutputStream
            .computeStringSize(3, getTag());
        }
        if (hasValue()) {
          size += com.google.protobuf.CodedOutputStream
            .computeStringSize(5, getValue());
        }
        if (hasId()) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(7, getId());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.getDefaultInstance()) return this;
          if (other.hasTag()) {
            setTag(other.getTag());
          }
          if (other.hasValue()) {
            setValue(other.getValue());
          }
          if (other.hasId()) {
            setId(other.getId());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 26: {
                setTag(input.readString());
                break;
              }
              case 42: {
                setValue(input.readString());
                break;
              }
              case 56: {
                setId(input.readUInt32());
                break;
              }
            }
          }
        }
        
        
        // required string tag = 3;
        public boolean hasTag() {
          return result.hasTag();
        }
        public java.lang.String getTag() {
          return result.getTag();
        }
        public Builder setTag(java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasTag = true;
          result.tag_ = value;
          return this;
        }
        public Builder clearTag() {
          result.hasTag = false;
          result.tag_ = getDefaultInstance().getTag();
          return this;
        }
        
        // required string value = 5;
        public boolean hasValue() {
          return result.hasValue();
        }
        public java.lang.String getValue() {
          return result.getValue();
        }
        public Builder setValue(java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasValue = true;
          result.value_ = value;
          return this;
        }
        public Builder clearValue() {
          result.hasValue = false;
          result.value_ = getDefaultInstance().getValue();
          return this;
        }
        
        // optional uint32 id = 7;
        public boolean hasId() {
          return result.hasId();
        }
        public int getId() {
          return result.getId();
        }
        public Builder setId(int value) {
          result.hasId = true;
          result.id_ = value;
          return this;
        }
        public Builder clearId() {
          result.hasId = false;
          result.id_ = 0;
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteEncodingRule)
      }
      
      static {
        defaultInstance = new RouteEncodingRule(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteEncodingRule)
    }
    
    public static final class RouteDataBox extends
        com.google.protobuf.GeneratedMessage {
      // Use RouteDataBox.newBuilder() to construct.
      private RouteDataBox() {
        initFields();
      }
      private RouteDataBox(boolean noInit) {}
      
      private static final RouteDataBox defaultInstance;
      public static RouteDataBox getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public RouteDataBox getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteDataBox_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteDataBox_fieldAccessorTable;
      }
      
      // required sint32 left = 1;
      public static final int LEFT_FIELD_NUMBER = 1;
      private boolean hasLeft;
      private int left_ = 0;
      public boolean hasLeft() { return hasLeft; }
      public int getLeft() { return left_; }
      
      // required sint32 right = 2;
      public static final int RIGHT_FIELD_NUMBER = 2;
      private boolean hasRight;
      private int right_ = 0;
      public boolean hasRight() { return hasRight; }
      public int getRight() { return right_; }
      
      // required sint32 top = 3;
      public static final int TOP_FIELD_NUMBER = 3;
      private boolean hasTop;
      private int top_ = 0;
      public boolean hasTop() { return hasTop; }
      public int getTop() { return top_; }
      
      // required sint32 bottom = 4;
      public static final int BOTTOM_FIELD_NUMBER = 4;
      private boolean hasBottom;
      private int bottom_ = 0;
      public boolean hasBottom() { return hasBottom; }
      public int getBottom() { return bottom_; }
      
      // optional fixed32 shiftToData = 5;
      public static final int SHIFTTODATA_FIELD_NUMBER = 5;
      private boolean hasShiftToData;
      private int shiftToData_ = 0;
      public boolean hasShiftToData() { return hasShiftToData; }
      public int getShiftToData() { return shiftToData_; }
      
      // repeated .OsmAndRoutingIndex.RouteDataBox boxes = 7;
      public static final int BOXES_FIELD_NUMBER = 7;
      private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> boxes_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> getBoxesList() {
        return boxes_;
      }
      public int getBoxesCount() { return boxes_.size(); }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getBoxes(int index) {
        return boxes_.get(index);
      }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        if (!hasLeft) return false;
        if (!hasRight) return false;
        if (!hasTop) return false;
        if (!hasBottom) return false;
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBoxesList()) {
          if (!element.isInitialized()) return false;
        }
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasLeft()) {
          output.writeSInt32(1, getLeft());
        }
        if (hasRight()) {
          output.writeSInt32(2, getRight());
        }
        if (hasTop()) {
          output.writeSInt32(3, getTop());
        }
        if (hasBottom()) {
          output.writeSInt32(4, getBottom());
        }
        if (hasShiftToData()) {
          output.writeFixed32(5, getShiftToData());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBoxesList()) {
          output.writeMessage(7, element);
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasLeft()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt32Size(1, getLeft());
        }
        if (hasRight()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt32Size(2, getRight());
        }
        if (hasTop()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt32Size(3, getTop());
        }
        if (hasBottom()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt32Size(4, getBottom());
        }
        if (hasShiftToData()) {
          size += com.google.protobuf.CodedOutputStream
            .computeFixed32Size(5, getShiftToData());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBoxesList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(7, element);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.boxes_ != java.util.Collections.EMPTY_LIST) {
            result.boxes_ =
              java.util.Collections.unmodifiableList(result.boxes_);
          }
          net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.getDefaultInstance()) return this;
          if (other.hasLeft()) {
            setLeft(other.getLeft());
          }
          if (other.hasRight()) {
            setRight(other.getRight());
          }
          if (other.hasTop()) {
            setTop(other.getTop());
          }
          if (other.hasBottom()) {
            setBottom(other.getBottom());
          }
          if (other.hasShiftToData()) {
            setShiftToData(other.getShiftToData());
          }
          if (!other.boxes_.isEmpty()) {
            if (result.boxes_.isEmpty()) {
              result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
            }
            result.boxes_.addAll(other.boxes_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 8: {
                setLeft(input.readSInt32());
                break;
              }
              case 16: {
                setRight(input.readSInt32());
                break;
              }
              case 24: {
                setTop(input.readSInt32());
                break;
              }
              case 32: {
                setBottom(input.readSInt32());
                break;
              }
              case 45: {
                setShiftToData(input.readFixed32());
                break;
              }
              case 58: {
                net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addBoxes(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // required sint32 left = 1;
        public boolean hasLeft() {
          return result.hasLeft();
        }
        public int getLeft() {
          return result.getLeft();
        }
        public Builder setLeft(int value) {
          result.hasLeft = true;
          result.left_ = value;
          return this;
        }
        public Builder clearLeft() {
          result.hasLeft = false;
          result.left_ = 0;
          return this;
        }
        
        // required sint32 right = 2;
        public boolean hasRight() {
          return result.hasRight();
        }
        public int getRight() {
          return result.getRight();
        }
        public Builder setRight(int value) {
          result.hasRight = true;
          result.right_ = value;
          return this;
        }
        public Builder clearRight() {
          result.hasRight = false;
          result.right_ = 0;
          return this;
        }
        
        // required sint32 top = 3;
        public boolean hasTop() {
          return result.hasTop();
        }
        public int getTop() {
          return result.getTop();
        }
        public Builder setTop(int value) {
          result.hasTop = true;
          result.top_ = value;
          return this;
        }
        public Builder clearTop() {
          result.hasTop = false;
          result.top_ = 0;
          return this;
        }
        
        // required sint32 bottom = 4;
        public boolean hasBottom() {
          return result.hasBottom();
        }
        public int getBottom() {
          return result.getBottom();
        }
        public Builder setBottom(int value) {
          result.hasBottom = true;
          result.bottom_ = value;
          return this;
        }
        public Builder clearBottom() {
          result.hasBottom = false;
          result.bottom_ = 0;
          return this;
        }
        
        // optional fixed32 shiftToData = 5;
        public boolean hasShiftToData() {
          return result.hasShiftToData();
        }
        public int getShiftToData() {
          return result.getShiftToData();
        }
        public Builder setShiftToData(int value) {
          result.hasShiftToData = true;
          result.shiftToData_ = value;
          return this;
        }
        public Builder clearShiftToData() {
          result.hasShiftToData = false;
          result.shiftToData_ = 0;
          return this;
        }
        
        // repeated .OsmAndRoutingIndex.RouteDataBox boxes = 7;
        public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> getBoxesList() {
          return java.util.Collections.unmodifiableList(result.boxes_);
        }
        public int getBoxesCount() {
          return result.getBoxesCount();
        }
        public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getBoxes(int index) {
          return result.getBoxes(index);
        }
        public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.boxes_.set(index, value);
          return this;
        }
        public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) {
          result.boxes_.set(index, builderForValue.build());
          return this;
        }
        public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
          }
          result.boxes_.add(value);
          return this;
        }
        public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) {
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
          }
          result.boxes_.add(builderForValue.build());
          return this;
        }
        public Builder addAllBoxes(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> values) {
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
          }
          super.addAll(values, result.boxes_);
          return this;
        }
        public Builder clearBoxes() {
          result.boxes_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteDataBox)
      }
      
      static {
        defaultInstance = new RouteDataBox(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteDataBox)
    }
    
    public static final class RouteDataBlock extends
        com.google.protobuf.GeneratedMessage {
      // Use RouteDataBlock.newBuilder() to construct.
      private RouteDataBlock() {
        initFields();
      }
      private RouteDataBlock(boolean noInit) {}
      
      private static final RouteDataBlock defaultInstance;
      public static RouteDataBlock getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public RouteDataBlock getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteDataBlock_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteDataBlock_fieldAccessorTable;
      }
      
      // optional .IdTable idTable = 5;
      public static final int IDTABLE_FIELD_NUMBER = 5;
      private boolean hasIdTable;
      private net.osmand.binary.OsmandOdb.IdTable idTable_;
      public boolean hasIdTable() { return hasIdTable; }
      public net.osmand.binary.OsmandOdb.IdTable getIdTable() { return idTable_; }
      
      // optional .StringTable stringTable = 8;
      public static final int STRINGTABLE_FIELD_NUMBER = 8;
      private boolean hasStringTable;
      private net.osmand.binary.OsmandOdb.StringTable stringTable_;
      public boolean hasStringTable() { return hasStringTable; }
      public net.osmand.binary.OsmandOdb.StringTable getStringTable() { return stringTable_; }
      
      // repeated .RouteData dataObjects = 6;
      public static final int DATAOBJECTS_FIELD_NUMBER = 6;
      private java.util.List<net.osmand.binary.OsmandOdb.RouteData> dataObjects_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.RouteData> getDataObjectsList() {
        return dataObjects_;
      }
      public int getDataObjectsCount() { return dataObjects_.size(); }
      public net.osmand.binary.OsmandOdb.RouteData getDataObjects(int index) {
        return dataObjects_.get(index);
      }
      
      // repeated .RestrictionData restrictions = 7;
      public static final int RESTRICTIONS_FIELD_NUMBER = 7;
      private java.util.List<net.osmand.binary.OsmandOdb.RestrictionData> restrictions_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.RestrictionData> getRestrictionsList() {
        return restrictions_;
      }
      public int getRestrictionsCount() { return restrictions_.size(); }
      public net.osmand.binary.OsmandOdb.RestrictionData getRestrictions(int index) {
        return restrictions_.get(index);
      }
      
      private void initFields() {
        idTable_ = net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance();
        stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
      }
      @Override
	public final boolean isInitialized() {
        for (net.osmand.binary.OsmandOdb.RouteData element : getDataObjectsList()) {
          if (!element.isInitialized()) return false;
        }
        for (net.osmand.binary.OsmandOdb.RestrictionData element : getRestrictionsList()) {
          if (!element.isInitialized()) return false;
        }
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasIdTable()) {
          output.writeMessage(5, getIdTable());
        }
        for (net.osmand.binary.OsmandOdb.RouteData element : getDataObjectsList()) {
          output.writeMessage(6, element);
        }
        for (net.osmand.binary.OsmandOdb.RestrictionData element : getRestrictionsList()) {
          output.writeMessage(7, element);
        }
        if (hasStringTable()) {
          output.writeMessage(8, getStringTable());
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasIdTable()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, getIdTable());
        }
        for (net.osmand.binary.OsmandOdb.RouteData element : getDataObjectsList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(6, element);
        }
        for (net.osmand.binary.OsmandOdb.RestrictionData element : getRestrictionsList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(7, element);
        }
        if (hasStringTable()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(8, getStringTable());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.dataObjects_ != java.util.Collections.EMPTY_LIST) {
            result.dataObjects_ =
              java.util.Collections.unmodifiableList(result.dataObjects_);
          }
          if (result.restrictions_ != java.util.Collections.EMPTY_LIST) {
            result.restrictions_ =
              java.util.Collections.unmodifiableList(result.restrictions_);
          }
          net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.getDefaultInstance()) return this;
          if (other.hasIdTable()) {
            mergeIdTable(other.getIdTable());
          }
          if (other.hasStringTable()) {
            mergeStringTable(other.getStringTable());
          }
          if (!other.dataObjects_.isEmpty()) {
            if (result.dataObjects_.isEmpty()) {
              result.dataObjects_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.RouteData>();
            }
            result.dataObjects_.addAll(other.dataObjects_);
          }
          if (!other.restrictions_.isEmpty()) {
            if (result.restrictions_.isEmpty()) {
              result.restrictions_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.RestrictionData>();
            }
            result.restrictions_.addAll(other.restrictions_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 42: {
                net.osmand.binary.OsmandOdb.IdTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IdTable.newBuilder();
                if (hasIdTable()) {
                  subBuilder.mergeFrom(getIdTable());
                }
                input.readMessage(subBuilder, extensionRegistry);
                setIdTable(subBuilder.buildPartial());
                break;
              }
              case 50: {
                net.osmand.binary.OsmandOdb.RouteData.Builder subBuilder = net.osmand.binary.OsmandOdb.RouteData.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addDataObjects(subBuilder.buildPartial());
                break;
              }
              case 58: {
                net.osmand.binary.OsmandOdb.RestrictionData.Builder subBuilder = net.osmand.binary.OsmandOdb.RestrictionData.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addRestrictions(subBuilder.buildPartial());
                break;
              }
              case 66: {
                net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder();
                if (hasStringTable()) {
                  subBuilder.mergeFrom(getStringTable());
                }
                input.readMessage(subBuilder, extensionRegistry);
                setStringTable(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // optional .IdTable idTable = 5;
        public boolean hasIdTable() {
          return result.hasIdTable();
        }
        public net.osmand.binary.OsmandOdb.IdTable getIdTable() {
          return result.getIdTable();
        }
        public Builder setIdTable(net.osmand.binary.OsmandOdb.IdTable value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.hasIdTable = true;
          result.idTable_ = value;
          return this;
        }
        public Builder setIdTable(net.osmand.binary.OsmandOdb.IdTable.Builder builderForValue) {
          result.hasIdTable = true;
          result.idTable_ = builderForValue.build();
          return this;
        }
        public Builder mergeIdTable(net.osmand.binary.OsmandOdb.IdTable value) {
          if (result.hasIdTable() &&
              result.idTable_ != net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance()) {
            result.idTable_ =
              net.osmand.binary.OsmandOdb.IdTable.newBuilder(result.idTable_).mergeFrom(value).buildPartial();
          } else {
            result.idTable_ = value;
          }
          result.hasIdTable = true;
          return this;
        }
        public Builder clearIdTable() {
          result.hasIdTable = false;
          result.idTable_ = net.osmand.binary.OsmandOdb.IdTable.getDefaultInstance();
          return this;
        }
        
        // optional .StringTable stringTable = 8;
        public boolean hasStringTable() {
          return result.hasStringTable();
        }
        public net.osmand.binary.OsmandOdb.StringTable getStringTable() {
          return result.getStringTable();
        }
        public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.hasStringTable = true;
          result.stringTable_ = value;
          return this;
        }
        public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) {
          result.hasStringTable = true;
          result.stringTable_ = builderForValue.build();
          return this;
        }
        public Builder mergeStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
          if (result.hasStringTable() &&
              result.stringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) {
            result.stringTable_ =
              net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.stringTable_).mergeFrom(value).buildPartial();
          } else {
            result.stringTable_ = value;
          }
          result.hasStringTable = true;
          return this;
        }
        public Builder clearStringTable() {
          result.hasStringTable = false;
          result.stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
          return this;
        }
        
        // repeated .RouteData dataObjects = 6;
        public java.util.List<net.osmand.binary.OsmandOdb.RouteData> getDataObjectsList() {
          return java.util.Collections.unmodifiableList(result.dataObjects_);
        }
        public int getDataObjectsCount() {
          return result.getDataObjectsCount();
        }
        public net.osmand.binary.OsmandOdb.RouteData getDataObjects(int index) {
          return result.getDataObjects(index);
        }
        public Builder setDataObjects(int index, net.osmand.binary.OsmandOdb.RouteData value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.dataObjects_.set(index, value);
          return this;
        }
        public Builder setDataObjects(int index, net.osmand.binary.OsmandOdb.RouteData.Builder builderForValue) {
          result.dataObjects_.set(index, builderForValue.build());
          return this;
        }
        public Builder addDataObjects(net.osmand.binary.OsmandOdb.RouteData value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.dataObjects_.isEmpty()) {
            result.dataObjects_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.RouteData>();
          }
          result.dataObjects_.add(value);
          return this;
        }
        public Builder addDataObjects(net.osmand.binary.OsmandOdb.RouteData.Builder builderForValue) {
          if (result.dataObjects_.isEmpty()) {
            result.dataObjects_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.RouteData>();
          }
          result.dataObjects_.add(builderForValue.build());
          return this;
        }
        public Builder addAllDataObjects(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.RouteData> values) {
          if (result.dataObjects_.isEmpty()) {
            result.dataObjects_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.RouteData>();
          }
          super.addAll(values, result.dataObjects_);
          return this;
        }
        public Builder clearDataObjects() {
          result.dataObjects_ = java.util.Collections.emptyList();
          return this;
        }
        
        // repeated .RestrictionData restrictions = 7;
        public java.util.List<net.osmand.binary.OsmandOdb.RestrictionData> getRestrictionsList() {
          return java.util.Collections.unmodifiableList(result.restrictions_);
        }
        public int getRestrictionsCount() {
          return result.getRestrictionsCount();
        }
        public net.osmand.binary.OsmandOdb.RestrictionData getRestrictions(int index) {
          return result.getRestrictions(index);
        }
        public Builder setRestrictions(int index, net.osmand.binary.OsmandOdb.RestrictionData value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.restrictions_.set(index, value);
          return this;
        }
        public Builder setRestrictions(int index, net.osmand.binary.OsmandOdb.RestrictionData.Builder builderForValue) {
          result.restrictions_.set(index, builderForValue.build());
          return this;
        }
        public Builder addRestrictions(net.osmand.binary.OsmandOdb.RestrictionData value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.restrictions_.isEmpty()) {
            result.restrictions_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.RestrictionData>();
          }
          result.restrictions_.add(value);
          return this;
        }
        public Builder addRestrictions(net.osmand.binary.OsmandOdb.RestrictionData.Builder builderForValue) {
          if (result.restrictions_.isEmpty()) {
            result.restrictions_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.RestrictionData>();
          }
          result.restrictions_.add(builderForValue.build());
          return this;
        }
        public Builder addAllRestrictions(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.RestrictionData> values) {
          if (result.restrictions_.isEmpty()) {
            result.restrictions_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.RestrictionData>();
          }
          super.addAll(values, result.restrictions_);
          return this;
        }
        public Builder clearRestrictions() {
          result.restrictions_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteDataBlock)
      }
      
      static {
        defaultInstance = new RouteDataBlock(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteDataBlock)
    }
    
    public static final class RouteBorderBox extends
        com.google.protobuf.GeneratedMessage {
      // Use RouteBorderBox.newBuilder() to construct.
      private RouteBorderBox() {
        initFields();
      }
      private RouteBorderBox(boolean noInit) {}
      
      private static final RouteBorderBox defaultInstance;
      public static RouteBorderBox getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public RouteBorderBox getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderBox_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderBox_fieldAccessorTable;
      }
      
      // required .OsmAndTileBox boundaries = 1;
      public static final int BOUNDARIES_FIELD_NUMBER = 1;
      private boolean hasBoundaries;
      private net.osmand.binary.OsmandOdb.OsmAndTileBox boundaries_;
      public boolean hasBoundaries() { return hasBoundaries; }
      public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { return boundaries_; }
      
      // optional uint32 tileZoomToSplit = 2;
      public static final int TILEZOOMTOSPLIT_FIELD_NUMBER = 2;
      private boolean hasTileZoomToSplit;
      private int tileZoomToSplit_ = 0;
      public boolean hasTileZoomToSplit() { return hasTileZoomToSplit; }
      public int getTileZoomToSplit() { return tileZoomToSplit_; }
      
      // repeated .OsmAndRoutingIndex.RouteBorderLine borderLines = 6;
      public static final int BORDERLINES_FIELD_NUMBER = 6;
      private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine> borderLines_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine> getBorderLinesList() {
        return borderLines_;
      }
      public int getBorderLinesCount() { return borderLines_.size(); }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine getBorderLines(int index) {
        return borderLines_.get(index);
      }
      
      // repeated .OsmAndRoutingIndex.RouteBorderPointsBlock blocks = 7;
      public static final int BLOCKS_FIELD_NUMBER = 7;
      private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock> blocks_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock> getBlocksList() {
        return blocks_;
      }
      public int getBlocksCount() { return blocks_.size(); }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock getBlocks(int index) {
        return blocks_.get(index);
      }
      
      private void initFields() {
        boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
      }
      @Override
	public final boolean isInitialized() {
        if (!hasBoundaries) return false;
        if (!getBoundaries().isInitialized()) return false;
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine element : getBorderLinesList()) {
          if (!element.isInitialized()) return false;
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock element : getBlocksList()) {
          if (!element.isInitialized()) return false;
        }
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasBoundaries()) {
          output.writeMessage(1, getBoundaries());
        }
        if (hasTileZoomToSplit()) {
          output.writeUInt32(2, getTileZoomToSplit());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine element : getBorderLinesList()) {
          output.writeMessage(6, element);
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock element : getBlocksList()) {
          output.writeMessage(7, element);
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasBoundaries()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getBoundaries());
        }
        if (hasTileZoomToSplit()) {
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32Size(2, getTileZoomToSplit());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine element : getBorderLinesList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(6, element);
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock element : getBlocksList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(7, element);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.borderLines_ != java.util.Collections.EMPTY_LIST) {
            result.borderLines_ =
              java.util.Collections.unmodifiableList(result.borderLines_);
          }
          if (result.blocks_ != java.util.Collections.EMPTY_LIST) {
            result.blocks_ =
              java.util.Collections.unmodifiableList(result.blocks_);
          }
          net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance()) return this;
          if (other.hasBoundaries()) {
            mergeBoundaries(other.getBoundaries());
          }
          if (other.hasTileZoomToSplit()) {
            setTileZoomToSplit(other.getTileZoomToSplit());
          }
          if (!other.borderLines_.isEmpty()) {
            if (result.borderLines_.isEmpty()) {
              result.borderLines_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine>();
            }
            result.borderLines_.addAll(other.borderLines_);
          }
          if (!other.blocks_.isEmpty()) {
            if (result.blocks_.isEmpty()) {
              result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock>();
            }
            result.blocks_.addAll(other.blocks_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 10: {
                net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder();
                if (hasBoundaries()) {
                  subBuilder.mergeFrom(getBoundaries());
                }
                input.readMessage(subBuilder, extensionRegistry);
                setBoundaries(subBuilder.buildPartial());
                break;
              }
              case 16: {
                setTileZoomToSplit(input.readUInt32());
                break;
              }
              case 50: {
                net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addBorderLines(subBuilder.buildPartial());
                break;
              }
              case 58: {
                net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addBlocks(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // required .OsmAndTileBox boundaries = 1;
        public boolean hasBoundaries() {
          return result.hasBoundaries();
        }
        public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() {
          return result.getBoundaries();
        }
        public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.hasBoundaries = true;
          result.boundaries_ = value;
          return this;
        }
        public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder builderForValue) {
          result.hasBoundaries = true;
          result.boundaries_ = builderForValue.build();
          return this;
        }
        public Builder mergeBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) {
          if (result.hasBoundaries() &&
              result.boundaries_ != net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) {
            result.boundaries_ =
              net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(result.boundaries_).mergeFrom(value).buildPartial();
          } else {
            result.boundaries_ = value;
          }
          result.hasBoundaries = true;
          return this;
        }
        public Builder clearBoundaries() {
          result.hasBoundaries = false;
          result.boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
          return this;
        }
        
        // optional uint32 tileZoomToSplit = 2;
        public boolean hasTileZoomToSplit() {
          return result.hasTileZoomToSplit();
        }
        public int getTileZoomToSplit() {
          return result.getTileZoomToSplit();
        }
        public Builder setTileZoomToSplit(int value) {
          result.hasTileZoomToSplit = true;
          result.tileZoomToSplit_ = value;
          return this;
        }
        public Builder clearTileZoomToSplit() {
          result.hasTileZoomToSplit = false;
          result.tileZoomToSplit_ = 0;
          return this;
        }
        
        // repeated .OsmAndRoutingIndex.RouteBorderLine borderLines = 6;
        public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine> getBorderLinesList() {
          return java.util.Collections.unmodifiableList(result.borderLines_);
        }
        public int getBorderLinesCount() {
          return result.getBorderLinesCount();
        }
        public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine getBorderLines(int index) {
          return result.getBorderLines(index);
        }
        public Builder setBorderLines(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.borderLines_.set(index, value);
          return this;
        }
        public Builder setBorderLines(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder builderForValue) {
          result.borderLines_.set(index, builderForValue.build());
          return this;
        }
        public Builder addBorderLines(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.borderLines_.isEmpty()) {
            result.borderLines_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine>();
          }
          result.borderLines_.add(value);
          return this;
        }
        public Builder addBorderLines(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder builderForValue) {
          if (result.borderLines_.isEmpty()) {
            result.borderLines_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine>();
          }
          result.borderLines_.add(builderForValue.build());
          return this;
        }
        public Builder addAllBorderLines(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine> values) {
          if (result.borderLines_.isEmpty()) {
            result.borderLines_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine>();
          }
          super.addAll(values, result.borderLines_);
          return this;
        }
        public Builder clearBorderLines() {
          result.borderLines_ = java.util.Collections.emptyList();
          return this;
        }
        
        // repeated .OsmAndRoutingIndex.RouteBorderPointsBlock blocks = 7;
        public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock> getBlocksList() {
          return java.util.Collections.unmodifiableList(result.blocks_);
        }
        public int getBlocksCount() {
          return result.getBlocksCount();
        }
        public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock getBlocks(int index) {
          return result.getBlocks(index);
        }
        public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.blocks_.set(index, value);
          return this;
        }
        public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.Builder builderForValue) {
          result.blocks_.set(index, builderForValue.build());
          return this;
        }
        public Builder addBlocks(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock>();
          }
          result.blocks_.add(value);
          return this;
        }
        public Builder addBlocks(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.Builder builderForValue) {
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock>();
          }
          result.blocks_.add(builderForValue.build());
          return this;
        }
        public Builder addAllBlocks(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock> values) {
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock>();
          }
          super.addAll(values, result.blocks_);
          return this;
        }
        public Builder clearBlocks() {
          result.blocks_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteBorderBox)
      }
      
      static {
        defaultInstance = new RouteBorderBox(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteBorderBox)
    }
    
    public static final class RouteBorderLine extends
        com.google.protobuf.GeneratedMessage {
      // Use RouteBorderLine.newBuilder() to construct.
      private RouteBorderLine() {
        initFields();
      }
      private RouteBorderLine(boolean noInit) {}
      
      private static final RouteBorderLine defaultInstance;
      public static RouteBorderLine getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public RouteBorderLine getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderLine_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderLine_fieldAccessorTable;
      }
      
      // required int32 x = 1;
      public static final int X_FIELD_NUMBER = 1;
      private boolean hasX;
      private int x_ = 0;
      public boolean hasX() { return hasX; }
      public int getX() { return x_; }
      
      // required int32 y = 2;
      public static final int Y_FIELD_NUMBER = 2;
      private boolean hasY;
      private int y_ = 0;
      public boolean hasY() { return hasY; }
      public int getY() { return y_; }
      
      // optional int32 tox = 3;
      public static final int TOX_FIELD_NUMBER = 3;
      private boolean hasTox;
      private int tox_ = 0;
      public boolean hasTox() { return hasTox; }
      public int getTox() { return tox_; }
      
      // optional int32 toy = 4;
      public static final int TOY_FIELD_NUMBER = 4;
      private boolean hasToy;
      private int toy_ = 0;
      public boolean hasToy() { return hasToy; }
      public int getToy() { return toy_; }
      
      // required fixed32 shiftToPointsBlock = 7;
      public static final int SHIFTTOPOINTSBLOCK_FIELD_NUMBER = 7;
      private boolean hasShiftToPointsBlock;
      private int shiftToPointsBlock_ = 0;
      public boolean hasShiftToPointsBlock() { return hasShiftToPointsBlock; }
      public int getShiftToPointsBlock() { return shiftToPointsBlock_; }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        if (!hasX) return false;
        if (!hasY) return false;
        if (!hasShiftToPointsBlock) return false;
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasX()) {
          output.writeInt32(1, getX());
        }
        if (hasY()) {
          output.writeInt32(2, getY());
        }
        if (hasTox()) {
          output.writeInt32(3, getTox());
        }
        if (hasToy()) {
          output.writeInt32(4, getToy());
        }
        if (hasShiftToPointsBlock()) {
          output.writeFixed32(7, getShiftToPointsBlock());
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasX()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, getX());
        }
        if (hasY()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, getY());
        }
        if (hasTox()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(3, getTox());
        }
        if (hasToy()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(4, getToy());
        }
        if (hasShiftToPointsBlock()) {
          size += com.google.protobuf.CodedOutputStream
            .computeFixed32Size(7, getShiftToPointsBlock());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.getDefaultInstance()) return this;
          if (other.hasX()) {
            setX(other.getX());
          }
          if (other.hasY()) {
            setY(other.getY());
          }
          if (other.hasTox()) {
            setTox(other.getTox());
          }
          if (other.hasToy()) {
            setToy(other.getToy());
          }
          if (other.hasShiftToPointsBlock()) {
            setShiftToPointsBlock(other.getShiftToPointsBlock());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 8: {
                setX(input.readInt32());
                break;
              }
              case 16: {
                setY(input.readInt32());
                break;
              }
              case 24: {
                setTox(input.readInt32());
                break;
              }
              case 32: {
                setToy(input.readInt32());
                break;
              }
              case 61: {
                setShiftToPointsBlock(input.readFixed32());
                break;
              }
            }
          }
        }
        
        
        // required int32 x = 1;
        public boolean hasX() {
          return result.hasX();
        }
        public int getX() {
          return result.getX();
        }
        public Builder setX(int value) {
          result.hasX = true;
          result.x_ = value;
          return this;
        }
        public Builder clearX() {
          result.hasX = false;
          result.x_ = 0;
          return this;
        }
        
        // required int32 y = 2;
        public boolean hasY() {
          return result.hasY();
        }
        public int getY() {
          return result.getY();
        }
        public Builder setY(int value) {
          result.hasY = true;
          result.y_ = value;
          return this;
        }
        public Builder clearY() {
          result.hasY = false;
          result.y_ = 0;
          return this;
        }
        
        // optional int32 tox = 3;
        public boolean hasTox() {
          return result.hasTox();
        }
        public int getTox() {
          return result.getTox();
        }
        public Builder setTox(int value) {
          result.hasTox = true;
          result.tox_ = value;
          return this;
        }
        public Builder clearTox() {
          result.hasTox = false;
          result.tox_ = 0;
          return this;
        }
        
        // optional int32 toy = 4;
        public boolean hasToy() {
          return result.hasToy();
        }
        public int getToy() {
          return result.getToy();
        }
        public Builder setToy(int value) {
          result.hasToy = true;
          result.toy_ = value;
          return this;
        }
        public Builder clearToy() {
          result.hasToy = false;
          result.toy_ = 0;
          return this;
        }
        
        // required fixed32 shiftToPointsBlock = 7;
        public boolean hasShiftToPointsBlock() {
          return result.hasShiftToPointsBlock();
        }
        public int getShiftToPointsBlock() {
          return result.getShiftToPointsBlock();
        }
        public Builder setShiftToPointsBlock(int value) {
          result.hasShiftToPointsBlock = true;
          result.shiftToPointsBlock_ = value;
          return this;
        }
        public Builder clearShiftToPointsBlock() {
          result.hasShiftToPointsBlock = false;
          result.shiftToPointsBlock_ = 0;
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteBorderLine)
      }
      
      static {
        defaultInstance = new RouteBorderLine(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteBorderLine)
    }
    
    public static final class RouteBorderPointsBlock extends
        com.google.protobuf.GeneratedMessage {
      // Use RouteBorderPointsBlock.newBuilder() to construct.
      private RouteBorderPointsBlock() {
        initFields();
      }
      private RouteBorderPointsBlock(boolean noInit) {}
      
      private static final RouteBorderPointsBlock defaultInstance;
      public static RouteBorderPointsBlock getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public RouteBorderPointsBlock getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_fieldAccessorTable;
      }
      
      // required int32 x = 1;
      public static final int X_FIELD_NUMBER = 1;
      private boolean hasX;
      private int x_ = 0;
      public boolean hasX() { return hasX; }
      public int getX() { return x_; }
      
      // required int32 y = 2;
      public static final int Y_FIELD_NUMBER = 2;
      private boolean hasY;
      private int y_ = 0;
      public boolean hasY() { return hasY; }
      public int getY() { return y_; }
      
      // required int64 baseId = 3;
      public static final int BASEID_FIELD_NUMBER = 3;
      private boolean hasBaseId;
      private long baseId_ = 0L;
      public boolean hasBaseId() { return hasBaseId; }
      public long getBaseId() { return baseId_; }
      
      // repeated .OsmAndRoutingIndex.RouteBorderPoint points = 5;
      public static final int POINTS_FIELD_NUMBER = 5;
      private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint> points_ =
        java.util.Collections.emptyList();
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint> getPointsList() {
        return points_;
      }
      public int getPointsCount() { return points_.size(); }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint getPoints(int index) {
        return points_.get(index);
      }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        if (!hasX) return false;
        if (!hasY) return false;
        if (!hasBaseId) return false;
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasX()) {
          output.writeInt32(1, getX());
        }
        if (hasY()) {
          output.writeInt32(2, getY());
        }
        if (hasBaseId()) {
          output.writeInt64(3, getBaseId());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint element : getPointsList()) {
          output.writeMessage(5, element);
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasX()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, getX());
        }
        if (hasY()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, getY());
        }
        if (hasBaseId()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(3, getBaseId());
        }
        for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint element : getPointsList()) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, element);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          if (result.points_ != java.util.Collections.EMPTY_LIST) {
            result.points_ =
              java.util.Collections.unmodifiableList(result.points_);
          }
          net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.getDefaultInstance()) return this;
          if (other.hasX()) {
            setX(other.getX());
          }
          if (other.hasY()) {
            setY(other.getY());
          }
          if (other.hasBaseId()) {
            setBaseId(other.getBaseId());
          }
          if (!other.points_.isEmpty()) {
            if (result.points_.isEmpty()) {
              result.points_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint>();
            }
            result.points_.addAll(other.points_);
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 8: {
                setX(input.readInt32());
                break;
              }
              case 16: {
                setY(input.readInt32());
                break;
              }
              case 24: {
                setBaseId(input.readInt64());
                break;
              }
              case 42: {
                net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.newBuilder();
                input.readMessage(subBuilder, extensionRegistry);
                addPoints(subBuilder.buildPartial());
                break;
              }
            }
          }
        }
        
        
        // required int32 x = 1;
        public boolean hasX() {
          return result.hasX();
        }
        public int getX() {
          return result.getX();
        }
        public Builder setX(int value) {
          result.hasX = true;
          result.x_ = value;
          return this;
        }
        public Builder clearX() {
          result.hasX = false;
          result.x_ = 0;
          return this;
        }
        
        // required int32 y = 2;
        public boolean hasY() {
          return result.hasY();
        }
        public int getY() {
          return result.getY();
        }
        public Builder setY(int value) {
          result.hasY = true;
          result.y_ = value;
          return this;
        }
        public Builder clearY() {
          result.hasY = false;
          result.y_ = 0;
          return this;
        }
        
        // required int64 baseId = 3;
        public boolean hasBaseId() {
          return result.hasBaseId();
        }
        public long getBaseId() {
          return result.getBaseId();
        }
        public Builder setBaseId(long value) {
          result.hasBaseId = true;
          result.baseId_ = value;
          return this;
        }
        public Builder clearBaseId() {
          result.hasBaseId = false;
          result.baseId_ = 0L;
          return this;
        }
        
        // repeated .OsmAndRoutingIndex.RouteBorderPoint points = 5;
        public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint> getPointsList() {
          return java.util.Collections.unmodifiableList(result.points_);
        }
        public int getPointsCount() {
          return result.getPointsCount();
        }
        public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint getPoints(int index) {
          return result.getPoints(index);
        }
        public Builder setPoints(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint value) {
          if (value == null) {
            throw new NullPointerException();
          }
          result.points_.set(index, value);
          return this;
        }
        public Builder setPoints(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.Builder builderForValue) {
          result.points_.set(index, builderForValue.build());
          return this;
        }
        public Builder addPoints(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint value) {
          if (value == null) {
            throw new NullPointerException();
          }
          if (result.points_.isEmpty()) {
            result.points_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint>();
          }
          result.points_.add(value);
          return this;
        }
        public Builder addPoints(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.Builder builderForValue) {
          if (result.points_.isEmpty()) {
            result.points_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint>();
          }
          result.points_.add(builderForValue.build());
          return this;
        }
        public Builder addAllPoints(
            java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint> values) {
          if (result.points_.isEmpty()) {
            result.points_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint>();
          }
          super.addAll(values, result.points_);
          return this;
        }
        public Builder clearPoints() {
          result.points_ = java.util.Collections.emptyList();
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteBorderPointsBlock)
      }
      
      static {
        defaultInstance = new RouteBorderPointsBlock(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteBorderPointsBlock)
    }
    
    public static final class RouteBorderPoint extends
        com.google.protobuf.GeneratedMessage {
      // Use RouteBorderPoint.newBuilder() to construct.
      private RouteBorderPoint() {
        initFields();
      }
      private RouteBorderPoint(boolean noInit) {}
      
      private static final RouteBorderPoint defaultInstance;
      public static RouteBorderPoint getDefaultInstance() {
        return defaultInstance;
      }
      
      @Override
	public RouteBorderPoint getDefaultInstanceForType() {
        return defaultInstance;
      }
      
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderPoint_descriptor;
      }
      
      @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return net.osmand.binary.OsmandOdb.internal_static_OsmAndRoutingIndex_RouteBorderPoint_fieldAccessorTable;
      }
      
      // optional int32 dx = 1;
      public static final int DX_FIELD_NUMBER = 1;
      private boolean hasDx;
      private int dx_ = 0;
      public boolean hasDx() { return hasDx; }
      public int getDx() { return dx_; }
      
      // optional int32 dy = 2;
      public static final int DY_FIELD_NUMBER = 2;
      private boolean hasDy;
      private int dy_ = 0;
      public boolean hasDy() { return hasDy; }
      public int getDy() { return dy_; }
      
      // optional int32 direction = 3;
      public static final int DIRECTION_FIELD_NUMBER = 3;
      private boolean hasDirection;
      private int direction_ = 0;
      public boolean hasDirection() { return hasDirection; }
      public int getDirection() { return direction_; }
      
      // optional bytes types = 4;
      public static final int TYPES_FIELD_NUMBER = 4;
      private boolean hasTypes;
      private com.google.protobuf.ByteString types_ = com.google.protobuf.ByteString.EMPTY;
      public boolean hasTypes() { return hasTypes; }
      public com.google.protobuf.ByteString getTypes() { return types_; }
      
      // optional sint64 roadId = 7;
      public static final int ROADID_FIELD_NUMBER = 7;
      private boolean hasRoadId;
      private long roadId_ = 0L;
      public boolean hasRoadId() { return hasRoadId; }
      public long getRoadId() { return roadId_; }
      
      private void initFields() {
      }
      @Override
	public final boolean isInitialized() {
        return true;
      }
      
      @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (hasDx()) {
          output.writeInt32(1, getDx());
        }
        if (hasDy()) {
          output.writeInt32(2, getDy());
        }
        if (hasDirection()) {
          output.writeInt32(3, getDirection());
        }
        if (hasTypes()) {
          output.writeBytes(4, getTypes());
        }
        if (hasRoadId()) {
          output.writeSInt64(7, getRoadId());
        }
        getUnknownFields().writeTo(output);
      }
      
      private int memoizedSerializedSize = -1;
      @Override
	public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;
      
        size = 0;
        if (hasDx()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(1, getDx());
        }
        if (hasDy()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(2, getDy());
        }
        if (hasDirection()) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(3, getDirection());
        }
        if (hasTypes()) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(4, getTypes());
        }
        if (hasRoadId()) {
          size += com.google.protobuf.CodedOutputStream
            .computeSInt64Size(7, getRoadId());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }
      
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return newBuilder().mergeFrom(data, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        Builder builder = newBuilder();
        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
          return builder.buildParsed();
        } else {
          return null;
        }
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input).buildParsed();
      }
      public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return newBuilder().mergeFrom(input, extensionRegistry)
                 .buildParsed();
      }
      
      public static Builder newBuilder() { return Builder.create(); }
      @Override
	public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      @Override
	public Builder toBuilder() { return newBuilder(this); }
      
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder> {
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint result;
        
        // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.newBuilder()
        private Builder() {}
        
        private static Builder create() {
          Builder builder = new Builder();
          builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint();
          return builder;
        }
        
        @Override
		protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint internalGetResult() {
          return result;
        }
        
        @Override
		public Builder clear() {
          if (result == null) {
            throw new IllegalStateException(
              "Cannot call clear() after build().");
          }
          result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint();
          return this;
        }
        
        @Override
		public Builder clone() {
          return create().mergeFrom(result);
        }
        
        @Override
		public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.getDescriptor();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint getDefaultInstanceForType() {
          return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.getDefaultInstance();
        }
        
        @Override
		public boolean isInitialized() {
          return result.isInitialized();
        }
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint build() {
          if (result != null && !isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return buildPartial();
        }
        
        private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint buildParsed()
            throws com.google.protobuf.InvalidProtocolBufferException {
          if (!isInitialized()) {
            throw newUninitializedMessageException(
              result).asInvalidProtocolBufferException();
          }
          return buildPartial();
        }
        
        @Override
		public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint buildPartial() {
          if (result == null) {
            throw new IllegalStateException(
              "build() has already been called on this Builder.");
          }
          net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint returnMe = result;
          result = null;
          return returnMe;
        }
        
        @Override
		public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint) {
            return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        
        public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint other) {
          if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.getDefaultInstance()) return this;
          if (other.hasDx()) {
            setDx(other.getDx());
          }
          if (other.hasDy()) {
            setDy(other.getDy());
          }
          if (other.hasDirection()) {
            setDirection(other.getDirection());
          }
          if (other.hasTypes()) {
            setTypes(other.getTypes());
          }
          if (other.hasRoadId()) {
            setRoadId(other.getRoadId());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }
        
        @Override
		public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder(
              this.getUnknownFields());
          while (true) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                this.setUnknownFields(unknownFields.build());
                return this;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  this.setUnknownFields(unknownFields.build());
                  return this;
                }
                break;
              }
              case 8: {
                setDx(input.readInt32());
                break;
              }
              case 16: {
                setDy(input.readInt32());
                break;
              }
              case 24: {
                setDirection(input.readInt32());
                break;
              }
              case 34: {
                setTypes(input.readBytes());
                break;
              }
              case 56: {
                setRoadId(input.readSInt64());
                break;
              }
            }
          }
        }
        
        
        // optional int32 dx = 1;
        public boolean hasDx() {
          return result.hasDx();
        }
        public int getDx() {
          return result.getDx();
        }
        public Builder setDx(int value) {
          result.hasDx = true;
          result.dx_ = value;
          return this;
        }
        public Builder clearDx() {
          result.hasDx = false;
          result.dx_ = 0;
          return this;
        }
        
        // optional int32 dy = 2;
        public boolean hasDy() {
          return result.hasDy();
        }
        public int getDy() {
          return result.getDy();
        }
        public Builder setDy(int value) {
          result.hasDy = true;
          result.dy_ = value;
          return this;
        }
        public Builder clearDy() {
          result.hasDy = false;
          result.dy_ = 0;
          return this;
        }
        
        // optional int32 direction = 3;
        public boolean hasDirection() {
          return result.hasDirection();
        }
        public int getDirection() {
          return result.getDirection();
        }
        public Builder setDirection(int value) {
          result.hasDirection = true;
          result.direction_ = value;
          return this;
        }
        public Builder clearDirection() {
          result.hasDirection = false;
          result.direction_ = 0;
          return this;
        }
        
        // optional bytes types = 4;
        public boolean hasTypes() {
          return result.hasTypes();
        }
        public com.google.protobuf.ByteString getTypes() {
          return result.getTypes();
        }
        public Builder setTypes(com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  result.hasTypes = true;
          result.types_ = value;
          return this;
        }
        public Builder clearTypes() {
          result.hasTypes = false;
          result.types_ = getDefaultInstance().getTypes();
          return this;
        }
        
        // optional sint64 roadId = 7;
        public boolean hasRoadId() {
          return result.hasRoadId();
        }
        public long getRoadId() {
          return result.getRoadId();
        }
        public Builder setRoadId(long value) {
          result.hasRoadId = true;
          result.roadId_ = value;
          return this;
        }
        public Builder clearRoadId() {
          result.hasRoadId = false;
          result.roadId_ = 0L;
          return this;
        }
        
        // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex.RouteBorderPoint)
      }
      
      static {
        defaultInstance = new RouteBorderPoint(true);
        net.osmand.binary.OsmandOdb.internalForceInit();
        defaultInstance.initFields();
      }
      
      // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex.RouteBorderPoint)
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // repeated .OsmAndRoutingIndex.RouteEncodingRule rules = 2;
    public static final int RULES_FIELD_NUMBER = 2;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule> rules_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule> getRulesList() {
      return rules_;
    }
    public int getRulesCount() { return rules_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule getRules(int index) {
      return rules_.get(index);
    }
    
    // repeated .OsmAndRoutingIndex.RouteDataBox rootBoxes = 3;
    public static final int ROOTBOXES_FIELD_NUMBER = 3;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> rootBoxes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> getRootBoxesList() {
      return rootBoxes_;
    }
    public int getRootBoxesCount() { return rootBoxes_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getRootBoxes(int index) {
      return rootBoxes_.get(index);
    }
    
    // repeated .OsmAndRoutingIndex.RouteDataBox basemapBoxes = 4;
    public static final int BASEMAPBOXES_FIELD_NUMBER = 4;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> basemapBoxes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> getBasemapBoxesList() {
      return basemapBoxes_;
    }
    public int getBasemapBoxesCount() { return basemapBoxes_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getBasemapBoxes(int index) {
      return basemapBoxes_.get(index);
    }
    
    // optional .OsmAndRoutingIndex.RouteBorderBox borderBox = 7;
    public static final int BORDERBOX_FIELD_NUMBER = 7;
    private boolean hasBorderBox;
    private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox borderBox_;
    public boolean hasBorderBox() { return hasBorderBox; }
    public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getBorderBox() { return borderBox_; }
    
    // optional .OsmAndRoutingIndex.RouteBorderBox baseBorderBox = 8;
    public static final int BASEBORDERBOX_FIELD_NUMBER = 8;
    private boolean hasBaseBorderBox;
    private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox baseBorderBox_;
    public boolean hasBaseBorderBox() { return hasBaseBorderBox; }
    public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getBaseBorderBox() { return baseBorderBox_; }
    
    // repeated .OsmAndRoutingIndex.RouteDataBlock blocks = 5;
    public static final int BLOCKS_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock> blocks_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock> getBlocksList() {
      return blocks_;
    }
    public int getBlocksCount() { return blocks_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock getBlocks(int index) {
      return blocks_.get(index);
    }
    
    private void initFields() {
      borderBox_ = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance();
      baseBorderBox_ = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule element : getRulesList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getRootBoxesList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBasemapBoxesList()) {
        if (!element.isInitialized()) return false;
      }
      if (hasBorderBox()) {
        if (!getBorderBox().isInitialized()) return false;
      }
      if (hasBaseBorderBox()) {
        if (!getBaseBorderBox().isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock element : getBlocksList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule element : getRulesList()) {
        output.writeMessage(2, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getRootBoxesList()) {
        output.writeMessage(3, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBasemapBoxesList()) {
        output.writeMessage(4, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock element : getBlocksList()) {
        output.writeMessage(5, element);
      }
      if (hasBorderBox()) {
        output.writeMessage(7, getBorderBox());
      }
      if (hasBaseBorderBox()) {
        output.writeMessage(8, getBaseBorderBox());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule element : getRulesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getRootBoxesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox element : getBasemapBoxesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock element : getBlocksList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      if (hasBorderBox()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, getBorderBox());
      }
      if (hasBaseBorderBox()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, getBaseBorderBox());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndRoutingIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndRoutingIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndRoutingIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndRoutingIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.rules_ != java.util.Collections.EMPTY_LIST) {
          result.rules_ =
            java.util.Collections.unmodifiableList(result.rules_);
        }
        if (result.rootBoxes_ != java.util.Collections.EMPTY_LIST) {
          result.rootBoxes_ =
            java.util.Collections.unmodifiableList(result.rootBoxes_);
        }
        if (result.basemapBoxes_ != java.util.Collections.EMPTY_LIST) {
          result.basemapBoxes_ =
            java.util.Collections.unmodifiableList(result.basemapBoxes_);
        }
        if (result.blocks_ != java.util.Collections.EMPTY_LIST) {
          result.blocks_ =
            java.util.Collections.unmodifiableList(result.blocks_);
        }
        net.osmand.binary.OsmandOdb.OsmAndRoutingIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndRoutingIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndRoutingIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (!other.rules_.isEmpty()) {
          if (result.rules_.isEmpty()) {
            result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule>();
          }
          result.rules_.addAll(other.rules_);
        }
        if (!other.rootBoxes_.isEmpty()) {
          if (result.rootBoxes_.isEmpty()) {
            result.rootBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
          }
          result.rootBoxes_.addAll(other.rootBoxes_);
        }
        if (!other.basemapBoxes_.isEmpty()) {
          if (result.basemapBoxes_.isEmpty()) {
            result.basemapBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
          }
          result.basemapBoxes_.addAll(other.basemapBoxes_);
        }
        if (other.hasBorderBox()) {
          mergeBorderBox(other.getBorderBox());
        }
        if (other.hasBaseBorderBox()) {
          mergeBaseBorderBox(other.getBaseBorderBox());
        }
        if (!other.blocks_.isEmpty()) {
          if (result.blocks_.isEmpty()) {
            result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock>();
          }
          result.blocks_.addAll(other.blocks_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRules(subBuilder.buildPartial());
              break;
            }
            case 26: {
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRootBoxes(subBuilder.buildPartial());
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addBasemapBoxes(subBuilder.buildPartial());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addBlocks(subBuilder.buildPartial());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder();
              if (hasBorderBox()) {
                subBuilder.mergeFrom(getBorderBox());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setBorderBox(subBuilder.buildPartial());
              break;
            }
            case 66: {
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder();
              if (hasBaseBorderBox()) {
                subBuilder.mergeFrom(getBaseBorderBox());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setBaseBorderBox(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // repeated .OsmAndRoutingIndex.RouteEncodingRule rules = 2;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule> getRulesList() {
        return java.util.Collections.unmodifiableList(result.rules_);
      }
      public int getRulesCount() {
        return result.getRulesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule getRules(int index) {
        return result.getRules(index);
      }
      public Builder setRules(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.rules_.set(index, value);
        return this;
      }
      public Builder setRules(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.Builder builderForValue) {
        result.rules_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRules(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule>();
        }
        result.rules_.add(value);
        return this;
      }
      public Builder addRules(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.Builder builderForValue) {
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule>();
        }
        result.rules_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRules(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule> values) {
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule>();
        }
        super.addAll(values, result.rules_);
        return this;
      }
      public Builder clearRules() {
        result.rules_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndRoutingIndex.RouteDataBox rootBoxes = 3;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> getRootBoxesList() {
        return java.util.Collections.unmodifiableList(result.rootBoxes_);
      }
      public int getRootBoxesCount() {
        return result.getRootBoxesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getRootBoxes(int index) {
        return result.getRootBoxes(index);
      }
      public Builder setRootBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.rootBoxes_.set(index, value);
        return this;
      }
      public Builder setRootBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) {
        result.rootBoxes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRootBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.rootBoxes_.isEmpty()) {
          result.rootBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
        }
        result.rootBoxes_.add(value);
        return this;
      }
      public Builder addRootBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) {
        if (result.rootBoxes_.isEmpty()) {
          result.rootBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
        }
        result.rootBoxes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRootBoxes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> values) {
        if (result.rootBoxes_.isEmpty()) {
          result.rootBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
        }
        super.addAll(values, result.rootBoxes_);
        return this;
      }
      public Builder clearRootBoxes() {
        result.rootBoxes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndRoutingIndex.RouteDataBox basemapBoxes = 4;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> getBasemapBoxesList() {
        return java.util.Collections.unmodifiableList(result.basemapBoxes_);
      }
      public int getBasemapBoxesCount() {
        return result.getBasemapBoxesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox getBasemapBoxes(int index) {
        return result.getBasemapBoxes(index);
      }
      public Builder setBasemapBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.basemapBoxes_.set(index, value);
        return this;
      }
      public Builder setBasemapBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) {
        result.basemapBoxes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addBasemapBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.basemapBoxes_.isEmpty()) {
          result.basemapBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
        }
        result.basemapBoxes_.add(value);
        return this;
      }
      public Builder addBasemapBoxes(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder builderForValue) {
        if (result.basemapBoxes_.isEmpty()) {
          result.basemapBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
        }
        result.basemapBoxes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllBasemapBoxes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox> values) {
        if (result.basemapBoxes_.isEmpty()) {
          result.basemapBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox>();
        }
        super.addAll(values, result.basemapBoxes_);
        return this;
      }
      public Builder clearBasemapBoxes() {
        result.basemapBoxes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .OsmAndRoutingIndex.RouteBorderBox borderBox = 7;
      public boolean hasBorderBox() {
        return result.hasBorderBox();
      }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getBorderBox() {
        return result.getBorderBox();
      }
      public Builder setBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasBorderBox = true;
        result.borderBox_ = value;
        return this;
      }
      public Builder setBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder builderForValue) {
        result.hasBorderBox = true;
        result.borderBox_ = builderForValue.build();
        return this;
      }
      public Builder mergeBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox value) {
        if (result.hasBorderBox() &&
            result.borderBox_ != net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance()) {
          result.borderBox_ =
            net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder(result.borderBox_).mergeFrom(value).buildPartial();
        } else {
          result.borderBox_ = value;
        }
        result.hasBorderBox = true;
        return this;
      }
      public Builder clearBorderBox() {
        result.hasBorderBox = false;
        result.borderBox_ = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance();
        return this;
      }
      
      // optional .OsmAndRoutingIndex.RouteBorderBox baseBorderBox = 8;
      public boolean hasBaseBorderBox() {
        return result.hasBaseBorderBox();
      }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox getBaseBorderBox() {
        return result.getBaseBorderBox();
      }
      public Builder setBaseBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasBaseBorderBox = true;
        result.baseBorderBox_ = value;
        return this;
      }
      public Builder setBaseBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder builderForValue) {
        result.hasBaseBorderBox = true;
        result.baseBorderBox_ = builderForValue.build();
        return this;
      }
      public Builder mergeBaseBorderBox(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox value) {
        if (result.hasBaseBorderBox() &&
            result.baseBorderBox_ != net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance()) {
          result.baseBorderBox_ =
            net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.newBuilder(result.baseBorderBox_).mergeFrom(value).buildPartial();
        } else {
          result.baseBorderBox_ = value;
        }
        result.hasBaseBorderBox = true;
        return this;
      }
      public Builder clearBaseBorderBox() {
        result.hasBaseBorderBox = false;
        result.baseBorderBox_ = net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndRoutingIndex.RouteDataBlock blocks = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock> getBlocksList() {
        return java.util.Collections.unmodifiableList(result.blocks_);
      }
      public int getBlocksCount() {
        return result.getBlocksCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock getBlocks(int index) {
        return result.getBlocks(index);
      }
      public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.blocks_.set(index, value);
        return this;
      }
      public Builder setBlocks(int index, net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.Builder builderForValue) {
        result.blocks_.set(index, builderForValue.build());
        return this;
      }
      public Builder addBlocks(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.blocks_.isEmpty()) {
          result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock>();
        }
        result.blocks_.add(value);
        return this;
      }
      public Builder addBlocks(net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.Builder builderForValue) {
        if (result.blocks_.isEmpty()) {
          result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock>();
        }
        result.blocks_.add(builderForValue.build());
        return this;
      }
      public Builder addAllBlocks(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock> values) {
        if (result.blocks_.isEmpty()) {
          result.blocks_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock>();
        }
        super.addAll(values, result.blocks_);
        return this;
      }
      public Builder clearBlocks() {
        result.blocks_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndRoutingIndex)
    }
    
    static {
      defaultInstance = new OsmAndRoutingIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndRoutingIndex)
  }
  
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndStructure_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndStructure_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndTileBox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndTileBox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_StringTable_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_StringTable_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_IndexedStringTable_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_IndexedStringTable_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndMapIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndMapIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndMapIndex_MapEncodingRule_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndMapIndex_MapEncodingRule_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndMapIndex_MapRootLevel_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndMapIndex_MapRootLevel_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndMapIndex_MapDataBox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndMapIndex_MapDataBox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_MapDataBlock_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_MapDataBlock_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_MapData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_MapData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndAddressIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndAddressIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndAddressIndex_CitiesIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndAddressIndex_CitiesIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndAddressNameIndexData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndAddressNameIndexData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AddressNameIndexDataAtom_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AddressNameIndexDataAtom_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CityIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CityIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CityBlockIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CityBlockIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_StreetIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_StreetIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_StreetIntersection_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_StreetIntersection_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BuildingIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BuildingIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportRoutes_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportRoutes_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportRoute_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportRoute_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportRouteStop_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportRouteStop_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportStop_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportStop_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportStopsTree_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportStopsTree_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndTransportIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndTransportIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiNameIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiNameIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiNameIndexDataAtom_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndCategoryTable_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndCategoryTable_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiBox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiBox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiCategories_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiCategories_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiBoxData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiBoxData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiBoxDataAtom_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiBoxDataAtom_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_IdTable_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_IdTable_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_RestrictionData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_RestrictionData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_RouteData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_RouteData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndRoutingIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndRoutingIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndRoutingIndex_RouteEncodingRule_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndRoutingIndex_RouteEncodingRule_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndRoutingIndex_RouteDataBox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndRoutingIndex_RouteDataBox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndRoutingIndex_RouteDataBlock_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndRoutingIndex_RouteDataBlock_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndRoutingIndex_RouteBorderBox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndRoutingIndex_RouteBorderBox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndRoutingIndex_RouteBorderLine_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndRoutingIndex_RouteBorderLine_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndRoutingIndex_RouteBorderPoint_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndRoutingIndex_RouteBorderPoint_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&DataExtractionOSM/src/osmand_odb.proto" +
      "\"\232\002\n\017OsmAndStructure\022\017\n\007version\030\001 \002(\r\022\023\n" +
      "\013dateCreated\030\022 \002(\003\022)\n\014addressIndex\030\007 \003(\013" +
      "2\023.OsmAndAddressIndex\022-\n\016transportIndex\030" +
      "\004 \003(\0132\025.OsmAndTransportIndex\022!\n\010poiIndex" +
      "\030\010 \003(\0132\017.OsmAndPoiIndex\022!\n\010mapIndex\030\006 \003(" +
      "\0132\017.OsmAndMapIndex\022)\n\014routingIndex\030\t \003(\013" +
      "2\023.OsmAndRoutingIndex\022\026\n\016versionConfirm\030" +
      "  \002(\r\"I\n\rOsmAndTileBox\022\014\n\004left\030\001 \002(\r\022\r\n\005" +
      "right\030\002 \002(\r\022\013\n\003top\030\003 \002(\r\022\016\n\006bottom\030\004 \002(\r",
      "\"\030\n\013StringTable\022\t\n\001s\030\001 \003(\t\"f\n\022IndexedStr" +
      "ingTable\022\016\n\006prefix\030\001 \001(\t\022\013\n\003key\030\003 \003(\t\022\013\n" +
      "\003val\030\004 \003(\007\022&\n\tsubtables\030\005 \003(\0132\023.IndexedS" +
      "tringTable\"\250\004\n\016OsmAndMapIndex\022\014\n\004name\030\002 " +
      "\002(\t\022.\n\005rules\030\004 \003(\0132\037.OsmAndMapIndex.MapE" +
      "ncodingRule\022,\n\006levels\030\005 \003(\0132\034.OsmAndMapI" +
      "ndex.MapRootLevel\032X\n\017MapEncodingRule\022\013\n\003" +
      "tag\030\003 \002(\t\022\r\n\005value\030\005 \001(\t\022\n\n\002id\030\007 \001(\r\022\017\n\007" +
      "minZoom\030\t \001(\r\022\014\n\004type\030\n \001(\r\032\264\001\n\014MapRootL" +
      "evel\022\017\n\007maxZoom\030\001 \002(\005\022\017\n\007minZoom\030\002 \002(\005\022\014",
      "\n\004left\030\003 \002(\005\022\r\n\005right\030\004 \002(\005\022\013\n\003top\030\005 \002(\005" +
      "\022\016\n\006bottom\030\006 \002(\005\022)\n\005boxes\030\007 \003(\0132\032.OsmAnd" +
      "MapIndex.MapDataBox\022\035\n\006blocks\030\017 \003(\0132\r.Ma" +
      "pDataBlock\032\230\001\n\nMapDataBox\022\014\n\004left\030\001 \002(\021\022" +
      "\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bottom\030\004 " +
      "\002(\021\022\026\n\016shiftToMapData\030\005 \001(\007\022\r\n\005ocean\030\006 \001" +
      "(\010\022)\n\005boxes\030\007 \003(\0132\032.OsmAndMapIndex.MapDa" +
      "taBox\"`\n\014MapDataBlock\022\016\n\006baseId\030\n \001(\004\022\035\n" +
      "\013dataObjects\030\014 \003(\0132\010.MapData\022!\n\013stringTa" +
      "ble\030\017 \001(\0132\014.StringTable\"\266\001\n\007MapData\022\023\n\013c",
      "oordinates\030\001 \001(\014\022\027\n\017areaCoordinates\030\002 \001(" +
      "\014\022\037\n\027polygonInnerCoordinates\030\004 \003(\014\022\027\n\017ad" +
      "ditionalTypes\030\006 \001(\014\022\r\n\005types\030\007 \002(\014\022\023\n\013st" +
      "ringNames\030\n \001(\014\022\n\n\002id\030\014 \002(\022\022\023\n\013rasterByt" +
      "es\030\017 \001(\014\"\222\002\n\022OsmAndAddressIndex\022\014\n\004name\030" +
      "\001 \002(\t\022\017\n\007name_en\030\002 \001(\t\022\"\n\nboundaries\030\003 \001" +
      "(\0132\016.OsmAndTileBox\022/\n\006cities\030\006 \003(\0132\037.Osm" +
      "AndAddressIndex.CitiesIndex\022.\n\tnameIndex" +
      "\030\007 \001(\0132\033.OsmAndAddressNameIndexData\032X\n\013C" +
      "itiesIndex\022\014\n\004type\030\002 \002(\r\022\032\n\006cities\030\005 \003(\013",
      "2\n.CityIndex\022\037\n\006blocks\030\007 \003(\0132\017.CityBlock" +
      "Index\"\301\001\n\032OsmAndAddressNameIndexData\022\"\n\005" +
      "table\030\004 \002(\0132\023.IndexedStringTable\022>\n\004atom" +
      "\030\007 \003(\01320.OsmAndAddressNameIndexData.Addr" +
      "essNameIndexData\032?\n\024AddressNameIndexData" +
      "\022\'\n\004atom\030\004 \003(\0132\031.AddressNameIndexDataAto" +
      "m\"v\n\030AddressNameIndexDataAtom\022\014\n\004name\030\001 " +
      "\001(\t\022\016\n\006nameEn\030\002 \001(\t\022\014\n\004type\030\003 \002(\r\022\024\n\014shi" +
      "ftToIndex\030\005 \003(\005\022\030\n\020shiftToCityIndex\030\006 \003(" +
      "\005\"~\n\tCityIndex\022\021\n\tcity_type\030\001 \001(\r\022\014\n\004nam",
      "e\030\002 \002(\t\022\017\n\007name_en\030\003 \001(\t\022\n\n\002id\030\004 \001(\004\022\t\n\001" +
      "x\030\005 \002(\r\022\t\n\001y\030\006 \002(\r\022\035\n\025shiftToCityBlockIn" +
      "dex\030\n \001(\007\"l\n\016CityBlockIndex\022\030\n\020shiftToCi" +
      "tyIndex\030\004 \001(\007\022!\n\tbuildings\030\n \003(\0132\016.Build" +
      "ingIndex\022\035\n\007streets\030\014 \003(\0132\014.StreetIndex\"" +
      "\235\001\n\013StreetIndex\022\014\n\004name\030\001 \002(\t\022\017\n\007name_en" +
      "\030\002 \001(\t\022\t\n\001x\030\003 \002(\021\022\t\n\001y\030\004 \002(\021\022\n\n\002id\030\006 \001(\004" +
      "\022!\n\tbuildings\030\014 \003(\0132\016.BuildingIndex\022*\n\ri" +
      "ntersections\030\005 \003(\0132\023.StreetIntersection\"" +
      "_\n\022StreetIntersection\022\014\n\004name\030\002 \002(\t\022\017\n\007n",
      "ame_en\030\003 \001(\t\022\024\n\014intersectedX\030\004 \002(\021\022\024\n\014in" +
      "tersectedY\030\005 \002(\021\"\262\001\n\rBuildingIndex\022\014\n\004na" +
      "me\030\001 \002(\t\022\017\n\007name_en\030\002 \001(\t\022\r\n\005name2\030\003 \001(\t" +
      "\022\020\n\010name_en2\030\004 \001(\t\022\025\n\rinterpolation\030\005 \001(" +
      "\021\022\t\n\001x\030\007 \002(\021\022\t\n\001y\030\010 \002(\021\022\n\n\002x2\030\t \001(\021\022\n\n\002y" +
      "2\030\n \001(\021\022\n\n\002id\030\r \001(\004\022\020\n\010postcode\030\016 \001(\t\"2\n" +
      "\017TransportRoutes\022\037\n\006routes\030\006 \003(\0132\017.Trans" +
      "portRoute\"\317\001\n\016TransportRoute\022\n\n\002id\030\001 \002(\004" +
      "\022\014\n\004type\030\003 \001(\r\022\020\n\010operator\030\004 \001(\r\022\013\n\003ref\030" +
      "\005 \001(\t\022\014\n\004name\030\006 \001(\r\022\017\n\007name_en\030\007 \001(\r\022\020\n\010",
      "distance\030\010 \001(\r\022(\n\013directStops\030\017 \003(\0132\023.Tr" +
      "ansportRouteStop\022)\n\014reverseStops\030\020 \003(\0132\023" +
      ".TransportRouteStop\"W\n\022TransportRouteSto" +
      "p\022\n\n\002id\030\001 \002(\022\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\014\n" +
      "\004name\030\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\"b\n\rTranspor" +
      "tStop\022\n\n\002dx\030\001 \002(\021\022\n\n\002dy\030\002 \002(\021\022\n\n\002id\030\005 \002(" +
      "\022\022\014\n\004name\030\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\022\016\n\006rout" +
      "es\030\020 \003(\r\"\244\001\n\022TransportStopsTree\022\014\n\004left\030" +
      "\001 \002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bot" +
      "tom\030\004 \002(\021\022%\n\010subtrees\030\007 \003(\0132\023.TransportS",
      "topsTree\022\035\n\005leafs\030\010 \003(\0132\016.TransportStop\022" +
      "\016\n\006baseId\030\020 \001(\004\"\215\001\n\024OsmAndTransportIndex" +
      "\022\014\n\004name\030\001 \001(\t\022 \n\006routes\030\003 \001(\0132\020.Transpo" +
      "rtRoutes\022\"\n\005stops\030\006 \001(\0132\023.TransportStops" +
      "Tree\022!\n\013stringTable\030\t \002(\0132\014.StringTable\"" +
      "\333\001\n\016OsmAndPoiIndex\022\014\n\004name\030\001 \002(\t\022\"\n\nboun" +
      "daries\030\002 \002(\0132\016.OsmAndTileBox\022-\n\017categori" +
      "esTable\030\003 \003(\0132\024.OsmAndCategoryTable\022&\n\tn" +
      "ameIndex\030\004 \001(\0132\023.OsmAndPoiNameIndex\022\034\n\005b" +
      "oxes\030\006 \003(\0132\r.OsmAndPoiBox\022\"\n\007poiData\030\t \003",
      "(\0132\021.OsmAndPoiBoxData\"\270\001\n\022OsmAndPoiNameI" +
      "ndex\022\"\n\005table\030\003 \002(\0132\023.IndexedStringTable" +
      "\0228\n\004data\030\005 \003(\0132*.OsmAndPoiNameIndex.OsmA" +
      "ndPoiNameIndexData\032D\n\026OsmAndPoiNameIndex" +
      "Data\022*\n\005atoms\030\003 \003(\0132\033.OsmAndPoiNameIndex" +
      "DataAtom\"Q\n\032OsmAndPoiNameIndexDataAtom\022\014" +
      "\n\004zoom\030\002 \001(\r\022\t\n\001x\030\003 \001(\r\022\t\n\001y\030\004 \001(\r\022\017\n\007sh" +
      "iftTo\030\016 \001(\007\">\n\023OsmAndCategoryTable\022\020\n\010ca" +
      "tegory\030\001 \002(\t\022\025\n\rsubcategories\030\003 \003(\t\"\227\001\n\014" +
      "OsmAndPoiBox\022\014\n\004zoom\030\001 \002(\r\022\014\n\004left\030\002 \002(\021",
      "\022\013\n\003top\030\003 \002(\021\022(\n\ncategories\030\004 \001(\0132\024.OsmA" +
      "ndPoiCategories\022\037\n\010subBoxes\030\n \003(\0132\r.OsmA" +
      "ndPoiBox\022\023\n\013shiftToData\030\016 \001(\007\")\n\023OsmAndP" +
      "oiCategories\022\022\n\ncategories\030\003 \003(\r\"^\n\020OsmA" +
      "ndPoiBoxData\022\014\n\004zoom\030\001 \001(\r\022\t\n\001x\030\002 \001(\r\022\t\n" +
      "\001y\030\003 \001(\r\022&\n\007poiData\030\005 \003(\0132\025.OsmAndPoiBox" +
      "DataAtom\"\255\001\n\024OsmAndPoiBoxDataAtom\022\n\n\002dx\030" +
      "\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\022\n\ncategories\030\004 \003(\r\022\014\n" +
      "\004name\030\006 \001(\t\022\016\n\006nameEn\030\007 \001(\t\022\n\n\002id\030\010 \001(\004\022" +
      "\024\n\014openingHours\030\n \001(\t\022\014\n\004site\030\013 \001(\t\022\r\n\005p",
      "hone\030\014 \001(\t\022\014\n\004note\030\r \001(\t\"\032\n\007IdTable\022\017\n\007r" +
      "outeId\030\001 \003(\022\"F\n\017RestrictionData\022\014\n\004type\030" +
      "\001 \002(\005\022\014\n\004from\030\002 \002(\005\022\n\n\002to\030\003 \002(\005\022\013\n\003via\030\004" +
      " \001(\005\"d\n\tRouteData\022\016\n\006points\030\001 \002(\014\022\022\n\npoi" +
      "ntTypes\030\004 \001(\014\022\r\n\005types\030\007 \002(\014\022\017\n\007routeId\030" +
      "\014 \002(\005\022\023\n\013stringNames\030\016 \001(\014\"\314\t\n\022OsmAndRou" +
      "tingIndex\022\014\n\004name\030\001 \002(\t\0224\n\005rules\030\002 \003(\0132%" +
      ".OsmAndRoutingIndex.RouteEncodingRule\0223\n" +
      "\trootBoxes\030\003 \003(\0132 .OsmAndRoutingIndex.Ro" +
      "uteDataBox\0226\n\014basemapBoxes\030\004 \003(\0132 .OsmAn",
      "dRoutingIndex.RouteDataBox\0225\n\tborderBox\030" +
      "\007 \001(\0132\".OsmAndRoutingIndex.RouteBorderBo" +
      "x\0229\n\rbaseBorderBox\030\010 \001(\0132\".OsmAndRouting" +
      "Index.RouteBorderBox\0222\n\006blocks\030\005 \003(\0132\".O" +
      "smAndRoutingIndex.RouteDataBlock\032;\n\021Rout" +
      "eEncodingRule\022\013\n\003tag\030\003 \002(\t\022\r\n\005value\030\005 \002(" +
      "\t\022\n\n\002id\030\007 \001(\r\032\216\001\n\014RouteDataBox\022\014\n\004left\030\001" +
      " \002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bott" +
      "om\030\004 \002(\021\022\023\n\013shiftToData\030\005 \001(\007\022/\n\005boxes\030\007" +
      " \003(\0132 .OsmAndRoutingIndex.RouteDataBox\032\227",
      "\001\n\016RouteDataBlock\022\031\n\007idTable\030\005 \001(\0132\010.IdT" +
      "able\022!\n\013stringTable\030\010 \001(\0132\014.StringTable\022" +
      "\037\n\013dataObjects\030\006 \003(\0132\n.RouteData\022&\n\014rest" +
      "rictions\030\007 \003(\0132\020.RestrictionData\032\303\001\n\016Rou" +
      "teBorderBox\022\"\n\nboundaries\030\001 \002(\0132\016.OsmAnd" +
      "TileBox\022\027\n\017tileZoomToSplit\030\002 \001(\r\0228\n\013bord" +
      "erLines\030\006 \003(\0132#.OsmAndRoutingIndex.Route" +
      "BorderLine\022:\n\006blocks\030\007 \003(\0132*.OsmAndRouti" +
      "ngIndex.RouteBorderPointsBlock\032]\n\017RouteB" +
      "orderLine\022\t\n\001x\030\001 \002(\005\022\t\n\001y\030\002 \002(\005\022\013\n\003tox\030\003",
      " \001(\005\022\013\n\003toy\030\004 \001(\005\022\032\n\022shiftToPointsBlock\030" +
      "\007 \002(\007\032t\n\026RouteBorderPointsBlock\022\t\n\001x\030\001 \002" +
      "(\005\022\t\n\001y\030\002 \002(\005\022\016\n\006baseId\030\003 \002(\003\0224\n\006points\030" +
      "\005 \003(\0132$.OsmAndRoutingIndex.RouteBorderPo" +
      "int\032\\\n\020RouteBorderPoint\022\n\n\002dx\030\001 \001(\005\022\n\n\002d" +
      "y\030\002 \001(\005\022\021\n\tdirection\030\003 \001(\005\022\r\n\005types\030\004 \001(" +
      "\014\022\016\n\006roadId\030\007 \001(\022B\023\n\021net.osmand.binary"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        @Override
		public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_OsmAndStructure_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_OsmAndStructure_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndStructure_descriptor,
              new java.lang.String[] { "Version", "DateCreated", "AddressIndex", "TransportIndex", "PoiIndex", "MapIndex", "RoutingIndex", "VersionConfirm", },
              net.osmand.binary.OsmandOdb.OsmAndStructure.class,
              net.osmand.binary.OsmandOdb.OsmAndStructure.Builder.class);
          internal_static_OsmAndTileBox_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_OsmAndTileBox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndTileBox_descriptor,
              new java.lang.String[] { "Left", "Right", "Top", "Bottom", },
              net.osmand.binary.OsmandOdb.OsmAndTileBox.class,
              net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder.class);
          internal_static_StringTable_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_StringTable_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_StringTable_descriptor,
              new java.lang.String[] { "S", },
              net.osmand.binary.OsmandOdb.StringTable.class,
              net.osmand.binary.OsmandOdb.StringTable.Builder.class);
          internal_static_IndexedStringTable_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_IndexedStringTable_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_IndexedStringTable_descriptor,
              new java.lang.String[] { "Prefix", "Key", "Val", "Subtables", },
              net.osmand.binary.OsmandOdb.IndexedStringTable.class,
              net.osmand.binary.OsmandOdb.IndexedStringTable.Builder.class);
          internal_static_OsmAndMapIndex_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_OsmAndMapIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndMapIndex_descriptor,
              new java.lang.String[] { "Name", "Rules", "Levels", },
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder.class);
          internal_static_OsmAndMapIndex_MapEncodingRule_descriptor =
            internal_static_OsmAndMapIndex_descriptor.getNestedTypes().get(0);
          internal_static_OsmAndMapIndex_MapEncodingRule_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndMapIndex_MapEncodingRule_descriptor,
              new java.lang.String[] { "Tag", "Value", "Id", "MinZoom", "Type", },
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.class,
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule.Builder.class);
          internal_static_OsmAndMapIndex_MapRootLevel_descriptor =
            internal_static_OsmAndMapIndex_descriptor.getNestedTypes().get(1);
          internal_static_OsmAndMapIndex_MapRootLevel_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndMapIndex_MapRootLevel_descriptor,
              new java.lang.String[] { "MaxZoom", "MinZoom", "Left", "Right", "Top", "Bottom", "Boxes", "Blocks", },
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.class,
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel.Builder.class);
          internal_static_OsmAndMapIndex_MapDataBox_descriptor =
            internal_static_OsmAndMapIndex_descriptor.getNestedTypes().get(2);
          internal_static_OsmAndMapIndex_MapDataBox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndMapIndex_MapDataBox_descriptor,
              new java.lang.String[] { "Left", "Right", "Top", "Bottom", "ShiftToMapData", "Ocean", "Boxes", },
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.class,
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox.Builder.class);
          internal_static_MapDataBlock_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_MapDataBlock_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_MapDataBlock_descriptor,
              new java.lang.String[] { "BaseId", "DataObjects", "StringTable", },
              net.osmand.binary.OsmandOdb.MapDataBlock.class,
              net.osmand.binary.OsmandOdb.MapDataBlock.Builder.class);
          internal_static_MapData_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_MapData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_MapData_descriptor,
              new java.lang.String[] { "Coordinates", "AreaCoordinates", "PolygonInnerCoordinates", "AdditionalTypes", "Types", "StringNames", "Id", "RasterBytes", },
              net.osmand.binary.OsmandOdb.MapData.class,
              net.osmand.binary.OsmandOdb.MapData.Builder.class);
          internal_static_OsmAndAddressIndex_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_OsmAndAddressIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndAddressIndex_descriptor,
              new java.lang.String[] { "Name", "NameEn", "Boundaries", "Cities", "NameIndex", },
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder.class);
          internal_static_OsmAndAddressIndex_CitiesIndex_descriptor =
            internal_static_OsmAndAddressIndex_descriptor.getNestedTypes().get(0);
          internal_static_OsmAndAddressIndex_CitiesIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndAddressIndex_CitiesIndex_descriptor,
              new java.lang.String[] { "Type", "Cities", "Blocks", },
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.CitiesIndex.Builder.class);
          internal_static_OsmAndAddressNameIndexData_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_OsmAndAddressNameIndexData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndAddressNameIndexData_descriptor,
              new java.lang.String[] { "Table", "Atom", },
              net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.class,
              net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.Builder.class);
          internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_descriptor =
            internal_static_OsmAndAddressNameIndexData_descriptor.getNestedTypes().get(0);
          internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndAddressNameIndexData_AddressNameIndexData_descriptor,
              new java.lang.String[] { "Atom", },
              net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.class,
              net.osmand.binary.OsmandOdb.OsmAndAddressNameIndexData.AddressNameIndexData.Builder.class);
          internal_static_AddressNameIndexDataAtom_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_AddressNameIndexDataAtom_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AddressNameIndexDataAtom_descriptor,
              new java.lang.String[] { "Name", "NameEn", "Type", "ShiftToIndex", "ShiftToCityIndex", },
              net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.class,
              net.osmand.binary.OsmandOdb.AddressNameIndexDataAtom.Builder.class);
          internal_static_CityIndex_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_CityIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CityIndex_descriptor,
              new java.lang.String[] { "CityType", "Name", "NameEn", "Id", "X", "Y", "ShiftToCityBlockIndex", },
              net.osmand.binary.OsmandOdb.CityIndex.class,
              net.osmand.binary.OsmandOdb.CityIndex.Builder.class);
          internal_static_CityBlockIndex_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_CityBlockIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CityBlockIndex_descriptor,
              new java.lang.String[] { "ShiftToCityIndex", "Buildings", "Streets", },
              net.osmand.binary.OsmandOdb.CityBlockIndex.class,
              net.osmand.binary.OsmandOdb.CityBlockIndex.Builder.class);
          internal_static_StreetIndex_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_StreetIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_StreetIndex_descriptor,
              new java.lang.String[] { "Name", "NameEn", "X", "Y", "Id", "Buildings", "Intersections", },
              net.osmand.binary.OsmandOdb.StreetIndex.class,
              net.osmand.binary.OsmandOdb.StreetIndex.Builder.class);
          internal_static_StreetIntersection_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_StreetIntersection_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_StreetIntersection_descriptor,
              new java.lang.String[] { "Name", "NameEn", "IntersectedX", "IntersectedY", },
              net.osmand.binary.OsmandOdb.StreetIntersection.class,
              net.osmand.binary.OsmandOdb.StreetIntersection.Builder.class);
          internal_static_BuildingIndex_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_BuildingIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BuildingIndex_descriptor,
              new java.lang.String[] { "Name", "NameEn", "Name2", "NameEn2", "Interpolation", "X", "Y", "X2", "Y2", "Id", "Postcode", },
              net.osmand.binary.OsmandOdb.BuildingIndex.class,
              net.osmand.binary.OsmandOdb.BuildingIndex.Builder.class);
          internal_static_TransportRoutes_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_TransportRoutes_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportRoutes_descriptor,
              new java.lang.String[] { "Routes", },
              net.osmand.binary.OsmandOdb.TransportRoutes.class,
              net.osmand.binary.OsmandOdb.TransportRoutes.Builder.class);
          internal_static_TransportRoute_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_TransportRoute_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportRoute_descriptor,
              new java.lang.String[] { "Id", "Type", "Operator", "Ref", "Name", "NameEn", "Distance", "DirectStops", "ReverseStops", },
              net.osmand.binary.OsmandOdb.TransportRoute.class,
              net.osmand.binary.OsmandOdb.TransportRoute.Builder.class);
          internal_static_TransportRouteStop_descriptor =
            getDescriptor().getMessageTypes().get(17);
          internal_static_TransportRouteStop_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportRouteStop_descriptor,
              new java.lang.String[] { "Id", "Dx", "Dy", "Name", "NameEn", },
              net.osmand.binary.OsmandOdb.TransportRouteStop.class,
              net.osmand.binary.OsmandOdb.TransportRouteStop.Builder.class);
          internal_static_TransportStop_descriptor =
            getDescriptor().getMessageTypes().get(18);
          internal_static_TransportStop_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportStop_descriptor,
              new java.lang.String[] { "Dx", "Dy", "Id", "Name", "NameEn", "Routes", },
              net.osmand.binary.OsmandOdb.TransportStop.class,
              net.osmand.binary.OsmandOdb.TransportStop.Builder.class);
          internal_static_TransportStopsTree_descriptor =
            getDescriptor().getMessageTypes().get(19);
          internal_static_TransportStopsTree_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportStopsTree_descriptor,
              new java.lang.String[] { "Left", "Right", "Top", "Bottom", "Subtrees", "Leafs", "BaseId", },
              net.osmand.binary.OsmandOdb.TransportStopsTree.class,
              net.osmand.binary.OsmandOdb.TransportStopsTree.Builder.class);
          internal_static_OsmAndTransportIndex_descriptor =
            getDescriptor().getMessageTypes().get(20);
          internal_static_OsmAndTransportIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndTransportIndex_descriptor,
              new java.lang.String[] { "Name", "Routes", "Stops", "StringTable", },
              net.osmand.binary.OsmandOdb.OsmAndTransportIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder.class);
          internal_static_OsmAndPoiIndex_descriptor =
            getDescriptor().getMessageTypes().get(21);
          internal_static_OsmAndPoiIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiIndex_descriptor,
              new java.lang.String[] { "Name", "Boundaries", "CategoriesTable", "NameIndex", "Boxes", "PoiData", },
              net.osmand.binary.OsmandOdb.OsmAndPoiIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder.class);
          internal_static_OsmAndPoiNameIndex_descriptor =
            getDescriptor().getMessageTypes().get(22);
          internal_static_OsmAndPoiNameIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiNameIndex_descriptor,
              new java.lang.String[] { "Table", "Data", },
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder.class);
          internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_descriptor =
            internal_static_OsmAndPoiNameIndex_descriptor.getNestedTypes().get(0);
          internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiNameIndex_OsmAndPoiNameIndexData_descriptor,
              new java.lang.String[] { "Atoms", },
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.OsmAndPoiNameIndexData.Builder.class);
          internal_static_OsmAndPoiNameIndexDataAtom_descriptor =
            getDescriptor().getMessageTypes().get(23);
          internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiNameIndexDataAtom_descriptor,
              new java.lang.String[] { "Zoom", "X", "Y", "ShiftTo", },
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder.class);
          internal_static_OsmAndCategoryTable_descriptor =
            getDescriptor().getMessageTypes().get(24);
          internal_static_OsmAndCategoryTable_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndCategoryTable_descriptor,
              new java.lang.String[] { "Category", "Subcategories", },
              net.osmand.binary.OsmandOdb.OsmAndCategoryTable.class,
              net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder.class);
          internal_static_OsmAndPoiBox_descriptor =
            getDescriptor().getMessageTypes().get(25);
          internal_static_OsmAndPoiBox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiBox_descriptor,
              new java.lang.String[] { "Zoom", "Left", "Top", "Categories", "SubBoxes", "ShiftToData", },
              net.osmand.binary.OsmandOdb.OsmAndPoiBox.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder.class);
          internal_static_OsmAndPoiCategories_descriptor =
            getDescriptor().getMessageTypes().get(26);
          internal_static_OsmAndPoiCategories_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiCategories_descriptor,
              new java.lang.String[] { "Categories", },
              net.osmand.binary.OsmandOdb.OsmAndPoiCategories.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder.class);
          internal_static_OsmAndPoiBoxData_descriptor =
            getDescriptor().getMessageTypes().get(27);
          internal_static_OsmAndPoiBoxData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiBoxData_descriptor,
              new java.lang.String[] { "Zoom", "X", "Y", "PoiData", },
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder.class);
          internal_static_OsmAndPoiBoxDataAtom_descriptor =
            getDescriptor().getMessageTypes().get(28);
          internal_static_OsmAndPoiBoxDataAtom_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiBoxDataAtom_descriptor,
              new java.lang.String[] { "Dx", "Dy", "Categories", "Name", "NameEn", "Id", "OpeningHours", "Site", "Phone", "Note", },
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder.class);
          internal_static_IdTable_descriptor =
            getDescriptor().getMessageTypes().get(29);
          internal_static_IdTable_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_IdTable_descriptor,
              new java.lang.String[] { "RouteId", },
              net.osmand.binary.OsmandOdb.IdTable.class,
              net.osmand.binary.OsmandOdb.IdTable.Builder.class);
          internal_static_RestrictionData_descriptor =
            getDescriptor().getMessageTypes().get(30);
          internal_static_RestrictionData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_RestrictionData_descriptor,
              new java.lang.String[] { "Type", "From", "To", "Via", },
              net.osmand.binary.OsmandOdb.RestrictionData.class,
              net.osmand.binary.OsmandOdb.RestrictionData.Builder.class);
          internal_static_RouteData_descriptor =
            getDescriptor().getMessageTypes().get(31);
          internal_static_RouteData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_RouteData_descriptor,
              new java.lang.String[] { "Points", "PointTypes", "Types", "RouteId", "StringNames", },
              net.osmand.binary.OsmandOdb.RouteData.class,
              net.osmand.binary.OsmandOdb.RouteData.Builder.class);
          internal_static_OsmAndRoutingIndex_descriptor =
            getDescriptor().getMessageTypes().get(32);
          internal_static_OsmAndRoutingIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndRoutingIndex_descriptor,
              new java.lang.String[] { "Name", "Rules", "RootBoxes", "BasemapBoxes", "BorderBox", "BaseBorderBox", "Blocks", },
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.Builder.class);
          internal_static_OsmAndRoutingIndex_RouteEncodingRule_descriptor =
            internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(0);
          internal_static_OsmAndRoutingIndex_RouteEncodingRule_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndRoutingIndex_RouteEncodingRule_descriptor,
              new java.lang.String[] { "Tag", "Value", "Id", },
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.class,
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteEncodingRule.Builder.class);
          internal_static_OsmAndRoutingIndex_RouteDataBox_descriptor =
            internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(1);
          internal_static_OsmAndRoutingIndex_RouteDataBox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndRoutingIndex_RouteDataBox_descriptor,
              new java.lang.String[] { "Left", "Right", "Top", "Bottom", "ShiftToData", "Boxes", },
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.class,
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBox.Builder.class);
          internal_static_OsmAndRoutingIndex_RouteDataBlock_descriptor =
            internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(2);
          internal_static_OsmAndRoutingIndex_RouteDataBlock_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndRoutingIndex_RouteDataBlock_descriptor,
              new java.lang.String[] { "IdTable", "StringTable", "DataObjects", "Restrictions", },
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.class,
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteDataBlock.Builder.class);
          internal_static_OsmAndRoutingIndex_RouteBorderBox_descriptor =
            internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(3);
          internal_static_OsmAndRoutingIndex_RouteBorderBox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndRoutingIndex_RouteBorderBox_descriptor,
              new java.lang.String[] { "Boundaries", "TileZoomToSplit", "BorderLines", "Blocks", },
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.class,
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderBox.Builder.class);
          internal_static_OsmAndRoutingIndex_RouteBorderLine_descriptor =
            internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(4);
          internal_static_OsmAndRoutingIndex_RouteBorderLine_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndRoutingIndex_RouteBorderLine_descriptor,
              new java.lang.String[] { "X", "Y", "Tox", "Toy", "ShiftToPointsBlock", },
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.class,
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderLine.Builder.class);
          internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_descriptor =
            internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(5);
          internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndRoutingIndex_RouteBorderPointsBlock_descriptor,
              new java.lang.String[] { "X", "Y", "BaseId", "Points", },
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.class,
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPointsBlock.Builder.class);
          internal_static_OsmAndRoutingIndex_RouteBorderPoint_descriptor =
            internal_static_OsmAndRoutingIndex_descriptor.getNestedTypes().get(6);
          internal_static_OsmAndRoutingIndex_RouteBorderPoint_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndRoutingIndex_RouteBorderPoint_descriptor,
              new java.lang.String[] { "Dx", "Dy", "Direction", "Types", "RoadId", },
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.class,
              net.osmand.binary.OsmandOdb.OsmAndRoutingIndex.RouteBorderPoint.Builder.class);
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
  }
  
  public static void internalForceInit() {}
  
  // @@protoc_insertion_point(outer_class_scope)
}
