yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass Maven / Gradle / Ivy
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: yandex/cloud/apploadbalancer/v1/virtual_host.proto
package yandex.cloud.api.apploadbalancer.v1;
public final class VirtualHostOuterClass {
  private VirtualHostOuterClass() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  public interface VirtualHostOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.VirtualHost)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Name of the virtual host. The name is unique within the HTTP router.
     * 
     *
     * string name = 1 [(.yandex.cloud.required) = true];
     * @return The name.
     */
    java.lang.String getName();
    /**
     * 
     * Name of the virtual host. The name is unique within the HTTP router.
     * 
     *
     * string name = 1 [(.yandex.cloud.required) = true];
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();
    /**
     * 
     * List of domains that are attributed to the virtual host.
     * The host is selected to process the request received by the load balancer
     * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
     * specified in the host.
     * A wildcard asterisk character (`*`) matches 0 or more characters.
     * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
     * An HTTP router must not contain more than one virtual host to which all domains are attributed.
     * 
     *
     * repeated string authority = 2;
     * @return A list containing the authority.
     */
    java.util.List
        getAuthorityList();
    /**
     * 
     * List of domains that are attributed to the virtual host.
     * The host is selected to process the request received by the load balancer
     * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
     * specified in the host.
     * A wildcard asterisk character (`*`) matches 0 or more characters.
     * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
     * An HTTP router must not contain more than one virtual host to which all domains are attributed.
     * 
     *
     * repeated string authority = 2;
     * @return The count of authority.
     */
    int getAuthorityCount();
    /**
     * 
     * List of domains that are attributed to the virtual host.
     * The host is selected to process the request received by the load balancer
     * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
     * specified in the host.
     * A wildcard asterisk character (`*`) matches 0 or more characters.
     * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
     * An HTTP router must not contain more than one virtual host to which all domains are attributed.
     * 
     *
     * repeated string authority = 2;
     * @param index The index of the element to return.
     * @return The authority at the given index.
     */
    java.lang.String getAuthority(int index);
    /**
     * 
     * List of domains that are attributed to the virtual host.
     * The host is selected to process the request received by the load balancer
     * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
     * specified in the host.
     * A wildcard asterisk character (`*`) matches 0 or more characters.
     * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
     * An HTTP router must not contain more than one virtual host to which all domains are attributed.
     * 
     *
     * repeated string authority = 2;
     * @param index The index of the value to return.
     * @return The bytes of the authority at the given index.
     */
    com.google.protobuf.ByteString
        getAuthorityBytes(int index);
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    java.util.List 
        getRoutesList();
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route getRoutes(int index);
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    int getRoutesCount();
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder> 
        getRoutesOrBuilderList();
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder getRoutesOrBuilder(
        int index);
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    java.util.List 
        getModifyRequestHeadersList();
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyRequestHeaders(int index);
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    int getModifyRequestHeadersCount();
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
        getModifyRequestHeadersOrBuilderList();
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyRequestHeadersOrBuilder(
        int index);
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    java.util.List 
        getModifyResponseHeadersList();
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyResponseHeaders(int index);
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    int getModifyResponseHeadersCount();
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
        getModifyResponseHeadersOrBuilderList();
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyResponseHeadersOrBuilder(
        int index);
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
     * @return Whether the routeOptions field is set.
     */
    boolean hasRouteOptions();
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
     * @return The routeOptions.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getRouteOptions();
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder getRouteOptionsOrBuilder();
  }
  /**
   * 
   * A virtual host resource.
   * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#virtual-host).
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.VirtualHost}
   */
  public static final class VirtualHost extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.VirtualHost)
      VirtualHostOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use VirtualHost.newBuilder() to construct.
    private VirtualHost(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private VirtualHost() {
      name_ = "";
      authority_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      routes_ = java.util.Collections.emptyList();
      modifyRequestHeaders_ = java.util.Collections.emptyList();
      modifyResponseHeaders_ = java.util.Collections.emptyList();
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new VirtualHost();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private VirtualHost(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              name_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                authority_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              authority_.add(s);
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                routes_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              routes_.add(
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.parser(), extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
                modifyRequestHeaders_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              modifyRequestHeaders_.add(
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.parser(), extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
                modifyResponseHeaders_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              modifyResponseHeaders_.add(
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.parser(), extensionRegistry));
              break;
            }
            case 50: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder subBuilder = null;
              if (routeOptions_ != null) {
                subBuilder = routeOptions_.toBuilder();
              }
              routeOptions_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(routeOptions_);
                routeOptions_ = subBuilder.buildPartial();
              }
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          authority_ = authority_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          routes_ = java.util.Collections.unmodifiableList(routes_);
        }
        if (((mutable_bitField0_ & 0x00000004) != 0)) {
          modifyRequestHeaders_ = java.util.Collections.unmodifiableList(modifyRequestHeaders_);
        }
        if (((mutable_bitField0_ & 0x00000008) != 0)) {
          modifyResponseHeaders_ = java.util.Collections.unmodifiableList(modifyResponseHeaders_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost.Builder.class);
    }
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * 
     * Name of the virtual host. The name is unique within the HTTP router.
     * 
     *
     * string name = 1 [(.yandex.cloud.required) = true];
     * @return The name.
     */
    @java.lang.Override
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * 
     * Name of the virtual host. The name is unique within the HTTP router.
     * 
     *
     * string name = 1 [(.yandex.cloud.required) = true];
     * @return The bytes for name.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int AUTHORITY_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList authority_;
    /**
     * 
     * List of domains that are attributed to the virtual host.
     * The host is selected to process the request received by the load balancer
     * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
     * specified in the host.
     * A wildcard asterisk character (`*`) matches 0 or more characters.
     * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
     * An HTTP router must not contain more than one virtual host to which all domains are attributed.
     * 
     *
     * repeated string authority = 2;
     * @return A list containing the authority.
     */
    public com.google.protobuf.ProtocolStringList
        getAuthorityList() {
      return authority_;
    }
    /**
     * 
     * List of domains that are attributed to the virtual host.
     * The host is selected to process the request received by the load balancer
     * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
     * specified in the host.
     * A wildcard asterisk character (`*`) matches 0 or more characters.
     * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
     * An HTTP router must not contain more than one virtual host to which all domains are attributed.
     * 
     *
     * repeated string authority = 2;
     * @return The count of authority.
     */
    public int getAuthorityCount() {
      return authority_.size();
    }
    /**
     * 
     * List of domains that are attributed to the virtual host.
     * The host is selected to process the request received by the load balancer
     * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
     * specified in the host.
     * A wildcard asterisk character (`*`) matches 0 or more characters.
     * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
     * An HTTP router must not contain more than one virtual host to which all domains are attributed.
     * 
     *
     * repeated string authority = 2;
     * @param index The index of the element to return.
     * @return The authority at the given index.
     */
    public java.lang.String getAuthority(int index) {
      return authority_.get(index);
    }
    /**
     * 
     * List of domains that are attributed to the virtual host.
     * The host is selected to process the request received by the load balancer
     * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
     * specified in the host.
     * A wildcard asterisk character (`*`) matches 0 or more characters.
     * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
     * An HTTP router must not contain more than one virtual host to which all domains are attributed.
     * 
     *
     * repeated string authority = 2;
     * @param index The index of the value to return.
     * @return The bytes of the authority at the given index.
     */
    public com.google.protobuf.ByteString
        getAuthorityBytes(int index) {
      return authority_.getByteString(index);
    }
    public static final int ROUTES_FIELD_NUMBER = 3;
    private java.util.List routes_;
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    @java.lang.Override
    public java.util.List getRoutesList() {
      return routes_;
    }
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    @java.lang.Override
    public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder> 
        getRoutesOrBuilderList() {
      return routes_;
    }
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    @java.lang.Override
    public int getRoutesCount() {
      return routes_.size();
    }
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route getRoutes(int index) {
      return routes_.get(index);
    }
    /**
     * 
     * Routes of the virtual host.
     * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
     * for the request and an action on the request.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * The order of routes matters: the first route whose predicate matches the request is selected.
     * The most specific routes should be at the top of the list, so that they are not overridden.
     * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
     * other routes are never matched.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder getRoutesOrBuilder(
        int index) {
      return routes_.get(index);
    }
    public static final int MODIFY_REQUEST_HEADERS_FIELD_NUMBER = 4;
    private java.util.List modifyRequestHeaders_;
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    @java.lang.Override
    public java.util.List getModifyRequestHeadersList() {
      return modifyRequestHeaders_;
    }
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    @java.lang.Override
    public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
        getModifyRequestHeadersOrBuilderList() {
      return modifyRequestHeaders_;
    }
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    @java.lang.Override
    public int getModifyRequestHeadersCount() {
      return modifyRequestHeaders_.size();
    }
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyRequestHeaders(int index) {
      return modifyRequestHeaders_.get(index);
    }
    /**
     * 
     * Deprecated, use route_options.modify_request_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyRequestHeadersOrBuilder(
        int index) {
      return modifyRequestHeaders_.get(index);
    }
    public static final int MODIFY_RESPONSE_HEADERS_FIELD_NUMBER = 5;
    private java.util.List modifyResponseHeaders_;
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    @java.lang.Override
    public java.util.List getModifyResponseHeadersList() {
      return modifyResponseHeaders_;
    }
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    @java.lang.Override
    public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
        getModifyResponseHeadersOrBuilderList() {
      return modifyResponseHeaders_;
    }
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    @java.lang.Override
    public int getModifyResponseHeadersCount() {
      return modifyResponseHeaders_.size();
    }
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyResponseHeaders(int index) {
      return modifyResponseHeaders_.get(index);
    }
    /**
     * 
     * Deprecated, use route_options.modify_response_headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyResponseHeadersOrBuilder(
        int index) {
      return modifyResponseHeaders_.get(index);
    }
    public static final int ROUTE_OPTIONS_FIELD_NUMBER = 6;
    private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions routeOptions_;
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
     * @return Whether the routeOptions field is set.
     */
    @java.lang.Override
    public boolean hasRouteOptions() {
      return routeOptions_ != null;
    }
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
     * @return The routeOptions.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getRouteOptions() {
      return routeOptions_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.getDefaultInstance() : routeOptions_;
    }
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder getRouteOptionsOrBuilder() {
      return getRouteOptions();
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      for (int i = 0; i < authority_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, authority_.getRaw(i));
      }
      for (int i = 0; i < routes_.size(); i++) {
        output.writeMessage(3, routes_.get(i));
      }
      for (int i = 0; i < modifyRequestHeaders_.size(); i++) {
        output.writeMessage(4, modifyRequestHeaders_.get(i));
      }
      for (int i = 0; i < modifyResponseHeaders_.size(); i++) {
        output.writeMessage(5, modifyResponseHeaders_.get(i));
      }
      if (routeOptions_ != null) {
        output.writeMessage(6, getRouteOptions());
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < authority_.size(); i++) {
          dataSize += computeStringSizeNoTag(authority_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getAuthorityList().size();
      }
      for (int i = 0; i < routes_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, routes_.get(i));
      }
      for (int i = 0; i < modifyRequestHeaders_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, modifyRequestHeaders_.get(i));
      }
      for (int i = 0; i < modifyResponseHeaders_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, modifyResponseHeaders_.get(i));
      }
      if (routeOptions_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getRouteOptions());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost) obj;
      if (!getName()
          .equals(other.getName())) return false;
      if (!getAuthorityList()
          .equals(other.getAuthorityList())) return false;
      if (!getRoutesList()
          .equals(other.getRoutesList())) return false;
      if (!getModifyRequestHeadersList()
          .equals(other.getModifyRequestHeadersList())) return false;
      if (!getModifyResponseHeadersList()
          .equals(other.getModifyResponseHeadersList())) return false;
      if (hasRouteOptions() != other.hasRouteOptions()) return false;
      if (hasRouteOptions()) {
        if (!getRouteOptions()
            .equals(other.getRouteOptions())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      if (getAuthorityCount() > 0) {
        hash = (37 * hash) + AUTHORITY_FIELD_NUMBER;
        hash = (53 * hash) + getAuthorityList().hashCode();
      }
      if (getRoutesCount() > 0) {
        hash = (37 * hash) + ROUTES_FIELD_NUMBER;
        hash = (53 * hash) + getRoutesList().hashCode();
      }
      if (getModifyRequestHeadersCount() > 0) {
        hash = (37 * hash) + MODIFY_REQUEST_HEADERS_FIELD_NUMBER;
        hash = (53 * hash) + getModifyRequestHeadersList().hashCode();
      }
      if (getModifyResponseHeadersCount() > 0) {
        hash = (37 * hash) + MODIFY_RESPONSE_HEADERS_FIELD_NUMBER;
        hash = (53 * hash) + getModifyResponseHeadersList().hashCode();
      }
      if (hasRouteOptions()) {
        hash = (37 * hash) + ROUTE_OPTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getRouteOptions().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A virtual host resource.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#virtual-host).
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.VirtualHost}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.VirtualHost)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHostOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getRoutesFieldBuilder();
          getModifyRequestHeadersFieldBuilder();
          getModifyResponseHeadersFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";
        authority_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (routesBuilder_ == null) {
          routes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          routesBuilder_.clear();
        }
        if (modifyRequestHeadersBuilder_ == null) {
          modifyRequestHeaders_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          modifyRequestHeadersBuilder_.clear();
        }
        if (modifyResponseHeadersBuilder_ == null) {
          modifyResponseHeaders_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          modifyResponseHeadersBuilder_.clear();
        }
        if (routeOptionsBuilder_ == null) {
          routeOptions_ = null;
        } else {
          routeOptions_ = null;
          routeOptionsBuilder_ = null;
        }
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost(this);
        int from_bitField0_ = bitField0_;
        result.name_ = name_;
        if (((bitField0_ & 0x00000001) != 0)) {
          authority_ = authority_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.authority_ = authority_;
        if (routesBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            routes_ = java.util.Collections.unmodifiableList(routes_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.routes_ = routes_;
        } else {
          result.routes_ = routesBuilder_.build();
        }
        if (modifyRequestHeadersBuilder_ == null) {
          if (((bitField0_ & 0x00000004) != 0)) {
            modifyRequestHeaders_ = java.util.Collections.unmodifiableList(modifyRequestHeaders_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.modifyRequestHeaders_ = modifyRequestHeaders_;
        } else {
          result.modifyRequestHeaders_ = modifyRequestHeadersBuilder_.build();
        }
        if (modifyResponseHeadersBuilder_ == null) {
          if (((bitField0_ & 0x00000008) != 0)) {
            modifyResponseHeaders_ = java.util.Collections.unmodifiableList(modifyResponseHeaders_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.modifyResponseHeaders_ = modifyResponseHeaders_;
        } else {
          result.modifyResponseHeaders_ = modifyResponseHeadersBuilder_.build();
        }
        if (routeOptionsBuilder_ == null) {
          result.routeOptions_ = routeOptions_;
        } else {
          result.routeOptions_ = routeOptionsBuilder_.build();
        }
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (!other.authority_.isEmpty()) {
          if (authority_.isEmpty()) {
            authority_ = other.authority_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureAuthorityIsMutable();
            authority_.addAll(other.authority_);
          }
          onChanged();
        }
        if (routesBuilder_ == null) {
          if (!other.routes_.isEmpty()) {
            if (routes_.isEmpty()) {
              routes_ = other.routes_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureRoutesIsMutable();
              routes_.addAll(other.routes_);
            }
            onChanged();
          }
        } else {
          if (!other.routes_.isEmpty()) {
            if (routesBuilder_.isEmpty()) {
              routesBuilder_.dispose();
              routesBuilder_ = null;
              routes_ = other.routes_;
              bitField0_ = (bitField0_ & ~0x00000002);
              routesBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getRoutesFieldBuilder() : null;
            } else {
              routesBuilder_.addAllMessages(other.routes_);
            }
          }
        }
        if (modifyRequestHeadersBuilder_ == null) {
          if (!other.modifyRequestHeaders_.isEmpty()) {
            if (modifyRequestHeaders_.isEmpty()) {
              modifyRequestHeaders_ = other.modifyRequestHeaders_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureModifyRequestHeadersIsMutable();
              modifyRequestHeaders_.addAll(other.modifyRequestHeaders_);
            }
            onChanged();
          }
        } else {
          if (!other.modifyRequestHeaders_.isEmpty()) {
            if (modifyRequestHeadersBuilder_.isEmpty()) {
              modifyRequestHeadersBuilder_.dispose();
              modifyRequestHeadersBuilder_ = null;
              modifyRequestHeaders_ = other.modifyRequestHeaders_;
              bitField0_ = (bitField0_ & ~0x00000004);
              modifyRequestHeadersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getModifyRequestHeadersFieldBuilder() : null;
            } else {
              modifyRequestHeadersBuilder_.addAllMessages(other.modifyRequestHeaders_);
            }
          }
        }
        if (modifyResponseHeadersBuilder_ == null) {
          if (!other.modifyResponseHeaders_.isEmpty()) {
            if (modifyResponseHeaders_.isEmpty()) {
              modifyResponseHeaders_ = other.modifyResponseHeaders_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureModifyResponseHeadersIsMutable();
              modifyResponseHeaders_.addAll(other.modifyResponseHeaders_);
            }
            onChanged();
          }
        } else {
          if (!other.modifyResponseHeaders_.isEmpty()) {
            if (modifyResponseHeadersBuilder_.isEmpty()) {
              modifyResponseHeadersBuilder_.dispose();
              modifyResponseHeadersBuilder_ = null;
              modifyResponseHeaders_ = other.modifyResponseHeaders_;
              bitField0_ = (bitField0_ & ~0x00000008);
              modifyResponseHeadersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getModifyResponseHeadersFieldBuilder() : null;
            } else {
              modifyResponseHeadersBuilder_.addAllMessages(other.modifyResponseHeaders_);
            }
          }
        }
        if (other.hasRouteOptions()) {
          mergeRouteOptions(other.getRouteOptions());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;
      private java.lang.Object name_ = "";
      /**
       * 
       * Name of the virtual host. The name is unique within the HTTP router.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Name of the virtual host. The name is unique within the HTTP router.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Name of the virtual host. The name is unique within the HTTP router.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Name of the virtual host. The name is unique within the HTTP router.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return This builder for chaining.
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * 
       * Name of the virtual host. The name is unique within the HTTP router.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }
      private com.google.protobuf.LazyStringList authority_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureAuthorityIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          authority_ = new com.google.protobuf.LazyStringArrayList(authority_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @return A list containing the authority.
       */
      public com.google.protobuf.ProtocolStringList
          getAuthorityList() {
        return authority_.getUnmodifiableView();
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @return The count of authority.
       */
      public int getAuthorityCount() {
        return authority_.size();
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @param index The index of the element to return.
       * @return The authority at the given index.
       */
      public java.lang.String getAuthority(int index) {
        return authority_.get(index);
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @param index The index of the value to return.
       * @return The bytes of the authority at the given index.
       */
      public com.google.protobuf.ByteString
          getAuthorityBytes(int index) {
        return authority_.getByteString(index);
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @param index The index to set the value at.
       * @param value The authority to set.
       * @return This builder for chaining.
       */
      public Builder setAuthority(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAuthorityIsMutable();
        authority_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @param value The authority to add.
       * @return This builder for chaining.
       */
      public Builder addAuthority(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAuthorityIsMutable();
        authority_.add(value);
        onChanged();
        return this;
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @param values The authority to add.
       * @return This builder for chaining.
       */
      public Builder addAllAuthority(
          java.lang.Iterable values) {
        ensureAuthorityIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, authority_);
        onChanged();
        return this;
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @return This builder for chaining.
       */
      public Builder clearAuthority() {
        authority_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * 
       * List of domains that are attributed to the virtual host.
       * The host is selected to process the request received by the load balancer
       * if the domain specified in the HTTP/1.1 `Host` header or the HTTP/2 `:authority` pseudo-header matches a domain
       * specified in the host.
       * A wildcard asterisk character (`*`) matches 0 or more characters.
       * If not specified, all domains are attributed to the host, which is the same as specifying a `*` value.
       * An HTTP router must not contain more than one virtual host to which all domains are attributed.
       * 
       *
       * repeated string authority = 2;
       * @param value The bytes of the authority to add.
       * @return This builder for chaining.
       */
      public Builder addAuthorityBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureAuthorityIsMutable();
        authority_.add(value);
        onChanged();
        return this;
      }
      private java.util.List routes_ =
        java.util.Collections.emptyList();
      private void ensureRoutesIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          routes_ = new java.util.ArrayList(routes_);
          bitField0_ |= 0x00000002;
         }
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder> routesBuilder_;
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public java.util.List getRoutesList() {
        if (routesBuilder_ == null) {
          return java.util.Collections.unmodifiableList(routes_);
        } else {
          return routesBuilder_.getMessageList();
        }
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public int getRoutesCount() {
        if (routesBuilder_ == null) {
          return routes_.size();
        } else {
          return routesBuilder_.getCount();
        }
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route getRoutes(int index) {
        if (routesBuilder_ == null) {
          return routes_.get(index);
        } else {
          return routesBuilder_.getMessage(index);
        }
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder setRoutes(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route value) {
        if (routesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRoutesIsMutable();
          routes_.set(index, value);
          onChanged();
        } else {
          routesBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder setRoutes(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder builderForValue) {
        if (routesBuilder_ == null) {
          ensureRoutesIsMutable();
          routes_.set(index, builderForValue.build());
          onChanged();
        } else {
          routesBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder addRoutes(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route value) {
        if (routesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRoutesIsMutable();
          routes_.add(value);
          onChanged();
        } else {
          routesBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder addRoutes(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route value) {
        if (routesBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRoutesIsMutable();
          routes_.add(index, value);
          onChanged();
        } else {
          routesBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder addRoutes(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder builderForValue) {
        if (routesBuilder_ == null) {
          ensureRoutesIsMutable();
          routes_.add(builderForValue.build());
          onChanged();
        } else {
          routesBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder addRoutes(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder builderForValue) {
        if (routesBuilder_ == null) {
          ensureRoutesIsMutable();
          routes_.add(index, builderForValue.build());
          onChanged();
        } else {
          routesBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder addAllRoutes(
          java.lang.Iterable extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route> values) {
        if (routesBuilder_ == null) {
          ensureRoutesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, routes_);
          onChanged();
        } else {
          routesBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder clearRoutes() {
        if (routesBuilder_ == null) {
          routes_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          routesBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public Builder removeRoutes(int index) {
        if (routesBuilder_ == null) {
          ensureRoutesIsMutable();
          routes_.remove(index);
          onChanged();
        } else {
          routesBuilder_.remove(index);
        }
        return this;
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder getRoutesBuilder(
          int index) {
        return getRoutesFieldBuilder().getBuilder(index);
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder getRoutesOrBuilder(
          int index) {
        if (routesBuilder_ == null) {
          return routes_.get(index);  } else {
          return routesBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder> 
           getRoutesOrBuilderList() {
        if (routesBuilder_ != null) {
          return routesBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(routes_);
        }
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder addRoutesBuilder() {
        return getRoutesFieldBuilder().addBuilder(
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.getDefaultInstance());
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder addRoutesBuilder(
          int index) {
        return getRoutesFieldBuilder().addBuilder(
            index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.getDefaultInstance());
      }
      /**
       * 
       * Routes of the virtual host.
       * A route contains a set of conditions (predicates) that are used by the load balancer to select the route
       * for the request and an action on the request.
       * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
       * The order of routes matters: the first route whose predicate matches the request is selected.
       * The most specific routes should be at the top of the list, so that they are not overridden.
       * For example, if the first HTTP route is configured, via [HttpRoute.match], to match paths prefixed with just `/`,
       * other routes are never matched.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Route routes = 3;
       */
      public java.util.List 
           getRoutesBuilderList() {
        return getRoutesFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder> 
          getRoutesFieldBuilder() {
        if (routesBuilder_ == null) {
          routesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder>(
                  routes_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          routes_ = null;
        }
        return routesBuilder_;
      }
      private java.util.List modifyRequestHeaders_ =
        java.util.Collections.emptyList();
      private void ensureModifyRequestHeadersIsMutable() {
        if (!((bitField0_ & 0x00000004) != 0)) {
          modifyRequestHeaders_ = new java.util.ArrayList(modifyRequestHeaders_);
          bitField0_ |= 0x00000004;
         }
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> modifyRequestHeadersBuilder_;
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public java.util.List getModifyRequestHeadersList() {
        if (modifyRequestHeadersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(modifyRequestHeaders_);
        } else {
          return modifyRequestHeadersBuilder_.getMessageList();
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public int getModifyRequestHeadersCount() {
        if (modifyRequestHeadersBuilder_ == null) {
          return modifyRequestHeaders_.size();
        } else {
          return modifyRequestHeadersBuilder_.getCount();
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyRequestHeaders(int index) {
        if (modifyRequestHeadersBuilder_ == null) {
          return modifyRequestHeaders_.get(index);
        } else {
          return modifyRequestHeadersBuilder_.getMessage(index);
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder setModifyRequestHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyRequestHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.set(index, value);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder setModifyRequestHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.set(index, builderForValue.build());
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder addModifyRequestHeaders(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyRequestHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.add(value);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder addModifyRequestHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyRequestHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.add(index, value);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder addModifyRequestHeaders(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.add(builderForValue.build());
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder addModifyRequestHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.add(index, builderForValue.build());
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder addAllModifyRequestHeaders(
          java.lang.Iterable extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification> values) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, modifyRequestHeaders_);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder clearModifyRequestHeaders() {
        if (modifyRequestHeadersBuilder_ == null) {
          modifyRequestHeaders_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public Builder removeModifyRequestHeaders(int index) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.remove(index);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder getModifyRequestHeadersBuilder(
          int index) {
        return getModifyRequestHeadersFieldBuilder().getBuilder(index);
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyRequestHeadersOrBuilder(
          int index) {
        if (modifyRequestHeadersBuilder_ == null) {
          return modifyRequestHeaders_.get(index);  } else {
          return modifyRequestHeadersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
           getModifyRequestHeadersOrBuilderList() {
        if (modifyRequestHeadersBuilder_ != null) {
          return modifyRequestHeadersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(modifyRequestHeaders_);
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder addModifyRequestHeadersBuilder() {
        return getModifyRequestHeadersFieldBuilder().addBuilder(
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance());
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder addModifyRequestHeadersBuilder(
          int index) {
        return getModifyRequestHeadersFieldBuilder().addBuilder(
            index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance());
      }
      /**
       * 
       * Deprecated, use route_options.modify_request_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 4;
       */
      public java.util.List 
           getModifyRequestHeadersBuilderList() {
        return getModifyRequestHeadersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
          getModifyRequestHeadersFieldBuilder() {
        if (modifyRequestHeadersBuilder_ == null) {
          modifyRequestHeadersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder>(
                  modifyRequestHeaders_,
                  ((bitField0_ & 0x00000004) != 0),
                  getParentForChildren(),
                  isClean());
          modifyRequestHeaders_ = null;
        }
        return modifyRequestHeadersBuilder_;
      }
      private java.util.List modifyResponseHeaders_ =
        java.util.Collections.emptyList();
      private void ensureModifyResponseHeadersIsMutable() {
        if (!((bitField0_ & 0x00000008) != 0)) {
          modifyResponseHeaders_ = new java.util.ArrayList(modifyResponseHeaders_);
          bitField0_ |= 0x00000008;
         }
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> modifyResponseHeadersBuilder_;
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public java.util.List getModifyResponseHeadersList() {
        if (modifyResponseHeadersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(modifyResponseHeaders_);
        } else {
          return modifyResponseHeadersBuilder_.getMessageList();
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public int getModifyResponseHeadersCount() {
        if (modifyResponseHeadersBuilder_ == null) {
          return modifyResponseHeaders_.size();
        } else {
          return modifyResponseHeadersBuilder_.getCount();
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyResponseHeaders(int index) {
        if (modifyResponseHeadersBuilder_ == null) {
          return modifyResponseHeaders_.get(index);
        } else {
          return modifyResponseHeadersBuilder_.getMessage(index);
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder setModifyResponseHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyResponseHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.set(index, value);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder setModifyResponseHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.set(index, builderForValue.build());
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder addModifyResponseHeaders(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyResponseHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.add(value);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder addModifyResponseHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyResponseHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.add(index, value);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder addModifyResponseHeaders(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.add(builderForValue.build());
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder addModifyResponseHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.add(index, builderForValue.build());
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder addAllModifyResponseHeaders(
          java.lang.Iterable extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification> values) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, modifyResponseHeaders_);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder clearModifyResponseHeaders() {
        if (modifyResponseHeadersBuilder_ == null) {
          modifyResponseHeaders_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public Builder removeModifyResponseHeaders(int index) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.remove(index);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder getModifyResponseHeadersBuilder(
          int index) {
        return getModifyResponseHeadersFieldBuilder().getBuilder(index);
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyResponseHeadersOrBuilder(
          int index) {
        if (modifyResponseHeadersBuilder_ == null) {
          return modifyResponseHeaders_.get(index);  } else {
          return modifyResponseHeadersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
           getModifyResponseHeadersOrBuilderList() {
        if (modifyResponseHeadersBuilder_ != null) {
          return modifyResponseHeadersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(modifyResponseHeaders_);
        }
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder addModifyResponseHeadersBuilder() {
        return getModifyResponseHeadersFieldBuilder().addBuilder(
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance());
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder addModifyResponseHeadersBuilder(
          int index) {
        return getModifyResponseHeadersFieldBuilder().addBuilder(
            index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance());
      }
      /**
       * 
       * Deprecated, use route_options.modify_response_headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 5;
       */
      public java.util.List 
           getModifyResponseHeadersBuilderList() {
        return getModifyResponseHeadersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
          getModifyResponseHeadersFieldBuilder() {
        if (modifyResponseHeadersBuilder_ == null) {
          modifyResponseHeadersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder>(
                  modifyResponseHeaders_,
                  ((bitField0_ & 0x00000008) != 0),
                  getParentForChildren(),
                  isClean());
          modifyResponseHeaders_ = null;
        }
        return modifyResponseHeadersBuilder_;
      }
      private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions routeOptions_;
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder> routeOptionsBuilder_;
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       * @return Whether the routeOptions field is set.
       */
      public boolean hasRouteOptions() {
        return routeOptionsBuilder_ != null || routeOptions_ != null;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       * @return The routeOptions.
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getRouteOptions() {
        if (routeOptionsBuilder_ == null) {
          return routeOptions_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.getDefaultInstance() : routeOptions_;
        } else {
          return routeOptionsBuilder_.getMessage();
        }
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       */
      public Builder setRouteOptions(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions value) {
        if (routeOptionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          routeOptions_ = value;
          onChanged();
        } else {
          routeOptionsBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       */
      public Builder setRouteOptions(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder builderForValue) {
        if (routeOptionsBuilder_ == null) {
          routeOptions_ = builderForValue.build();
          onChanged();
        } else {
          routeOptionsBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       */
      public Builder mergeRouteOptions(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions value) {
        if (routeOptionsBuilder_ == null) {
          if (routeOptions_ != null) {
            routeOptions_ =
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.newBuilder(routeOptions_).mergeFrom(value).buildPartial();
          } else {
            routeOptions_ = value;
          }
          onChanged();
        } else {
          routeOptionsBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       */
      public Builder clearRouteOptions() {
        if (routeOptionsBuilder_ == null) {
          routeOptions_ = null;
          onChanged();
        } else {
          routeOptions_ = null;
          routeOptionsBuilder_ = null;
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder getRouteOptionsBuilder() {
        
        onChanged();
        return getRouteOptionsFieldBuilder().getBuilder();
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder getRouteOptionsOrBuilder() {
        if (routeOptionsBuilder_ != null) {
          return routeOptionsBuilder_.getMessageOrBuilder();
        } else {
          return routeOptions_ == null ?
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.getDefaultInstance() : routeOptions_;
        }
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 6;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder> 
          getRouteOptionsFieldBuilder() {
        if (routeOptionsBuilder_ == null) {
          routeOptionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder>(
                  getRouteOptions(),
                  getParentForChildren(),
                  isClean());
          routeOptions_ = null;
        }
        return routeOptionsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.VirtualHost)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.VirtualHost)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public VirtualHost parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new VirtualHost(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.VirtualHost getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface RouteOptionsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.RouteOptions)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    java.util.List 
        getModifyRequestHeadersList();
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyRequestHeaders(int index);
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    int getModifyRequestHeadersCount();
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
        getModifyRequestHeadersOrBuilderList();
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyRequestHeadersOrBuilder(
        int index);
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    java.util.List 
        getModifyResponseHeadersList();
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyResponseHeaders(int index);
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    int getModifyResponseHeadersCount();
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
        getModifyResponseHeadersOrBuilderList();
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyResponseHeadersOrBuilder(
        int index);
    /**
     * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
     * @return Whether the rbac field is set.
     */
    boolean hasRbac();
    /**
     * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
     * @return The rbac.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC getRbac();
    /**
     * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBACOrBuilder getRbacOrBuilder();
  }
  /**
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.RouteOptions}
   */
  public static final class RouteOptions extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.RouteOptions)
      RouteOptionsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RouteOptions.newBuilder() to construct.
    private RouteOptions(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private RouteOptions() {
      modifyRequestHeaders_ = java.util.Collections.emptyList();
      modifyResponseHeaders_ = java.util.Collections.emptyList();
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new RouteOptions();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RouteOptions(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                modifyRequestHeaders_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              modifyRequestHeaders_.add(
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.parser(), extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                modifyResponseHeaders_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              modifyResponseHeaders_.add(
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.parser(), extensionRegistry));
              break;
            }
            case 26: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Builder subBuilder = null;
              if (rbac_ != null) {
                subBuilder = rbac_.toBuilder();
              }
              rbac_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rbac_);
                rbac_ = subBuilder.buildPartial();
              }
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          modifyRequestHeaders_ = java.util.Collections.unmodifiableList(modifyRequestHeaders_);
        }
        if (((mutable_bitField0_ & 0x00000002) != 0)) {
          modifyResponseHeaders_ = java.util.Collections.unmodifiableList(modifyResponseHeaders_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder.class);
    }
    public static final int MODIFY_REQUEST_HEADERS_FIELD_NUMBER = 1;
    private java.util.List modifyRequestHeaders_;
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    @java.lang.Override
    public java.util.List getModifyRequestHeadersList() {
      return modifyRequestHeaders_;
    }
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    @java.lang.Override
    public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
        getModifyRequestHeadersOrBuilderList() {
      return modifyRequestHeaders_;
    }
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    @java.lang.Override
    public int getModifyRequestHeadersCount() {
      return modifyRequestHeaders_.size();
    }
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyRequestHeaders(int index) {
      return modifyRequestHeaders_.get(index);
    }
    /**
     * 
     * Apply the following modifications to the request headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyRequestHeadersOrBuilder(
        int index) {
      return modifyRequestHeaders_.get(index);
    }
    public static final int MODIFY_RESPONSE_HEADERS_FIELD_NUMBER = 2;
    private java.util.List modifyResponseHeaders_;
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    @java.lang.Override
    public java.util.List getModifyResponseHeadersList() {
      return modifyResponseHeaders_;
    }
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    @java.lang.Override
    public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
        getModifyResponseHeadersOrBuilderList() {
      return modifyResponseHeaders_;
    }
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    @java.lang.Override
    public int getModifyResponseHeadersCount() {
      return modifyResponseHeaders_.size();
    }
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyResponseHeaders(int index) {
      return modifyResponseHeaders_.get(index);
    }
    /**
     * 
     * Apply the following modifications to the response headers.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyResponseHeadersOrBuilder(
        int index) {
      return modifyResponseHeaders_.get(index);
    }
    public static final int RBAC_FIELD_NUMBER = 3;
    private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC rbac_;
    /**
     * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
     * @return Whether the rbac field is set.
     */
    @java.lang.Override
    public boolean hasRbac() {
      return rbac_ != null;
    }
    /**
     * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
     * @return The rbac.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC getRbac() {
      return rbac_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.getDefaultInstance() : rbac_;
    }
    /**
     * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBACOrBuilder getRbacOrBuilder() {
      return getRbac();
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < modifyRequestHeaders_.size(); i++) {
        output.writeMessage(1, modifyRequestHeaders_.get(i));
      }
      for (int i = 0; i < modifyResponseHeaders_.size(); i++) {
        output.writeMessage(2, modifyResponseHeaders_.get(i));
      }
      if (rbac_ != null) {
        output.writeMessage(3, getRbac());
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      for (int i = 0; i < modifyRequestHeaders_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, modifyRequestHeaders_.get(i));
      }
      for (int i = 0; i < modifyResponseHeaders_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, modifyResponseHeaders_.get(i));
      }
      if (rbac_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getRbac());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions) obj;
      if (!getModifyRequestHeadersList()
          .equals(other.getModifyRequestHeadersList())) return false;
      if (!getModifyResponseHeadersList()
          .equals(other.getModifyResponseHeadersList())) return false;
      if (hasRbac() != other.hasRbac()) return false;
      if (hasRbac()) {
        if (!getRbac()
            .equals(other.getRbac())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getModifyRequestHeadersCount() > 0) {
        hash = (37 * hash) + MODIFY_REQUEST_HEADERS_FIELD_NUMBER;
        hash = (53 * hash) + getModifyRequestHeadersList().hashCode();
      }
      if (getModifyResponseHeadersCount() > 0) {
        hash = (37 * hash) + MODIFY_RESPONSE_HEADERS_FIELD_NUMBER;
        hash = (53 * hash) + getModifyResponseHeadersList().hashCode();
      }
      if (hasRbac()) {
        hash = (37 * hash) + RBAC_FIELD_NUMBER;
        hash = (53 * hash) + getRbac().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.RouteOptions}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.RouteOptions)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getModifyRequestHeadersFieldBuilder();
          getModifyResponseHeadersFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (modifyRequestHeadersBuilder_ == null) {
          modifyRequestHeaders_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          modifyRequestHeadersBuilder_.clear();
        }
        if (modifyResponseHeadersBuilder_ == null) {
          modifyResponseHeaders_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          modifyResponseHeadersBuilder_.clear();
        }
        if (rbacBuilder_ == null) {
          rbac_ = null;
        } else {
          rbac_ = null;
          rbacBuilder_ = null;
        }
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions(this);
        int from_bitField0_ = bitField0_;
        if (modifyRequestHeadersBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            modifyRequestHeaders_ = java.util.Collections.unmodifiableList(modifyRequestHeaders_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.modifyRequestHeaders_ = modifyRequestHeaders_;
        } else {
          result.modifyRequestHeaders_ = modifyRequestHeadersBuilder_.build();
        }
        if (modifyResponseHeadersBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            modifyResponseHeaders_ = java.util.Collections.unmodifiableList(modifyResponseHeaders_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.modifyResponseHeaders_ = modifyResponseHeaders_;
        } else {
          result.modifyResponseHeaders_ = modifyResponseHeadersBuilder_.build();
        }
        if (rbacBuilder_ == null) {
          result.rbac_ = rbac_;
        } else {
          result.rbac_ = rbacBuilder_.build();
        }
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.getDefaultInstance()) return this;
        if (modifyRequestHeadersBuilder_ == null) {
          if (!other.modifyRequestHeaders_.isEmpty()) {
            if (modifyRequestHeaders_.isEmpty()) {
              modifyRequestHeaders_ = other.modifyRequestHeaders_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureModifyRequestHeadersIsMutable();
              modifyRequestHeaders_.addAll(other.modifyRequestHeaders_);
            }
            onChanged();
          }
        } else {
          if (!other.modifyRequestHeaders_.isEmpty()) {
            if (modifyRequestHeadersBuilder_.isEmpty()) {
              modifyRequestHeadersBuilder_.dispose();
              modifyRequestHeadersBuilder_ = null;
              modifyRequestHeaders_ = other.modifyRequestHeaders_;
              bitField0_ = (bitField0_ & ~0x00000001);
              modifyRequestHeadersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getModifyRequestHeadersFieldBuilder() : null;
            } else {
              modifyRequestHeadersBuilder_.addAllMessages(other.modifyRequestHeaders_);
            }
          }
        }
        if (modifyResponseHeadersBuilder_ == null) {
          if (!other.modifyResponseHeaders_.isEmpty()) {
            if (modifyResponseHeaders_.isEmpty()) {
              modifyResponseHeaders_ = other.modifyResponseHeaders_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureModifyResponseHeadersIsMutable();
              modifyResponseHeaders_.addAll(other.modifyResponseHeaders_);
            }
            onChanged();
          }
        } else {
          if (!other.modifyResponseHeaders_.isEmpty()) {
            if (modifyResponseHeadersBuilder_.isEmpty()) {
              modifyResponseHeadersBuilder_.dispose();
              modifyResponseHeadersBuilder_ = null;
              modifyResponseHeaders_ = other.modifyResponseHeaders_;
              bitField0_ = (bitField0_ & ~0x00000002);
              modifyResponseHeadersBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getModifyResponseHeadersFieldBuilder() : null;
            } else {
              modifyResponseHeadersBuilder_.addAllMessages(other.modifyResponseHeaders_);
            }
          }
        }
        if (other.hasRbac()) {
          mergeRbac(other.getRbac());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;
      private java.util.List modifyRequestHeaders_ =
        java.util.Collections.emptyList();
      private void ensureModifyRequestHeadersIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          modifyRequestHeaders_ = new java.util.ArrayList(modifyRequestHeaders_);
          bitField0_ |= 0x00000001;
         }
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> modifyRequestHeadersBuilder_;
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public java.util.List getModifyRequestHeadersList() {
        if (modifyRequestHeadersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(modifyRequestHeaders_);
        } else {
          return modifyRequestHeadersBuilder_.getMessageList();
        }
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public int getModifyRequestHeadersCount() {
        if (modifyRequestHeadersBuilder_ == null) {
          return modifyRequestHeaders_.size();
        } else {
          return modifyRequestHeadersBuilder_.getCount();
        }
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyRequestHeaders(int index) {
        if (modifyRequestHeadersBuilder_ == null) {
          return modifyRequestHeaders_.get(index);
        } else {
          return modifyRequestHeadersBuilder_.getMessage(index);
        }
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder setModifyRequestHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyRequestHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.set(index, value);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder setModifyRequestHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.set(index, builderForValue.build());
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder addModifyRequestHeaders(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyRequestHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.add(value);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder addModifyRequestHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyRequestHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.add(index, value);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder addModifyRequestHeaders(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.add(builderForValue.build());
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder addModifyRequestHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.add(index, builderForValue.build());
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder addAllModifyRequestHeaders(
          java.lang.Iterable extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification> values) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, modifyRequestHeaders_);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder clearModifyRequestHeaders() {
        if (modifyRequestHeadersBuilder_ == null) {
          modifyRequestHeaders_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public Builder removeModifyRequestHeaders(int index) {
        if (modifyRequestHeadersBuilder_ == null) {
          ensureModifyRequestHeadersIsMutable();
          modifyRequestHeaders_.remove(index);
          onChanged();
        } else {
          modifyRequestHeadersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder getModifyRequestHeadersBuilder(
          int index) {
        return getModifyRequestHeadersFieldBuilder().getBuilder(index);
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyRequestHeadersOrBuilder(
          int index) {
        if (modifyRequestHeadersBuilder_ == null) {
          return modifyRequestHeaders_.get(index);  } else {
          return modifyRequestHeadersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
           getModifyRequestHeadersOrBuilderList() {
        if (modifyRequestHeadersBuilder_ != null) {
          return modifyRequestHeadersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(modifyRequestHeaders_);
        }
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder addModifyRequestHeadersBuilder() {
        return getModifyRequestHeadersFieldBuilder().addBuilder(
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance());
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder addModifyRequestHeadersBuilder(
          int index) {
        return getModifyRequestHeadersFieldBuilder().addBuilder(
            index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance());
      }
      /**
       * 
       * Apply the following modifications to the request headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_request_headers = 1;
       */
      public java.util.List 
           getModifyRequestHeadersBuilderList() {
        return getModifyRequestHeadersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
          getModifyRequestHeadersFieldBuilder() {
        if (modifyRequestHeadersBuilder_ == null) {
          modifyRequestHeadersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder>(
                  modifyRequestHeaders_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          modifyRequestHeaders_ = null;
        }
        return modifyRequestHeadersBuilder_;
      }
      private java.util.List modifyResponseHeaders_ =
        java.util.Collections.emptyList();
      private void ensureModifyResponseHeadersIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          modifyResponseHeaders_ = new java.util.ArrayList(modifyResponseHeaders_);
          bitField0_ |= 0x00000002;
         }
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> modifyResponseHeadersBuilder_;
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public java.util.List getModifyResponseHeadersList() {
        if (modifyResponseHeadersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(modifyResponseHeaders_);
        } else {
          return modifyResponseHeadersBuilder_.getMessageList();
        }
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public int getModifyResponseHeadersCount() {
        if (modifyResponseHeadersBuilder_ == null) {
          return modifyResponseHeaders_.size();
        } else {
          return modifyResponseHeadersBuilder_.getCount();
        }
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getModifyResponseHeaders(int index) {
        if (modifyResponseHeadersBuilder_ == null) {
          return modifyResponseHeaders_.get(index);
        } else {
          return modifyResponseHeadersBuilder_.getMessage(index);
        }
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder setModifyResponseHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyResponseHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.set(index, value);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder setModifyResponseHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.set(index, builderForValue.build());
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder addModifyResponseHeaders(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyResponseHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.add(value);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder addModifyResponseHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification value) {
        if (modifyResponseHeadersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.add(index, value);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder addModifyResponseHeaders(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.add(builderForValue.build());
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder addModifyResponseHeaders(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder builderForValue) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.add(index, builderForValue.build());
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder addAllModifyResponseHeaders(
          java.lang.Iterable extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification> values) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, modifyResponseHeaders_);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder clearModifyResponseHeaders() {
        if (modifyResponseHeadersBuilder_ == null) {
          modifyResponseHeaders_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public Builder removeModifyResponseHeaders(int index) {
        if (modifyResponseHeadersBuilder_ == null) {
          ensureModifyResponseHeadersIsMutable();
          modifyResponseHeaders_.remove(index);
          onChanged();
        } else {
          modifyResponseHeadersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder getModifyResponseHeadersBuilder(
          int index) {
        return getModifyResponseHeadersFieldBuilder().getBuilder(index);
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder getModifyResponseHeadersOrBuilder(
          int index) {
        if (modifyResponseHeadersBuilder_ == null) {
          return modifyResponseHeaders_.get(index);  } else {
          return modifyResponseHeadersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
           getModifyResponseHeadersOrBuilderList() {
        if (modifyResponseHeadersBuilder_ != null) {
          return modifyResponseHeadersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(modifyResponseHeaders_);
        }
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder addModifyResponseHeadersBuilder() {
        return getModifyResponseHeadersFieldBuilder().addBuilder(
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance());
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder addModifyResponseHeadersBuilder(
          int index) {
        return getModifyResponseHeadersFieldBuilder().addBuilder(
            index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance());
      }
      /**
       * 
       * Apply the following modifications to the response headers.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.HeaderModification modify_response_headers = 2;
       */
      public java.util.List 
           getModifyResponseHeadersBuilderList() {
        return getModifyResponseHeadersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder> 
          getModifyResponseHeadersFieldBuilder() {
        if (modifyResponseHeadersBuilder_ == null) {
          modifyResponseHeadersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder>(
                  modifyResponseHeaders_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          modifyResponseHeaders_ = null;
        }
        return modifyResponseHeadersBuilder_;
      }
      private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC rbac_;
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBACOrBuilder> rbacBuilder_;
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       * @return Whether the rbac field is set.
       */
      public boolean hasRbac() {
        return rbacBuilder_ != null || rbac_ != null;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       * @return The rbac.
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC getRbac() {
        if (rbacBuilder_ == null) {
          return rbac_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.getDefaultInstance() : rbac_;
        } else {
          return rbacBuilder_.getMessage();
        }
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       */
      public Builder setRbac(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC value) {
        if (rbacBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rbac_ = value;
          onChanged();
        } else {
          rbacBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       */
      public Builder setRbac(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Builder builderForValue) {
        if (rbacBuilder_ == null) {
          rbac_ = builderForValue.build();
          onChanged();
        } else {
          rbacBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       */
      public Builder mergeRbac(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC value) {
        if (rbacBuilder_ == null) {
          if (rbac_ != null) {
            rbac_ =
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.newBuilder(rbac_).mergeFrom(value).buildPartial();
          } else {
            rbac_ = value;
          }
          onChanged();
        } else {
          rbacBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       */
      public Builder clearRbac() {
        if (rbacBuilder_ == null) {
          rbac_ = null;
          onChanged();
        } else {
          rbac_ = null;
          rbacBuilder_ = null;
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Builder getRbacBuilder() {
        
        onChanged();
        return getRbacFieldBuilder().getBuilder();
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBACOrBuilder getRbacOrBuilder() {
        if (rbacBuilder_ != null) {
          return rbacBuilder_.getMessageOrBuilder();
        } else {
          return rbac_ == null ?
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.getDefaultInstance() : rbac_;
        }
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RBAC rbac = 3;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBACOrBuilder> 
          getRbacFieldBuilder() {
        if (rbacBuilder_ == null) {
          rbacBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBACOrBuilder>(
                  getRbac(),
                  getParentForChildren(),
                  isClean());
          rbac_ = null;
        }
        return rbacBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.RouteOptions)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.RouteOptions)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public RouteOptions parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RouteOptions(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface RBACOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.RBAC)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * The action to take if a principal matches. Every action either allows or denies a request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
     * @return The enum numeric value on the wire for action.
     */
    int getActionValue();
    /**
     * 
     * The action to take if a principal matches. Every action either allows or denies a request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
     * @return The action.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action getAction();
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    java.util.List 
        getPrincipalsList();
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals getPrincipals(int index);
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    int getPrincipalsCount();
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder> 
        getPrincipalsOrBuilderList();
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder getPrincipalsOrBuilder(
        int index);
  }
  /**
   * 
   * Role Based Access Control (RBAC) provides router, virtual host, and route access control for the ALB
   * service. Requests are allowed or denied based on the `action` and whether a matching principal is
   * found. For instance, if the action is ALLOW and a matching principal is found the request should be
   * allowed.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.RBAC}
   */
  public static final class RBAC extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.RBAC)
      RBACOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RBAC.newBuilder() to construct.
    private RBAC(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private RBAC() {
      action_ = 0;
      principals_ = java.util.Collections.emptyList();
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new RBAC();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RBAC(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              int rawValue = input.readEnum();
              action_ = rawValue;
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                principals_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              principals_.add(
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          principals_ = java.util.Collections.unmodifiableList(principals_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RBAC_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RBAC_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Builder.class);
    }
    /**
     * Protobuf enum {@code yandex.cloud.apploadbalancer.v1.RBAC.Action}
     */
    public enum Action
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * ACTION_UNSPECIFIED = 0;
       */
      ACTION_UNSPECIFIED(0),
      /**
       * 
       * Allows the request if and only if there is a principal that matches the request.
       * 
       *
       * ALLOW = 1;
       */
      ALLOW(1),
      /**
       * 
       * Allows the request if and only if there are no principal that match the request.
       * 
       *
       * DENY = 2;
       */
      DENY(2),
      UNRECOGNIZED(-1),
      ;
      /**
       * ACTION_UNSPECIFIED = 0;
       */
      public static final int ACTION_UNSPECIFIED_VALUE = 0;
      /**
       * 
       * Allows the request if and only if there is a principal that matches the request.
       * 
       *
       * ALLOW = 1;
       */
      public static final int ALLOW_VALUE = 1;
      /**
       * 
       * Allows the request if and only if there are no principal that match the request.
       * 
       *
       * DENY = 2;
       */
      public static final int DENY_VALUE = 2;
      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }
      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Action valueOf(int value) {
        return forNumber(value);
      }
      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Action forNumber(int value) {
        switch (value) {
          case 0: return ACTION_UNSPECIFIED;
          case 1: return ALLOW;
          case 2: return DENY;
          default: return null;
        }
      }
      public static com.google.protobuf.Internal.EnumLiteMap
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Action> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap() {
              public Action findValueByNumber(int number) {
                return Action.forNumber(number);
              }
            };
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.getDescriptor().getEnumTypes().get(0);
      }
      private static final Action[] VALUES = values();
      public static Action valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }
      private final int value;
      private Action(int value) {
        this.value = value;
      }
      // @@protoc_insertion_point(enum_scope:yandex.cloud.apploadbalancer.v1.RBAC.Action)
    }
    public static final int ACTION_FIELD_NUMBER = 1;
    private int action_;
    /**
     * 
     * The action to take if a principal matches. Every action either allows or denies a request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
     * @return The enum numeric value on the wire for action.
     */
    @java.lang.Override public int getActionValue() {
      return action_;
    }
    /**
     * 
     * The action to take if a principal matches. Every action either allows or denies a request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
     * @return The action.
     */
    @java.lang.Override public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action getAction() {
      @SuppressWarnings("deprecation")
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action result = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action.valueOf(action_);
      return result == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action.UNRECOGNIZED : result;
    }
    public static final int PRINCIPALS_FIELD_NUMBER = 2;
    private java.util.List principals_;
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public java.util.List getPrincipalsList() {
      return principals_;
    }
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder> 
        getPrincipalsOrBuilderList() {
      return principals_;
    }
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public int getPrincipalsCount() {
      return principals_.size();
    }
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals getPrincipals(int index) {
      return principals_.get(index);
    }
    /**
     * 
     * Required. A match occurs when at least one matches the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder getPrincipalsOrBuilder(
        int index) {
      return principals_.get(index);
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (action_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action.ACTION_UNSPECIFIED.getNumber()) {
        output.writeEnum(1, action_);
      }
      for (int i = 0; i < principals_.size(); i++) {
        output.writeMessage(2, principals_.get(i));
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (action_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action.ACTION_UNSPECIFIED.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, action_);
      }
      for (int i = 0; i < principals_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, principals_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC) obj;
      if (action_ != other.action_) return false;
      if (!getPrincipalsList()
          .equals(other.getPrincipalsList())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + ACTION_FIELD_NUMBER;
      hash = (53 * hash) + action_;
      if (getPrincipalsCount() > 0) {
        hash = (37 * hash) + PRINCIPALS_FIELD_NUMBER;
        hash = (53 * hash) + getPrincipalsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * Role Based Access Control (RBAC) provides router, virtual host, and route access control for the ALB
     * service. Requests are allowed or denied based on the `action` and whether a matching principal is
     * found. For instance, if the action is ALLOW and a matching principal is found the request should be
     * allowed.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.RBAC}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.RBAC)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBACOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RBAC_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RBAC_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getPrincipalsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        action_ = 0;
        if (principalsBuilder_ == null) {
          principals_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          principalsBuilder_.clear();
        }
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RBAC_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC(this);
        int from_bitField0_ = bitField0_;
        result.action_ = action_;
        if (principalsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            principals_ = java.util.Collections.unmodifiableList(principals_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.principals_ = principals_;
        } else {
          result.principals_ = principalsBuilder_.build();
        }
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.getDefaultInstance()) return this;
        if (other.action_ != 0) {
          setActionValue(other.getActionValue());
        }
        if (principalsBuilder_ == null) {
          if (!other.principals_.isEmpty()) {
            if (principals_.isEmpty()) {
              principals_ = other.principals_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensurePrincipalsIsMutable();
              principals_.addAll(other.principals_);
            }
            onChanged();
          }
        } else {
          if (!other.principals_.isEmpty()) {
            if (principalsBuilder_.isEmpty()) {
              principalsBuilder_.dispose();
              principalsBuilder_ = null;
              principals_ = other.principals_;
              bitField0_ = (bitField0_ & ~0x00000001);
              principalsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getPrincipalsFieldBuilder() : null;
            } else {
              principalsBuilder_.addAllMessages(other.principals_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;
      private int action_ = 0;
      /**
       * 
       * The action to take if a principal matches. Every action either allows or denies a request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
       * @return The enum numeric value on the wire for action.
       */
      @java.lang.Override public int getActionValue() {
        return action_;
      }
      /**
       * 
       * The action to take if a principal matches. Every action either allows or denies a request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
       * @param value The enum numeric value on the wire for action to set.
       * @return This builder for chaining.
       */
      public Builder setActionValue(int value) {
        
        action_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * The action to take if a principal matches. Every action either allows or denies a request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
       * @return The action.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action getAction() {
        @SuppressWarnings("deprecation")
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action result = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action.valueOf(action_);
        return result == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action.UNRECOGNIZED : result;
      }
      /**
       * 
       * The action to take if a principal matches. Every action either allows or denies a request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
       * @param value The action to set.
       * @return This builder for chaining.
       */
      public Builder setAction(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC.Action value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        action_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * 
       * The action to take if a principal matches. Every action either allows or denies a request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RBAC.Action action = 1 [(.yandex.cloud.required) = true];
       * @return This builder for chaining.
       */
      public Builder clearAction() {
        
        action_ = 0;
        onChanged();
        return this;
      }
      private java.util.List principals_ =
        java.util.Collections.emptyList();
      private void ensurePrincipalsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          principals_ = new java.util.ArrayList(principals_);
          bitField0_ |= 0x00000001;
         }
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder> principalsBuilder_;
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public java.util.List getPrincipalsList() {
        if (principalsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(principals_);
        } else {
          return principalsBuilder_.getMessageList();
        }
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public int getPrincipalsCount() {
        if (principalsBuilder_ == null) {
          return principals_.size();
        } else {
          return principalsBuilder_.getCount();
        }
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals getPrincipals(int index) {
        if (principalsBuilder_ == null) {
          return principals_.get(index);
        } else {
          return principalsBuilder_.getMessage(index);
        }
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder setPrincipals(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals value) {
        if (principalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePrincipalsIsMutable();
          principals_.set(index, value);
          onChanged();
        } else {
          principalsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder setPrincipals(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder builderForValue) {
        if (principalsBuilder_ == null) {
          ensurePrincipalsIsMutable();
          principals_.set(index, builderForValue.build());
          onChanged();
        } else {
          principalsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addPrincipals(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals value) {
        if (principalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePrincipalsIsMutable();
          principals_.add(value);
          onChanged();
        } else {
          principalsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addPrincipals(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals value) {
        if (principalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePrincipalsIsMutable();
          principals_.add(index, value);
          onChanged();
        } else {
          principalsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addPrincipals(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder builderForValue) {
        if (principalsBuilder_ == null) {
          ensurePrincipalsIsMutable();
          principals_.add(builderForValue.build());
          onChanged();
        } else {
          principalsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addPrincipals(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder builderForValue) {
        if (principalsBuilder_ == null) {
          ensurePrincipalsIsMutable();
          principals_.add(index, builderForValue.build());
          onChanged();
        } else {
          principalsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addAllPrincipals(
          java.lang.Iterable extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals> values) {
        if (principalsBuilder_ == null) {
          ensurePrincipalsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, principals_);
          onChanged();
        } else {
          principalsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder clearPrincipals() {
        if (principalsBuilder_ == null) {
          principals_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          principalsBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder removePrincipals(int index) {
        if (principalsBuilder_ == null) {
          ensurePrincipalsIsMutable();
          principals_.remove(index);
          onChanged();
        } else {
          principalsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder getPrincipalsBuilder(
          int index) {
        return getPrincipalsFieldBuilder().getBuilder(index);
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder getPrincipalsOrBuilder(
          int index) {
        if (principalsBuilder_ == null) {
          return principals_.get(index);  } else {
          return principalsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder> 
           getPrincipalsOrBuilderList() {
        if (principalsBuilder_ != null) {
          return principalsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(principals_);
        }
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder addPrincipalsBuilder() {
        return getPrincipalsFieldBuilder().addBuilder(
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.getDefaultInstance());
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder addPrincipalsBuilder(
          int index) {
        return getPrincipalsFieldBuilder().addBuilder(
            index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.getDefaultInstance());
      }
      /**
       * 
       * Required. A match occurs when at least one matches the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principals principals = 2 [(.yandex.cloud.size) = ">=1"];
       */
      public java.util.List 
           getPrincipalsBuilderList() {
        return getPrincipalsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder> 
          getPrincipalsFieldBuilder() {
        if (principalsBuilder_ == null) {
          principalsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder>(
                  principals_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          principals_ = null;
        }
        return principalsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.RBAC)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.RBAC)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public RBAC parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RBAC(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RBAC getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface PrincipalsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.Principals)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    java.util.List 
        getAndPrincipalsList();
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal getAndPrincipals(int index);
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    int getAndPrincipalsCount();
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder> 
        getAndPrincipalsOrBuilderList();
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder getAndPrincipalsOrBuilder(
        int index);
  }
  /**
   * 
   * Principals define a group of identities for a request.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.Principals}
   */
  public static final class Principals extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.Principals)
      PrincipalsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Principals.newBuilder() to construct.
    private Principals(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private Principals() {
      andPrincipals_ = java.util.Collections.emptyList();
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Principals();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Principals(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                andPrincipals_ = new java.util.ArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              andPrincipals_.add(
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.parser(), extensionRegistry));
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          andPrincipals_ = java.util.Collections.unmodifiableList(andPrincipals_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principals_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principals_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder.class);
    }
    public static final int AND_PRINCIPALS_FIELD_NUMBER = 1;
    private java.util.List andPrincipals_;
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public java.util.List getAndPrincipalsList() {
      return andPrincipals_;
    }
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder> 
        getAndPrincipalsOrBuilderList() {
      return andPrincipals_;
    }
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public int getAndPrincipalsCount() {
      return andPrincipals_.size();
    }
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal getAndPrincipals(int index) {
      return andPrincipals_.get(index);
    }
    /**
     * 
     * Required. A match occurs when all principals match the request.
     * 
     *
     * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder getAndPrincipalsOrBuilder(
        int index) {
      return andPrincipals_.get(index);
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < andPrincipals_.size(); i++) {
        output.writeMessage(1, andPrincipals_.get(i));
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      for (int i = 0; i < andPrincipals_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, andPrincipals_.get(i));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals) obj;
      if (!getAndPrincipalsList()
          .equals(other.getAndPrincipalsList())) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getAndPrincipalsCount() > 0) {
        hash = (37 * hash) + AND_PRINCIPALS_FIELD_NUMBER;
        hash = (53 * hash) + getAndPrincipalsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * Principals define a group of identities for a request.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.Principals}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.Principals)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principals_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principals_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAndPrincipalsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (andPrincipalsBuilder_ == null) {
          andPrincipals_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          andPrincipalsBuilder_.clear();
        }
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principals_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals(this);
        int from_bitField0_ = bitField0_;
        if (andPrincipalsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) != 0)) {
            andPrincipals_ = java.util.Collections.unmodifiableList(andPrincipals_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.andPrincipals_ = andPrincipals_;
        } else {
          result.andPrincipals_ = andPrincipalsBuilder_.build();
        }
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals.getDefaultInstance()) return this;
        if (andPrincipalsBuilder_ == null) {
          if (!other.andPrincipals_.isEmpty()) {
            if (andPrincipals_.isEmpty()) {
              andPrincipals_ = other.andPrincipals_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureAndPrincipalsIsMutable();
              andPrincipals_.addAll(other.andPrincipals_);
            }
            onChanged();
          }
        } else {
          if (!other.andPrincipals_.isEmpty()) {
            if (andPrincipalsBuilder_.isEmpty()) {
              andPrincipalsBuilder_.dispose();
              andPrincipalsBuilder_ = null;
              andPrincipals_ = other.andPrincipals_;
              bitField0_ = (bitField0_ & ~0x00000001);
              andPrincipalsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAndPrincipalsFieldBuilder() : null;
            } else {
              andPrincipalsBuilder_.addAllMessages(other.andPrincipals_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;
      private java.util.List andPrincipals_ =
        java.util.Collections.emptyList();
      private void ensureAndPrincipalsIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          andPrincipals_ = new java.util.ArrayList(andPrincipals_);
          bitField0_ |= 0x00000001;
         }
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder> andPrincipalsBuilder_;
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public java.util.List getAndPrincipalsList() {
        if (andPrincipalsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(andPrincipals_);
        } else {
          return andPrincipalsBuilder_.getMessageList();
        }
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public int getAndPrincipalsCount() {
        if (andPrincipalsBuilder_ == null) {
          return andPrincipals_.size();
        } else {
          return andPrincipalsBuilder_.getCount();
        }
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal getAndPrincipals(int index) {
        if (andPrincipalsBuilder_ == null) {
          return andPrincipals_.get(index);
        } else {
          return andPrincipalsBuilder_.getMessage(index);
        }
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder setAndPrincipals(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal value) {
        if (andPrincipalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndPrincipalsIsMutable();
          andPrincipals_.set(index, value);
          onChanged();
        } else {
          andPrincipalsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder setAndPrincipals(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder builderForValue) {
        if (andPrincipalsBuilder_ == null) {
          ensureAndPrincipalsIsMutable();
          andPrincipals_.set(index, builderForValue.build());
          onChanged();
        } else {
          andPrincipalsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addAndPrincipals(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal value) {
        if (andPrincipalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndPrincipalsIsMutable();
          andPrincipals_.add(value);
          onChanged();
        } else {
          andPrincipalsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addAndPrincipals(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal value) {
        if (andPrincipalsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndPrincipalsIsMutable();
          andPrincipals_.add(index, value);
          onChanged();
        } else {
          andPrincipalsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addAndPrincipals(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder builderForValue) {
        if (andPrincipalsBuilder_ == null) {
          ensureAndPrincipalsIsMutable();
          andPrincipals_.add(builderForValue.build());
          onChanged();
        } else {
          andPrincipalsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addAndPrincipals(
          int index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder builderForValue) {
        if (andPrincipalsBuilder_ == null) {
          ensureAndPrincipalsIsMutable();
          andPrincipals_.add(index, builderForValue.build());
          onChanged();
        } else {
          andPrincipalsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder addAllAndPrincipals(
          java.lang.Iterable extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal> values) {
        if (andPrincipalsBuilder_ == null) {
          ensureAndPrincipalsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, andPrincipals_);
          onChanged();
        } else {
          andPrincipalsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder clearAndPrincipals() {
        if (andPrincipalsBuilder_ == null) {
          andPrincipals_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          andPrincipalsBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public Builder removeAndPrincipals(int index) {
        if (andPrincipalsBuilder_ == null) {
          ensureAndPrincipalsIsMutable();
          andPrincipals_.remove(index);
          onChanged();
        } else {
          andPrincipalsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder getAndPrincipalsBuilder(
          int index) {
        return getAndPrincipalsFieldBuilder().getBuilder(index);
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder getAndPrincipalsOrBuilder(
          int index) {
        if (andPrincipalsBuilder_ == null) {
          return andPrincipals_.get(index);  } else {
          return andPrincipalsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public java.util.List extends yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder> 
           getAndPrincipalsOrBuilderList() {
        if (andPrincipalsBuilder_ != null) {
          return andPrincipalsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(andPrincipals_);
        }
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder addAndPrincipalsBuilder() {
        return getAndPrincipalsFieldBuilder().addBuilder(
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.getDefaultInstance());
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder addAndPrincipalsBuilder(
          int index) {
        return getAndPrincipalsFieldBuilder().addBuilder(
            index, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.getDefaultInstance());
      }
      /**
       * 
       * Required. A match occurs when all principals match the request.
       * 
       *
       * repeated .yandex.cloud.apploadbalancer.v1.Principal and_principals = 1 [(.yandex.cloud.size) = ">=1"];
       */
      public java.util.List 
           getAndPrincipalsBuilderList() {
        return getAndPrincipalsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder> 
          getAndPrincipalsFieldBuilder() {
        if (andPrincipalsBuilder_ == null) {
          andPrincipalsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder>(
                  andPrincipals_,
                  ((bitField0_ & 0x00000001) != 0),
                  getParentForChildren(),
                  isClean());
          andPrincipals_ = null;
        }
        return andPrincipalsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.Principals)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.Principals)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public Principals parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Principals(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principals getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface PrincipalOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.Principal)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
     * @return Whether the header field is set.
     */
    boolean hasHeader();
    /**
     * 
     * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
     * @return The header.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher getHeader();
    /**
     * 
     * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcherOrBuilder getHeaderOrBuilder();
    /**
     * 
     * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
     * 
     *
     * string remote_ip = 2;
     * @return Whether the remoteIp field is set.
     */
    boolean hasRemoteIp();
    /**
     * 
     * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
     * 
     *
     * string remote_ip = 2;
     * @return The remoteIp.
     */
    java.lang.String getRemoteIp();
    /**
     * 
     * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
     * 
     *
     * string remote_ip = 2;
     * @return The bytes for remoteIp.
     */
    com.google.protobuf.ByteString
        getRemoteIpBytes();
    /**
     * 
     * When any is set, it matches any request.
     * 
     *
     * bool any = 3;
     * @return Whether the any field is set.
     */
    boolean hasAny();
    /**
     * 
     * When any is set, it matches any request.
     * 
     *
     * bool any = 3;
     * @return The any.
     */
    boolean getAny();
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.IdentifierCase getIdentifierCase();
  }
  /**
   * 
   * Principal defines an identity for a request.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.Principal}
   */
  public static final class Principal extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.Principal)
      PrincipalOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Principal.newBuilder() to construct.
    private Principal(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private Principal() {
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Principal();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Principal(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.Builder subBuilder = null;
              if (identifierCase_ == 1) {
                subBuilder = ((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_).toBuilder();
              }
              identifier_ =
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_);
                identifier_ = subBuilder.buildPartial();
              }
              identifierCase_ = 1;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();
              identifierCase_ = 2;
              identifier_ = s;
              break;
            }
            case 24: {
              identifier_ = input.readBool();
              identifierCase_ = 3;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder.class);
    }
    public interface HeaderMatcherOrBuilder extends
        // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher)
        com.google.protobuf.MessageOrBuilder {
      /**
       * 
       * Specifies the name of the header in the request.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return The name.
       */
      java.lang.String getName();
      /**
       * 
       * Specifies the name of the header in the request.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return The bytes for name.
       */
      com.google.protobuf.ByteString
          getNameBytes();
      /**
       * 
       * Specifies how the header match will be performed to route the request.
       * In the absence of value a request that has specified header name will match,
       * regardless of the header's value.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
       * @return Whether the value field is set.
       */
      boolean hasValue();
      /**
       * 
       * Specifies how the header match will be performed to route the request.
       * In the absence of value a request that has specified header name will match,
       * regardless of the header's value.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
       * @return The value.
       */
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getValue();
      /**
       * 
       * Specifies how the header match will be performed to route the request.
       * In the absence of value a request that has specified header name will match,
       * regardless of the header's value.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
       */
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getValueOrBuilder();
    }
    /**
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher}
     */
    public static final class HeaderMatcher extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher)
        HeaderMatcherOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use HeaderMatcher.newBuilder() to construct.
      private HeaderMatcher(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
        super(builder);
      }
      private HeaderMatcher() {
        name_ = "";
      }
      @java.lang.Override
      @SuppressWarnings({"unused"})
      protected java.lang.Object newInstance(
          UnusedPrivateParameter unused) {
        return new HeaderMatcher();
      }
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private HeaderMatcher(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                java.lang.String s = input.readStringRequireUtf8();
                name_ = s;
                break;
              }
              case 18: {
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder subBuilder = null;
                if (value_ != null) {
                  subBuilder = value_.toBuilder();
                }
                value_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.parser(), extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(value_);
                  value_ = subBuilder.buildPartial();
                }
                break;
              }
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.Builder.class);
      }
      public static final int NAME_FIELD_NUMBER = 1;
      private volatile java.lang.Object name_;
      /**
       * 
       * Specifies the name of the header in the request.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return The name.
       */
      @java.lang.Override
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        }
      }
      /**
       * 
       * Specifies the name of the header in the request.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return The bytes for name.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      public static final int VALUE_FIELD_NUMBER = 2;
      private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch value_;
      /**
       * 
       * Specifies how the header match will be performed to route the request.
       * In the absence of value a request that has specified header name will match,
       * regardless of the header's value.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
       * @return Whether the value field is set.
       */
      @java.lang.Override
      public boolean hasValue() {
        return value_ != null;
      }
      /**
       * 
       * Specifies how the header match will be performed to route the request.
       * In the absence of value a request that has specified header name will match,
       * regardless of the header's value.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
       * @return The value.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getValue() {
        return value_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : value_;
      }
      /**
       * 
       * Specifies how the header match will be performed to route the request.
       * In the absence of value a request that has specified header name will match,
       * regardless of the header's value.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getValueOrBuilder() {
        return getValue();
      }
      private byte memoizedIsInitialized = -1;
      @java.lang.Override
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;
        memoizedIsInitialized = 1;
        return true;
      }
      @java.lang.Override
      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
        }
        if (value_ != null) {
          output.writeMessage(2, getValue());
        }
        unknownFields.writeTo(output);
      }
      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;
        size = 0;
        if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
        }
        if (value_ != null) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, getValue());
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }
      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher)) {
          return super.equals(obj);
        }
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) obj;
        if (!getName()
            .equals(other.getName())) return false;
        if (hasValue() != other.hasValue()) return false;
        if (hasValue()) {
          if (!getValue()
              .equals(other.getValue())) return false;
        }
        if (!unknownFields.equals(other.unknownFields)) return false;
        return true;
      }
      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().hashCode();
        if (hasValue()) {
          hash = (37 * hash) + VALUE_FIELD_NUMBER;
          hash = (53 * hash) + getValue().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }
      @java.lang.Override
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      @java.lang.Override
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }
      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder implements
          // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher)
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcherOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_descriptor;
        }
        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.Builder.class);
        }
        // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }
        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          name_ = "";
          if (valueBuilder_ == null) {
            value_ = null;
          } else {
            value_ = null;
            valueBuilder_ = null;
          }
          return this;
        }
        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_descriptor;
        }
        @java.lang.Override
        public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher getDefaultInstanceForType() {
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance();
        }
        @java.lang.Override
        public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher build() {
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }
        @java.lang.Override
        public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher buildPartial() {
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher(this);
          result.name_ = name_;
          if (valueBuilder_ == null) {
            result.value_ = value_;
          } else {
            result.value_ = valueBuilder_.build();
          }
          onBuilt();
          return result;
        }
        @java.lang.Override
        public Builder clone() {
          return super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) {
            return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }
        public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher other) {
          if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance()) return this;
          if (!other.getName().isEmpty()) {
            name_ = other.name_;
            onChanged();
          }
          if (other.hasValue()) {
            mergeValue(other.getValue());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }
        @java.lang.Override
        public final boolean isInitialized() {
          return true;
        }
        @java.lang.Override
        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private java.lang.Object name_ = "";
        /**
         * 
         * Specifies the name of the header in the request.
         * 
         *
         * string name = 1 [(.yandex.cloud.required) = true];
         * @return The name.
         */
        public java.lang.String getName() {
          java.lang.Object ref = name_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            name_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * 
         * Specifies the name of the header in the request.
         * 
         *
         * string name = 1 [(.yandex.cloud.required) = true];
         * @return The bytes for name.
         */
        public com.google.protobuf.ByteString
            getNameBytes() {
          java.lang.Object ref = name_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            name_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * 
         * Specifies the name of the header in the request.
         * 
         *
         * string name = 1 [(.yandex.cloud.required) = true];
         * @param value The name to set.
         * @return This builder for chaining.
         */
        public Builder setName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  
          name_ = value;
          onChanged();
          return this;
        }
        /**
         * 
         * Specifies the name of the header in the request.
         * 
         *
         * string name = 1 [(.yandex.cloud.required) = true];
         * @return This builder for chaining.
         */
        public Builder clearName() {
          
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         * 
         * Specifies the name of the header in the request.
         * 
         *
         * string name = 1 [(.yandex.cloud.required) = true];
         * @param value The bytes for name to set.
         * @return This builder for chaining.
         */
        public Builder setNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
          
          name_ = value;
          onChanged();
          return this;
        }
        private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch value_;
        private com.google.protobuf.SingleFieldBuilderV3<
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder> valueBuilder_;
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         * @return Whether the value field is set.
         */
        public boolean hasValue() {
          return valueBuilder_ != null || value_ != null;
        }
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         * @return The value.
         */
        public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getValue() {
          if (valueBuilder_ == null) {
            return value_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : value_;
          } else {
            return valueBuilder_.getMessage();
          }
        }
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         */
        public Builder setValue(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch value) {
          if (valueBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            value_ = value;
            onChanged();
          } else {
            valueBuilder_.setMessage(value);
          }
          return this;
        }
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         */
        public Builder setValue(
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder builderForValue) {
          if (valueBuilder_ == null) {
            value_ = builderForValue.build();
            onChanged();
          } else {
            valueBuilder_.setMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         */
        public Builder mergeValue(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch value) {
          if (valueBuilder_ == null) {
            if (value_ != null) {
              value_ =
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.newBuilder(value_).mergeFrom(value).buildPartial();
            } else {
              value_ = value;
            }
            onChanged();
          } else {
            valueBuilder_.mergeFrom(value);
          }
          return this;
        }
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         */
        public Builder clearValue() {
          if (valueBuilder_ == null) {
            value_ = null;
            onChanged();
          } else {
            value_ = null;
            valueBuilder_ = null;
          }
          return this;
        }
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         */
        public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder getValueBuilder() {
          
          onChanged();
          return getValueFieldBuilder().getBuilder();
        }
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         */
        public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getValueOrBuilder() {
          if (valueBuilder_ != null) {
            return valueBuilder_.getMessageOrBuilder();
          } else {
            return value_ == null ?
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : value_;
          }
        }
        /**
         * 
         * Specifies how the header match will be performed to route the request.
         * In the absence of value a request that has specified header name will match,
         * regardless of the header's value.
         * 
         *
         * .yandex.cloud.apploadbalancer.v1.StringMatch value = 2;
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder> 
            getValueFieldBuilder() {
          if (valueBuilder_ == null) {
            valueBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder>(
                    getValue(),
                    getParentForChildren(),
                    isClean());
            value_ = null;
          }
          return valueBuilder_;
        }
        @java.lang.Override
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }
        @java.lang.Override
        public final Builder mergeUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.mergeUnknownFields(unknownFields);
        }
        // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher)
      }
      // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher)
      private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher();
      }
      public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }
      private static final com.google.protobuf.Parser
          PARSER = new com.google.protobuf.AbstractParser() {
        @java.lang.Override
        public HeaderMatcher parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new HeaderMatcher(input, extensionRegistry);
        }
      };
      public static com.google.protobuf.Parser parser() {
        return PARSER;
      }
      @java.lang.Override
      public com.google.protobuf.Parser getParserForType() {
        return PARSER;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }
    }
    private int identifierCase_ = 0;
    private java.lang.Object identifier_;
    public enum IdentifierCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      HEADER(1),
      REMOTE_IP(2),
      ANY(3),
      IDENTIFIER_NOT_SET(0);
      private final int value;
      private IdentifierCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static IdentifierCase valueOf(int value) {
        return forNumber(value);
      }
      public static IdentifierCase forNumber(int value) {
        switch (value) {
          case 1: return HEADER;
          case 2: return REMOTE_IP;
          case 3: return ANY;
          case 0: return IDENTIFIER_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public IdentifierCase
    getIdentifierCase() {
      return IdentifierCase.forNumber(
          identifierCase_);
    }
    public static final int HEADER_FIELD_NUMBER = 1;
    /**
     * 
     * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
     * @return Whether the header field is set.
     */
    @java.lang.Override
    public boolean hasHeader() {
      return identifierCase_ == 1;
    }
    /**
     * 
     * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
     * @return The header.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher getHeader() {
      if (identifierCase_ == 1) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance();
    }
    /**
     * 
     * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcherOrBuilder getHeaderOrBuilder() {
      if (identifierCase_ == 1) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance();
    }
    public static final int REMOTE_IP_FIELD_NUMBER = 2;
    /**
     * 
     * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
     * 
     *
     * string remote_ip = 2;
     * @return Whether the remoteIp field is set.
     */
    public boolean hasRemoteIp() {
      return identifierCase_ == 2;
    }
    /**
     * 
     * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
     * 
     *
     * string remote_ip = 2;
     * @return The remoteIp.
     */
    public java.lang.String getRemoteIp() {
      java.lang.Object ref = "";
      if (identifierCase_ == 2) {
        ref = identifier_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (identifierCase_ == 2) {
          identifier_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
     * 
     *
     * string remote_ip = 2;
     * @return The bytes for remoteIp.
     */
    public com.google.protobuf.ByteString
        getRemoteIpBytes() {
      java.lang.Object ref = "";
      if (identifierCase_ == 2) {
        ref = identifier_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (identifierCase_ == 2) {
          identifier_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int ANY_FIELD_NUMBER = 3;
    /**
     * 
     * When any is set, it matches any request.
     * 
     *
     * bool any = 3;
     * @return Whether the any field is set.
     */
    @java.lang.Override
    public boolean hasAny() {
      return identifierCase_ == 3;
    }
    /**
     * 
     * When any is set, it matches any request.
     * 
     *
     * bool any = 3;
     * @return The any.
     */
    @java.lang.Override
    public boolean getAny() {
      if (identifierCase_ == 3) {
        return (java.lang.Boolean) identifier_;
      }
      return false;
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (identifierCase_ == 1) {
        output.writeMessage(1, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_);
      }
      if (identifierCase_ == 2) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, identifier_);
      }
      if (identifierCase_ == 3) {
        output.writeBool(
            3, (boolean)((java.lang.Boolean) identifier_));
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (identifierCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_);
      }
      if (identifierCase_ == 2) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, identifier_);
      }
      if (identifierCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(
              3, (boolean)((java.lang.Boolean) identifier_));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal) obj;
      if (!getIdentifierCase().equals(other.getIdentifierCase())) return false;
      switch (identifierCase_) {
        case 1:
          if (!getHeader()
              .equals(other.getHeader())) return false;
          break;
        case 2:
          if (!getRemoteIp()
              .equals(other.getRemoteIp())) return false;
          break;
        case 3:
          if (getAny()
              != other.getAny()) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (identifierCase_) {
        case 1:
          hash = (37 * hash) + HEADER_FIELD_NUMBER;
          hash = (53 * hash) + getHeader().hashCode();
          break;
        case 2:
          hash = (37 * hash) + REMOTE_IP_FIELD_NUMBER;
          hash = (53 * hash) + getRemoteIp().hashCode();
          break;
        case 3:
          hash = (37 * hash) + ANY_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
              getAny());
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * Principal defines an identity for a request.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.Principal}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.Principal)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.PrincipalOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        identifierCase_ = 0;
        identifier_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Principal_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal(this);
        if (identifierCase_ == 1) {
          if (headerBuilder_ == null) {
            result.identifier_ = identifier_;
          } else {
            result.identifier_ = headerBuilder_.build();
          }
        }
        if (identifierCase_ == 2) {
          result.identifier_ = identifier_;
        }
        if (identifierCase_ == 3) {
          result.identifier_ = identifier_;
        }
        result.identifierCase_ = identifierCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.getDefaultInstance()) return this;
        switch (other.getIdentifierCase()) {
          case HEADER: {
            mergeHeader(other.getHeader());
            break;
          }
          case REMOTE_IP: {
            identifierCase_ = 2;
            identifier_ = other.identifier_;
            onChanged();
            break;
          }
          case ANY: {
            setAny(other.getAny());
            break;
          }
          case IDENTIFIER_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int identifierCase_ = 0;
      private java.lang.Object identifier_;
      public IdentifierCase
          getIdentifierCase() {
        return IdentifierCase.forNumber(
            identifierCase_);
      }
      public Builder clearIdentifier() {
        identifierCase_ = 0;
        identifier_ = null;
        onChanged();
        return this;
      }
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcherOrBuilder> headerBuilder_;
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       * @return Whether the header field is set.
       */
      @java.lang.Override
      public boolean hasHeader() {
        return identifierCase_ == 1;
      }
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       * @return The header.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher getHeader() {
        if (headerBuilder_ == null) {
          if (identifierCase_ == 1) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance();
        } else {
          if (identifierCase_ == 1) {
            return headerBuilder_.getMessage();
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance();
        }
      }
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       */
      public Builder setHeader(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher value) {
        if (headerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          identifier_ = value;
          onChanged();
        } else {
          headerBuilder_.setMessage(value);
        }
        identifierCase_ = 1;
        return this;
      }
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       */
      public Builder setHeader(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.Builder builderForValue) {
        if (headerBuilder_ == null) {
          identifier_ = builderForValue.build();
          onChanged();
        } else {
          headerBuilder_.setMessage(builderForValue.build());
        }
        identifierCase_ = 1;
        return this;
      }
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       */
      public Builder mergeHeader(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher value) {
        if (headerBuilder_ == null) {
          if (identifierCase_ == 1 &&
              identifier_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance()) {
            identifier_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.newBuilder((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_)
                .mergeFrom(value).buildPartial();
          } else {
            identifier_ = value;
          }
          onChanged();
        } else {
          if (identifierCase_ == 1) {
            headerBuilder_.mergeFrom(value);
          }
          headerBuilder_.setMessage(value);
        }
        identifierCase_ = 1;
        return this;
      }
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       */
      public Builder clearHeader() {
        if (headerBuilder_ == null) {
          if (identifierCase_ == 1) {
            identifierCase_ = 0;
            identifier_ = null;
            onChanged();
          }
        } else {
          if (identifierCase_ == 1) {
            identifierCase_ = 0;
            identifier_ = null;
          }
          headerBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.Builder getHeaderBuilder() {
        return getHeaderFieldBuilder().getBuilder();
      }
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcherOrBuilder getHeaderOrBuilder() {
        if ((identifierCase_ == 1) && (headerBuilder_ != null)) {
          return headerBuilder_.getMessageOrBuilder();
        } else {
          if (identifierCase_ == 1) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance();
        }
      }
      /**
       * 
       * A header (or pseudo-header such as :path or :method) of the incoming HTTP request.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Principal.HeaderMatcher header = 1;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcherOrBuilder> 
          getHeaderFieldBuilder() {
        if (headerBuilder_ == null) {
          if (!(identifierCase_ == 1)) {
            identifier_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.getDefaultInstance();
          }
          headerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcherOrBuilder>(
                  (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal.HeaderMatcher) identifier_,
                  getParentForChildren(),
                  isClean());
          identifier_ = null;
        }
        identifierCase_ = 1;
        onChanged();;
        return headerBuilder_;
      }
      /**
       * 
       * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
       * 
       *
       * string remote_ip = 2;
       * @return Whether the remoteIp field is set.
       */
      @java.lang.Override
      public boolean hasRemoteIp() {
        return identifierCase_ == 2;
      }
      /**
       * 
       * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
       * 
       *
       * string remote_ip = 2;
       * @return The remoteIp.
       */
      @java.lang.Override
      public java.lang.String getRemoteIp() {
        java.lang.Object ref = "";
        if (identifierCase_ == 2) {
          ref = identifier_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (identifierCase_ == 2) {
            identifier_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
       * 
       *
       * string remote_ip = 2;
       * @return The bytes for remoteIp.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getRemoteIpBytes() {
        java.lang.Object ref = "";
        if (identifierCase_ == 2) {
          ref = identifier_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (identifierCase_ == 2) {
            identifier_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
       * 
       *
       * string remote_ip = 2;
       * @param value The remoteIp to set.
       * @return This builder for chaining.
       */
      public Builder setRemoteIp(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  identifierCase_ = 2;
        identifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
       * 
       *
       * string remote_ip = 2;
       * @return This builder for chaining.
       */
      public Builder clearRemoteIp() {
        if (identifierCase_ == 2) {
          identifierCase_ = 0;
          identifier_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * A CIDR block or IP that describes the request remote/origin address, e.g. ``192.0.0.0/24`` or``192.0.0.4`` .
       * 
       *
       * string remote_ip = 2;
       * @param value The bytes for remoteIp to set.
       * @return This builder for chaining.
       */
      public Builder setRemoteIpBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        identifierCase_ = 2;
        identifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * When any is set, it matches any request.
       * 
       *
       * bool any = 3;
       * @return Whether the any field is set.
       */
      public boolean hasAny() {
        return identifierCase_ == 3;
      }
      /**
       * 
       * When any is set, it matches any request.
       * 
       *
       * bool any = 3;
       * @return The any.
       */
      public boolean getAny() {
        if (identifierCase_ == 3) {
          return (java.lang.Boolean) identifier_;
        }
        return false;
      }
      /**
       * 
       * When any is set, it matches any request.
       * 
       *
       * bool any = 3;
       * @param value The any to set.
       * @return This builder for chaining.
       */
      public Builder setAny(boolean value) {
        identifierCase_ = 3;
        identifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * When any is set, it matches any request.
       * 
       *
       * bool any = 3;
       * @return This builder for chaining.
       */
      public Builder clearAny() {
        if (identifierCase_ == 3) {
          identifierCase_ = 0;
          identifier_ = null;
          onChanged();
        }
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.Principal)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.Principal)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public Principal parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Principal(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Principal getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface HeaderModificationOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.HeaderModification)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Name of the header.
     * 
     *
     * string name = 1;
     * @return The name.
     */
    java.lang.String getName();
    /**
     * 
     * Name of the header.
     * 
     *
     * string name = 1;
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();
    /**
     * 
     * Appends the specified string to the header value.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string append = 2;
     * @return Whether the append field is set.
     */
    boolean hasAppend();
    /**
     * 
     * Appends the specified string to the header value.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string append = 2;
     * @return The append.
     */
    java.lang.String getAppend();
    /**
     * 
     * Appends the specified string to the header value.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string append = 2;
     * @return The bytes for append.
     */
    com.google.protobuf.ByteString
        getAppendBytes();
    /**
     * 
     * Replaces the value of the header with the specified string.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string replace = 3;
     * @return Whether the replace field is set.
     */
    boolean hasReplace();
    /**
     * 
     * Replaces the value of the header with the specified string.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string replace = 3;
     * @return The replace.
     */
    java.lang.String getReplace();
    /**
     * 
     * Replaces the value of the header with the specified string.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string replace = 3;
     * @return The bytes for replace.
     */
    com.google.protobuf.ByteString
        getReplaceBytes();
    /**
     * 
     * Removes the header.
     * 
     *
     * bool remove = 4;
     * @return Whether the remove field is set.
     */
    boolean hasRemove();
    /**
     * 
     * Removes the header.
     * 
     *
     * bool remove = 4;
     * @return The remove.
     */
    boolean getRemove();
    /**
     * 
     * Replaces the name of the header with the specified string.
     * This operation is only supported for ALB Virtual Hosts.
     * 
     *
     * string rename = 5;
     * @return Whether the rename field is set.
     */
    boolean hasRename();
    /**
     * 
     * Replaces the name of the header with the specified string.
     * This operation is only supported for ALB Virtual Hosts.
     * 
     *
     * string rename = 5;
     * @return The rename.
     */
    java.lang.String getRename();
    /**
     * 
     * Replaces the name of the header with the specified string.
     * This operation is only supported for ALB Virtual Hosts.
     * 
     *
     * string rename = 5;
     * @return The bytes for rename.
     */
    com.google.protobuf.ByteString
        getRenameBytes();
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.OperationCase getOperationCase();
  }
  /**
   * 
   * A header modification resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.HeaderModification}
   */
  public static final class HeaderModification extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.HeaderModification)
      HeaderModificationOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use HeaderModification.newBuilder() to construct.
    private HeaderModification(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private HeaderModification() {
      name_ = "";
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new HeaderModification();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HeaderModification(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              name_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();
              operationCase_ = 2;
              operation_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();
              operationCase_ = 3;
              operation_ = s;
              break;
            }
            case 32: {
              operation_ = input.readBool();
              operationCase_ = 4;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();
              operationCase_ = 5;
              operation_ = s;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder.class);
    }
    private int operationCase_ = 0;
    private java.lang.Object operation_;
    public enum OperationCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      APPEND(2),
      REPLACE(3),
      REMOVE(4),
      RENAME(5),
      OPERATION_NOT_SET(0);
      private final int value;
      private OperationCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static OperationCase valueOf(int value) {
        return forNumber(value);
      }
      public static OperationCase forNumber(int value) {
        switch (value) {
          case 2: return APPEND;
          case 3: return REPLACE;
          case 4: return REMOVE;
          case 5: return RENAME;
          case 0: return OPERATION_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public OperationCase
    getOperationCase() {
      return OperationCase.forNumber(
          operationCase_);
    }
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * 
     * Name of the header.
     * 
     *
     * string name = 1;
     * @return The name.
     */
    @java.lang.Override
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * 
     * Name of the header.
     * 
     *
     * string name = 1;
     * @return The bytes for name.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int APPEND_FIELD_NUMBER = 2;
    /**
     * 
     * Appends the specified string to the header value.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string append = 2;
     * @return Whether the append field is set.
     */
    public boolean hasAppend() {
      return operationCase_ == 2;
    }
    /**
     * 
     * Appends the specified string to the header value.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string append = 2;
     * @return The append.
     */
    public java.lang.String getAppend() {
      java.lang.Object ref = "";
      if (operationCase_ == 2) {
        ref = operation_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (operationCase_ == 2) {
          operation_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Appends the specified string to the header value.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string append = 2;
     * @return The bytes for append.
     */
    public com.google.protobuf.ByteString
        getAppendBytes() {
      java.lang.Object ref = "";
      if (operationCase_ == 2) {
        ref = operation_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (operationCase_ == 2) {
          operation_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int REPLACE_FIELD_NUMBER = 3;
    /**
     * 
     * Replaces the value of the header with the specified string.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string replace = 3;
     * @return Whether the replace field is set.
     */
    public boolean hasReplace() {
      return operationCase_ == 3;
    }
    /**
     * 
     * Replaces the value of the header with the specified string.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string replace = 3;
     * @return The replace.
     */
    public java.lang.String getReplace() {
      java.lang.Object ref = "";
      if (operationCase_ == 3) {
        ref = operation_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (operationCase_ == 3) {
          operation_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Replaces the value of the header with the specified string.
     * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
     * are supported.
     * 
     *
     * string replace = 3;
     * @return The bytes for replace.
     */
    public com.google.protobuf.ByteString
        getReplaceBytes() {
      java.lang.Object ref = "";
      if (operationCase_ == 3) {
        ref = operation_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (operationCase_ == 3) {
          operation_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int REMOVE_FIELD_NUMBER = 4;
    /**
     * 
     * Removes the header.
     * 
     *
     * bool remove = 4;
     * @return Whether the remove field is set.
     */
    @java.lang.Override
    public boolean hasRemove() {
      return operationCase_ == 4;
    }
    /**
     * 
     * Removes the header.
     * 
     *
     * bool remove = 4;
     * @return The remove.
     */
    @java.lang.Override
    public boolean getRemove() {
      if (operationCase_ == 4) {
        return (java.lang.Boolean) operation_;
      }
      return false;
    }
    public static final int RENAME_FIELD_NUMBER = 5;
    /**
     * 
     * Replaces the name of the header with the specified string.
     * This operation is only supported for ALB Virtual Hosts.
     * 
     *
     * string rename = 5;
     * @return Whether the rename field is set.
     */
    public boolean hasRename() {
      return operationCase_ == 5;
    }
    /**
     * 
     * Replaces the name of the header with the specified string.
     * This operation is only supported for ALB Virtual Hosts.
     * 
     *
     * string rename = 5;
     * @return The rename.
     */
    public java.lang.String getRename() {
      java.lang.Object ref = "";
      if (operationCase_ == 5) {
        ref = operation_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (operationCase_ == 5) {
          operation_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Replaces the name of the header with the specified string.
     * This operation is only supported for ALB Virtual Hosts.
     * 
     *
     * string rename = 5;
     * @return The bytes for rename.
     */
    public com.google.protobuf.ByteString
        getRenameBytes() {
      java.lang.Object ref = "";
      if (operationCase_ == 5) {
        ref = operation_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (operationCase_ == 5) {
          operation_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (operationCase_ == 2) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, operation_);
      }
      if (operationCase_ == 3) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, operation_);
      }
      if (operationCase_ == 4) {
        output.writeBool(
            4, (boolean)((java.lang.Boolean) operation_));
      }
      if (operationCase_ == 5) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, operation_);
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (operationCase_ == 2) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, operation_);
      }
      if (operationCase_ == 3) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, operation_);
      }
      if (operationCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(
              4, (boolean)((java.lang.Boolean) operation_));
      }
      if (operationCase_ == 5) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, operation_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification) obj;
      if (!getName()
          .equals(other.getName())) return false;
      if (!getOperationCase().equals(other.getOperationCase())) return false;
      switch (operationCase_) {
        case 2:
          if (!getAppend()
              .equals(other.getAppend())) return false;
          break;
        case 3:
          if (!getReplace()
              .equals(other.getReplace())) return false;
          break;
        case 4:
          if (getRemove()
              != other.getRemove()) return false;
          break;
        case 5:
          if (!getRename()
              .equals(other.getRename())) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      switch (operationCase_) {
        case 2:
          hash = (37 * hash) + APPEND_FIELD_NUMBER;
          hash = (53 * hash) + getAppend().hashCode();
          break;
        case 3:
          hash = (37 * hash) + REPLACE_FIELD_NUMBER;
          hash = (53 * hash) + getReplace().hashCode();
          break;
        case 4:
          hash = (37 * hash) + REMOVE_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
              getRemove());
          break;
        case 5:
          hash = (37 * hash) + RENAME_FIELD_NUMBER;
          hash = (53 * hash) + getRename().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A header modification resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.HeaderModification}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.HeaderModification)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModificationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";
        operationCase_ = 0;
        operation_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification(this);
        result.name_ = name_;
        if (operationCase_ == 2) {
          result.operation_ = operation_;
        }
        if (operationCase_ == 3) {
          result.operation_ = operation_;
        }
        if (operationCase_ == 4) {
          result.operation_ = operation_;
        }
        if (operationCase_ == 5) {
          result.operation_ = operation_;
        }
        result.operationCase_ = operationCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        switch (other.getOperationCase()) {
          case APPEND: {
            operationCase_ = 2;
            operation_ = other.operation_;
            onChanged();
            break;
          }
          case REPLACE: {
            operationCase_ = 3;
            operation_ = other.operation_;
            onChanged();
            break;
          }
          case REMOVE: {
            setRemove(other.getRemove());
            break;
          }
          case RENAME: {
            operationCase_ = 5;
            operation_ = other.operation_;
            onChanged();
            break;
          }
          case OPERATION_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int operationCase_ = 0;
      private java.lang.Object operation_;
      public OperationCase
          getOperationCase() {
        return OperationCase.forNumber(
            operationCase_);
      }
      public Builder clearOperation() {
        operationCase_ = 0;
        operation_ = null;
        onChanged();
        return this;
      }
      private java.lang.Object name_ = "";
      /**
       * 
       * Name of the header.
       * 
       *
       * string name = 1;
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Name of the header.
       * 
       *
       * string name = 1;
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Name of the header.
       * 
       *
       * string name = 1;
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Name of the header.
       * 
       *
       * string name = 1;
       * @return This builder for chaining.
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * 
       * Name of the header.
       * 
       *
       * string name = 1;
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Appends the specified string to the header value.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string append = 2;
       * @return Whether the append field is set.
       */
      @java.lang.Override
      public boolean hasAppend() {
        return operationCase_ == 2;
      }
      /**
       * 
       * Appends the specified string to the header value.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string append = 2;
       * @return The append.
       */
      @java.lang.Override
      public java.lang.String getAppend() {
        java.lang.Object ref = "";
        if (operationCase_ == 2) {
          ref = operation_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (operationCase_ == 2) {
            operation_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Appends the specified string to the header value.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string append = 2;
       * @return The bytes for append.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getAppendBytes() {
        java.lang.Object ref = "";
        if (operationCase_ == 2) {
          ref = operation_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (operationCase_ == 2) {
            operation_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Appends the specified string to the header value.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string append = 2;
       * @param value The append to set.
       * @return This builder for chaining.
       */
      public Builder setAppend(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  operationCase_ = 2;
        operation_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Appends the specified string to the header value.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string append = 2;
       * @return This builder for chaining.
       */
      public Builder clearAppend() {
        if (operationCase_ == 2) {
          operationCase_ = 0;
          operation_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Appends the specified string to the header value.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string append = 2;
       * @param value The bytes for append to set.
       * @return This builder for chaining.
       */
      public Builder setAppendBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        operationCase_ = 2;
        operation_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Replaces the value of the header with the specified string.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string replace = 3;
       * @return Whether the replace field is set.
       */
      @java.lang.Override
      public boolean hasReplace() {
        return operationCase_ == 3;
      }
      /**
       * 
       * Replaces the value of the header with the specified string.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string replace = 3;
       * @return The replace.
       */
      @java.lang.Override
      public java.lang.String getReplace() {
        java.lang.Object ref = "";
        if (operationCase_ == 3) {
          ref = operation_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (operationCase_ == 3) {
            operation_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Replaces the value of the header with the specified string.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string replace = 3;
       * @return The bytes for replace.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getReplaceBytes() {
        java.lang.Object ref = "";
        if (operationCase_ == 3) {
          ref = operation_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (operationCase_ == 3) {
            operation_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Replaces the value of the header with the specified string.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string replace = 3;
       * @param value The replace to set.
       * @return This builder for chaining.
       */
      public Builder setReplace(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  operationCase_ = 3;
        operation_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Replaces the value of the header with the specified string.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string replace = 3;
       * @return This builder for chaining.
       */
      public Builder clearReplace() {
        if (operationCase_ == 3) {
          operationCase_ = 0;
          operation_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Replaces the value of the header with the specified string.
       * Variables [defined for Envoy proxy](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#custom-request-response-headers)
       * are supported.
       * 
       *
       * string replace = 3;
       * @param value The bytes for replace to set.
       * @return This builder for chaining.
       */
      public Builder setReplaceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        operationCase_ = 3;
        operation_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Removes the header.
       * 
       *
       * bool remove = 4;
       * @return Whether the remove field is set.
       */
      public boolean hasRemove() {
        return operationCase_ == 4;
      }
      /**
       * 
       * Removes the header.
       * 
       *
       * bool remove = 4;
       * @return The remove.
       */
      public boolean getRemove() {
        if (operationCase_ == 4) {
          return (java.lang.Boolean) operation_;
        }
        return false;
      }
      /**
       * 
       * Removes the header.
       * 
       *
       * bool remove = 4;
       * @param value The remove to set.
       * @return This builder for chaining.
       */
      public Builder setRemove(boolean value) {
        operationCase_ = 4;
        operation_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Removes the header.
       * 
       *
       * bool remove = 4;
       * @return This builder for chaining.
       */
      public Builder clearRemove() {
        if (operationCase_ == 4) {
          operationCase_ = 0;
          operation_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Replaces the name of the header with the specified string.
       * This operation is only supported for ALB Virtual Hosts.
       * 
       *
       * string rename = 5;
       * @return Whether the rename field is set.
       */
      @java.lang.Override
      public boolean hasRename() {
        return operationCase_ == 5;
      }
      /**
       * 
       * Replaces the name of the header with the specified string.
       * This operation is only supported for ALB Virtual Hosts.
       * 
       *
       * string rename = 5;
       * @return The rename.
       */
      @java.lang.Override
      public java.lang.String getRename() {
        java.lang.Object ref = "";
        if (operationCase_ == 5) {
          ref = operation_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (operationCase_ == 5) {
            operation_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Replaces the name of the header with the specified string.
       * This operation is only supported for ALB Virtual Hosts.
       * 
       *
       * string rename = 5;
       * @return The bytes for rename.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getRenameBytes() {
        java.lang.Object ref = "";
        if (operationCase_ == 5) {
          ref = operation_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (operationCase_ == 5) {
            operation_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Replaces the name of the header with the specified string.
       * This operation is only supported for ALB Virtual Hosts.
       * 
       *
       * string rename = 5;
       * @param value The rename to set.
       * @return This builder for chaining.
       */
      public Builder setRename(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  operationCase_ = 5;
        operation_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Replaces the name of the header with the specified string.
       * This operation is only supported for ALB Virtual Hosts.
       * 
       *
       * string rename = 5;
       * @return This builder for chaining.
       */
      public Builder clearRename() {
        if (operationCase_ == 5) {
          operationCase_ = 0;
          operation_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Replaces the name of the header with the specified string.
       * This operation is only supported for ALB Virtual Hosts.
       * 
       *
       * string rename = 5;
       * @param value The bytes for rename to set.
       * @return This builder for chaining.
       */
      public Builder setRenameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        operationCase_ = 5;
        operation_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.HeaderModification)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.HeaderModification)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public HeaderModification parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new HeaderModification(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HeaderModification getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface RouteOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.Route)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Name of the route.
     * 
     *
     * string name = 1 [(.yandex.cloud.required) = true];
     * @return The name.
     */
    java.lang.String getName();
    /**
     * 
     * Name of the route.
     * 
     *
     * string name = 1 [(.yandex.cloud.required) = true];
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();
    /**
     * 
     * HTTP route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
     * @return Whether the http field is set.
     */
    boolean hasHttp();
    /**
     * 
     * HTTP route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
     * @return The http.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute getHttp();
    /**
     * 
     * HTTP route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteOrBuilder getHttpOrBuilder();
    /**
     * 
     * gRPC route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
     * @return Whether the grpc field is set.
     */
    boolean hasGrpc();
    /**
     * 
     * gRPC route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
     * @return The grpc.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute getGrpc();
    /**
     * 
     * gRPC route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteOrBuilder getGrpcOrBuilder();
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
     * @return Whether the routeOptions field is set.
     */
    boolean hasRouteOptions();
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
     * @return The routeOptions.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getRouteOptions();
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder getRouteOptionsOrBuilder();
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.RouteCase getRouteCase();
  }
  /**
   * 
   * A route resource.
   * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.Route}
   */
  public static final class Route extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.Route)
      RouteOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Route.newBuilder() to construct.
    private Route(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private Route() {
      name_ = "";
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new Route();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Route(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              name_ = s;
              break;
            }
            case 18: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.Builder subBuilder = null;
              if (routeCase_ == 2) {
                subBuilder = ((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_).toBuilder();
              }
              route_ =
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_);
                route_ = subBuilder.buildPartial();
              }
              routeCase_ = 2;
              break;
            }
            case 26: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.Builder subBuilder = null;
              if (routeCase_ == 3) {
                subBuilder = ((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_).toBuilder();
              }
              route_ =
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_);
                route_ = subBuilder.buildPartial();
              }
              routeCase_ = 3;
              break;
            }
            case 34: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder subBuilder = null;
              if (routeOptions_ != null) {
                subBuilder = routeOptions_.toBuilder();
              }
              routeOptions_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(routeOptions_);
                routeOptions_ = subBuilder.buildPartial();
              }
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Route_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Route_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder.class);
    }
    private int routeCase_ = 0;
    private java.lang.Object route_;
    public enum RouteCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      HTTP(2),
      GRPC(3),
      ROUTE_NOT_SET(0);
      private final int value;
      private RouteCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static RouteCase valueOf(int value) {
        return forNumber(value);
      }
      public static RouteCase forNumber(int value) {
        switch (value) {
          case 2: return HTTP;
          case 3: return GRPC;
          case 0: return ROUTE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public RouteCase
    getRouteCase() {
      return RouteCase.forNumber(
          routeCase_);
    }
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * 
     * Name of the route.
     * 
     *
     * string name = 1 [(.yandex.cloud.required) = true];
     * @return The name.
     */
    @java.lang.Override
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * 
     * Name of the route.
     * 
     *
     * string name = 1 [(.yandex.cloud.required) = true];
     * @return The bytes for name.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int HTTP_FIELD_NUMBER = 2;
    /**
     * 
     * HTTP route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
     * @return Whether the http field is set.
     */
    @java.lang.Override
    public boolean hasHttp() {
      return routeCase_ == 2;
    }
    /**
     * 
     * HTTP route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
     * @return The http.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute getHttp() {
      if (routeCase_ == 2) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance();
    }
    /**
     * 
     * HTTP route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteOrBuilder getHttpOrBuilder() {
      if (routeCase_ == 2) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance();
    }
    public static final int GRPC_FIELD_NUMBER = 3;
    /**
     * 
     * gRPC route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
     * @return Whether the grpc field is set.
     */
    @java.lang.Override
    public boolean hasGrpc() {
      return routeCase_ == 3;
    }
    /**
     * 
     * gRPC route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
     * @return The grpc.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute getGrpc() {
      if (routeCase_ == 3) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance();
    }
    /**
     * 
     * gRPC route configuration.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteOrBuilder getGrpcOrBuilder() {
      if (routeCase_ == 3) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance();
    }
    public static final int ROUTE_OPTIONS_FIELD_NUMBER = 4;
    private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions routeOptions_;
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
     * @return Whether the routeOptions field is set.
     */
    @java.lang.Override
    public boolean hasRouteOptions() {
      return routeOptions_ != null;
    }
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
     * @return The routeOptions.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getRouteOptions() {
      return routeOptions_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.getDefaultInstance() : routeOptions_;
    }
    /**
     * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder getRouteOptionsOrBuilder() {
      return getRouteOptions();
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (routeCase_ == 2) {
        output.writeMessage(2, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_);
      }
      if (routeCase_ == 3) {
        output.writeMessage(3, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_);
      }
      if (routeOptions_ != null) {
        output.writeMessage(4, getRouteOptions());
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (routeCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_);
      }
      if (routeCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_);
      }
      if (routeOptions_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getRouteOptions());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route) obj;
      if (!getName()
          .equals(other.getName())) return false;
      if (hasRouteOptions() != other.hasRouteOptions()) return false;
      if (hasRouteOptions()) {
        if (!getRouteOptions()
            .equals(other.getRouteOptions())) return false;
      }
      if (!getRouteCase().equals(other.getRouteCase())) return false;
      switch (routeCase_) {
        case 2:
          if (!getHttp()
              .equals(other.getHttp())) return false;
          break;
        case 3:
          if (!getGrpc()
              .equals(other.getGrpc())) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      if (hasRouteOptions()) {
        hash = (37 * hash) + ROUTE_OPTIONS_FIELD_NUMBER;
        hash = (53 * hash) + getRouteOptions().hashCode();
      }
      switch (routeCase_) {
        case 2:
          hash = (37 * hash) + HTTP_FIELD_NUMBER;
          hash = (53 * hash) + getHttp().hashCode();
          break;
        case 3:
          hash = (37 * hash) + GRPC_FIELD_NUMBER;
          hash = (53 * hash) + getGrpc().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A route resource.
     * For details about the concept, see [documentation](/docs/application-load-balancer/concepts/http-router#routes).
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.Route}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.Route)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Route_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Route_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        name_ = "";
        if (routeOptionsBuilder_ == null) {
          routeOptions_ = null;
        } else {
          routeOptions_ = null;
          routeOptionsBuilder_ = null;
        }
        routeCase_ = 0;
        route_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_Route_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route(this);
        result.name_ = name_;
        if (routeCase_ == 2) {
          if (httpBuilder_ == null) {
            result.route_ = route_;
          } else {
            result.route_ = httpBuilder_.build();
          }
        }
        if (routeCase_ == 3) {
          if (grpcBuilder_ == null) {
            result.route_ = route_;
          } else {
            result.route_ = grpcBuilder_.build();
          }
        }
        if (routeOptionsBuilder_ == null) {
          result.routeOptions_ = routeOptions_;
        } else {
          result.routeOptions_ = routeOptionsBuilder_.build();
        }
        result.routeCase_ = routeCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          onChanged();
        }
        if (other.hasRouteOptions()) {
          mergeRouteOptions(other.getRouteOptions());
        }
        switch (other.getRouteCase()) {
          case HTTP: {
            mergeHttp(other.getHttp());
            break;
          }
          case GRPC: {
            mergeGrpc(other.getGrpc());
            break;
          }
          case ROUTE_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int routeCase_ = 0;
      private java.lang.Object route_;
      public RouteCase
          getRouteCase() {
        return RouteCase.forNumber(
            routeCase_);
      }
      public Builder clearRoute() {
        routeCase_ = 0;
        route_ = null;
        onChanged();
        return this;
      }
      private java.lang.Object name_ = "";
      /**
       * 
       * Name of the route.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Name of the route.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Name of the route.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Name of the route.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @return This builder for chaining.
       */
      public Builder clearName() {
        
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * 
       * Name of the route.
       * 
       *
       * string name = 1 [(.yandex.cloud.required) = true];
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        name_ = value;
        onChanged();
        return this;
      }
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteOrBuilder> httpBuilder_;
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       * @return Whether the http field is set.
       */
      @java.lang.Override
      public boolean hasHttp() {
        return routeCase_ == 2;
      }
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       * @return The http.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute getHttp() {
        if (httpBuilder_ == null) {
          if (routeCase_ == 2) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance();
        } else {
          if (routeCase_ == 2) {
            return httpBuilder_.getMessage();
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance();
        }
      }
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       */
      public Builder setHttp(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute value) {
        if (httpBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          route_ = value;
          onChanged();
        } else {
          httpBuilder_.setMessage(value);
        }
        routeCase_ = 2;
        return this;
      }
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       */
      public Builder setHttp(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.Builder builderForValue) {
        if (httpBuilder_ == null) {
          route_ = builderForValue.build();
          onChanged();
        } else {
          httpBuilder_.setMessage(builderForValue.build());
        }
        routeCase_ = 2;
        return this;
      }
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       */
      public Builder mergeHttp(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute value) {
        if (httpBuilder_ == null) {
          if (routeCase_ == 2 &&
              route_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance()) {
            route_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.newBuilder((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_)
                .mergeFrom(value).buildPartial();
          } else {
            route_ = value;
          }
          onChanged();
        } else {
          if (routeCase_ == 2) {
            httpBuilder_.mergeFrom(value);
          }
          httpBuilder_.setMessage(value);
        }
        routeCase_ = 2;
        return this;
      }
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       */
      public Builder clearHttp() {
        if (httpBuilder_ == null) {
          if (routeCase_ == 2) {
            routeCase_ = 0;
            route_ = null;
            onChanged();
          }
        } else {
          if (routeCase_ == 2) {
            routeCase_ = 0;
            route_ = null;
          }
          httpBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.Builder getHttpBuilder() {
        return getHttpFieldBuilder().getBuilder();
      }
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteOrBuilder getHttpOrBuilder() {
        if ((routeCase_ == 2) && (httpBuilder_ != null)) {
          return httpBuilder_.getMessageOrBuilder();
        } else {
          if (routeCase_ == 2) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance();
        }
      }
      /**
       * 
       * HTTP route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRoute http = 2;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteOrBuilder> 
          getHttpFieldBuilder() {
        if (httpBuilder_ == null) {
          if (!(routeCase_ == 2)) {
            route_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance();
          }
          httpBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteOrBuilder>(
                  (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) route_,
                  getParentForChildren(),
                  isClean());
          route_ = null;
        }
        routeCase_ = 2;
        onChanged();;
        return httpBuilder_;
      }
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteOrBuilder> grpcBuilder_;
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       * @return Whether the grpc field is set.
       */
      @java.lang.Override
      public boolean hasGrpc() {
        return routeCase_ == 3;
      }
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       * @return The grpc.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute getGrpc() {
        if (grpcBuilder_ == null) {
          if (routeCase_ == 3) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance();
        } else {
          if (routeCase_ == 3) {
            return grpcBuilder_.getMessage();
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance();
        }
      }
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       */
      public Builder setGrpc(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute value) {
        if (grpcBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          route_ = value;
          onChanged();
        } else {
          grpcBuilder_.setMessage(value);
        }
        routeCase_ = 3;
        return this;
      }
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       */
      public Builder setGrpc(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.Builder builderForValue) {
        if (grpcBuilder_ == null) {
          route_ = builderForValue.build();
          onChanged();
        } else {
          grpcBuilder_.setMessage(builderForValue.build());
        }
        routeCase_ = 3;
        return this;
      }
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       */
      public Builder mergeGrpc(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute value) {
        if (grpcBuilder_ == null) {
          if (routeCase_ == 3 &&
              route_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance()) {
            route_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.newBuilder((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_)
                .mergeFrom(value).buildPartial();
          } else {
            route_ = value;
          }
          onChanged();
        } else {
          if (routeCase_ == 3) {
            grpcBuilder_.mergeFrom(value);
          }
          grpcBuilder_.setMessage(value);
        }
        routeCase_ = 3;
        return this;
      }
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       */
      public Builder clearGrpc() {
        if (grpcBuilder_ == null) {
          if (routeCase_ == 3) {
            routeCase_ = 0;
            route_ = null;
            onChanged();
          }
        } else {
          if (routeCase_ == 3) {
            routeCase_ = 0;
            route_ = null;
          }
          grpcBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.Builder getGrpcBuilder() {
        return getGrpcFieldBuilder().getBuilder();
      }
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteOrBuilder getGrpcOrBuilder() {
        if ((routeCase_ == 3) && (grpcBuilder_ != null)) {
          return grpcBuilder_.getMessageOrBuilder();
        } else {
          if (routeCase_ == 3) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance();
        }
      }
      /**
       * 
       * gRPC route configuration.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRoute grpc = 3;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteOrBuilder> 
          getGrpcFieldBuilder() {
        if (grpcBuilder_ == null) {
          if (!(routeCase_ == 3)) {
            route_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance();
          }
          grpcBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteOrBuilder>(
                  (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) route_,
                  getParentForChildren(),
                  isClean());
          route_ = null;
        }
        routeCase_ = 3;
        onChanged();;
        return grpcBuilder_;
      }
      private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions routeOptions_;
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder> routeOptionsBuilder_;
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       * @return Whether the routeOptions field is set.
       */
      public boolean hasRouteOptions() {
        return routeOptionsBuilder_ != null || routeOptions_ != null;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       * @return The routeOptions.
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions getRouteOptions() {
        if (routeOptionsBuilder_ == null) {
          return routeOptions_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.getDefaultInstance() : routeOptions_;
        } else {
          return routeOptionsBuilder_.getMessage();
        }
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       */
      public Builder setRouteOptions(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions value) {
        if (routeOptionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          routeOptions_ = value;
          onChanged();
        } else {
          routeOptionsBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       */
      public Builder setRouteOptions(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder builderForValue) {
        if (routeOptionsBuilder_ == null) {
          routeOptions_ = builderForValue.build();
          onChanged();
        } else {
          routeOptionsBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       */
      public Builder mergeRouteOptions(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions value) {
        if (routeOptionsBuilder_ == null) {
          if (routeOptions_ != null) {
            routeOptions_ =
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.newBuilder(routeOptions_).mergeFrom(value).buildPartial();
          } else {
            routeOptions_ = value;
          }
          onChanged();
        } else {
          routeOptionsBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       */
      public Builder clearRouteOptions() {
        if (routeOptionsBuilder_ == null) {
          routeOptions_ = null;
          onChanged();
        } else {
          routeOptions_ = null;
          routeOptionsBuilder_ = null;
        }
        return this;
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder getRouteOptionsBuilder() {
        
        onChanged();
        return getRouteOptionsFieldBuilder().getBuilder();
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder getRouteOptionsOrBuilder() {
        if (routeOptionsBuilder_ != null) {
          return routeOptionsBuilder_.getMessageOrBuilder();
        } else {
          return routeOptions_ == null ?
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.getDefaultInstance() : routeOptions_;
        }
      }
      /**
       * .yandex.cloud.apploadbalancer.v1.RouteOptions route_options = 4;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder> 
          getRouteOptionsFieldBuilder() {
        if (routeOptionsBuilder_ == null) {
          routeOptionsBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptions.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RouteOptionsOrBuilder>(
                  getRouteOptions(),
                  getParentForChildren(),
                  isClean());
          routeOptions_ = null;
        }
        return routeOptionsBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.Route)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.Route)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public Route parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Route(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.Route getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface HttpRouteOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.HttpRoute)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
     * @return Whether the match field is set.
     */
    boolean hasMatch();
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
     * @return The match.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch getMatch();
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatchOrBuilder getMatchOrBuilder();
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
     * @return Whether the route field is set.
     */
    boolean hasRoute();
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
     * @return The route.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction getRoute();
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteActionOrBuilder getRouteOrBuilder();
    /**
     * 
     * Redirects the request as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
     * @return Whether the redirect field is set.
     */
    boolean hasRedirect();
    /**
     * 
     * Redirects the request as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
     * @return The redirect.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction getRedirect();
    /**
     * 
     * Redirects the request as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectActionOrBuilder getRedirectOrBuilder();
    /**
     * 
     * Instructs the load balancer to respond directly as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
     * @return Whether the directResponse field is set.
     */
    boolean hasDirectResponse();
    /**
     * 
     * Instructs the load balancer to respond directly as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
     * @return The directResponse.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction getDirectResponse();
    /**
     * 
     * Instructs the load balancer to respond directly as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseActionOrBuilder getDirectResponseOrBuilder();
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.ActionCase getActionCase();
  }
  /**
   * 
   * An HTTP route configuration resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.HttpRoute}
   */
  public static final class HttpRoute extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.HttpRoute)
      HttpRouteOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use HttpRoute.newBuilder() to construct.
    private HttpRoute(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private HttpRoute() {
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new HttpRoute();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HttpRoute(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.Builder subBuilder = null;
              if (match_ != null) {
                subBuilder = match_.toBuilder();
              }
              match_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(match_);
                match_ = subBuilder.buildPartial();
              }
              break;
            }
            case 18: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.Builder subBuilder = null;
              if (actionCase_ == 2) {
                subBuilder = ((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_).toBuilder();
              }
              action_ =
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_);
                action_ = subBuilder.buildPartial();
              }
              actionCase_ = 2;
              break;
            }
            case 26: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.Builder subBuilder = null;
              if (actionCase_ == 3) {
                subBuilder = ((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_).toBuilder();
              }
              action_ =
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_);
                action_ = subBuilder.buildPartial();
              }
              actionCase_ = 3;
              break;
            }
            case 34: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.Builder subBuilder = null;
              if (actionCase_ == 4) {
                subBuilder = ((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_).toBuilder();
              }
              action_ =
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_);
                action_ = subBuilder.buildPartial();
              }
              actionCase_ = 4;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.Builder.class);
    }
    private int actionCase_ = 0;
    private java.lang.Object action_;
    public enum ActionCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      ROUTE(2),
      REDIRECT(3),
      DIRECT_RESPONSE(4),
      ACTION_NOT_SET(0);
      private final int value;
      private ActionCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ActionCase valueOf(int value) {
        return forNumber(value);
      }
      public static ActionCase forNumber(int value) {
        switch (value) {
          case 2: return ROUTE;
          case 3: return REDIRECT;
          case 4: return DIRECT_RESPONSE;
          case 0: return ACTION_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public ActionCase
    getActionCase() {
      return ActionCase.forNumber(
          actionCase_);
    }
    public static final int MATCH_FIELD_NUMBER = 1;
    private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch match_;
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
     * @return Whether the match field is set.
     */
    @java.lang.Override
    public boolean hasMatch() {
      return match_ != null;
    }
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
     * @return The match.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch getMatch() {
      return match_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.getDefaultInstance() : match_;
    }
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatchOrBuilder getMatchOrBuilder() {
      return getMatch();
    }
    public static final int ROUTE_FIELD_NUMBER = 2;
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
     * @return Whether the route field is set.
     */
    @java.lang.Override
    public boolean hasRoute() {
      return actionCase_ == 2;
    }
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
     * @return The route.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction getRoute() {
      if (actionCase_ == 2) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance();
    }
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteActionOrBuilder getRouteOrBuilder() {
      if (actionCase_ == 2) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance();
    }
    public static final int REDIRECT_FIELD_NUMBER = 3;
    /**
     * 
     * Redirects the request as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
     * @return Whether the redirect field is set.
     */
    @java.lang.Override
    public boolean hasRedirect() {
      return actionCase_ == 3;
    }
    /**
     * 
     * Redirects the request as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
     * @return The redirect.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction getRedirect() {
      if (actionCase_ == 3) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance();
    }
    /**
     * 
     * Redirects the request as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectActionOrBuilder getRedirectOrBuilder() {
      if (actionCase_ == 3) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance();
    }
    public static final int DIRECT_RESPONSE_FIELD_NUMBER = 4;
    /**
     * 
     * Instructs the load balancer to respond directly as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
     * @return Whether the directResponse field is set.
     */
    @java.lang.Override
    public boolean hasDirectResponse() {
      return actionCase_ == 4;
    }
    /**
     * 
     * Instructs the load balancer to respond directly as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
     * @return The directResponse.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction getDirectResponse() {
      if (actionCase_ == 4) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance();
    }
    /**
     * 
     * Instructs the load balancer to respond directly as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseActionOrBuilder getDirectResponseOrBuilder() {
      if (actionCase_ == 4) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (match_ != null) {
        output.writeMessage(1, getMatch());
      }
      if (actionCase_ == 2) {
        output.writeMessage(2, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_);
      }
      if (actionCase_ == 3) {
        output.writeMessage(3, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_);
      }
      if (actionCase_ == 4) {
        output.writeMessage(4, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_);
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (match_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getMatch());
      }
      if (actionCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_);
      }
      if (actionCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_);
      }
      if (actionCase_ == 4) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) obj;
      if (hasMatch() != other.hasMatch()) return false;
      if (hasMatch()) {
        if (!getMatch()
            .equals(other.getMatch())) return false;
      }
      if (!getActionCase().equals(other.getActionCase())) return false;
      switch (actionCase_) {
        case 2:
          if (!getRoute()
              .equals(other.getRoute())) return false;
          break;
        case 3:
          if (!getRedirect()
              .equals(other.getRedirect())) return false;
          break;
        case 4:
          if (!getDirectResponse()
              .equals(other.getDirectResponse())) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMatch()) {
        hash = (37 * hash) + MATCH_FIELD_NUMBER;
        hash = (53 * hash) + getMatch().hashCode();
      }
      switch (actionCase_) {
        case 2:
          hash = (37 * hash) + ROUTE_FIELD_NUMBER;
          hash = (53 * hash) + getRoute().hashCode();
          break;
        case 3:
          hash = (37 * hash) + REDIRECT_FIELD_NUMBER;
          hash = (53 * hash) + getRedirect().hashCode();
          break;
        case 4:
          hash = (37 * hash) + DIRECT_RESPONSE_FIELD_NUMBER;
          hash = (53 * hash) + getDirectResponse().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * An HTTP route configuration resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.HttpRoute}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.HttpRoute)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (matchBuilder_ == null) {
          match_ = null;
        } else {
          match_ = null;
          matchBuilder_ = null;
        }
        actionCase_ = 0;
        action_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute(this);
        if (matchBuilder_ == null) {
          result.match_ = match_;
        } else {
          result.match_ = matchBuilder_.build();
        }
        if (actionCase_ == 2) {
          if (routeBuilder_ == null) {
            result.action_ = action_;
          } else {
            result.action_ = routeBuilder_.build();
          }
        }
        if (actionCase_ == 3) {
          if (redirectBuilder_ == null) {
            result.action_ = action_;
          } else {
            result.action_ = redirectBuilder_.build();
          }
        }
        if (actionCase_ == 4) {
          if (directResponseBuilder_ == null) {
            result.action_ = action_;
          } else {
            result.action_ = directResponseBuilder_.build();
          }
        }
        result.actionCase_ = actionCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute.getDefaultInstance()) return this;
        if (other.hasMatch()) {
          mergeMatch(other.getMatch());
        }
        switch (other.getActionCase()) {
          case ROUTE: {
            mergeRoute(other.getRoute());
            break;
          }
          case REDIRECT: {
            mergeRedirect(other.getRedirect());
            break;
          }
          case DIRECT_RESPONSE: {
            mergeDirectResponse(other.getDirectResponse());
            break;
          }
          case ACTION_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int actionCase_ = 0;
      private java.lang.Object action_;
      public ActionCase
          getActionCase() {
        return ActionCase.forNumber(
            actionCase_);
      }
      public Builder clearAction() {
        actionCase_ = 0;
        action_ = null;
        onChanged();
        return this;
      }
      private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch match_;
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatchOrBuilder> matchBuilder_;
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       * @return Whether the match field is set.
       */
      public boolean hasMatch() {
        return matchBuilder_ != null || match_ != null;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       * @return The match.
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch getMatch() {
        if (matchBuilder_ == null) {
          return match_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.getDefaultInstance() : match_;
        } else {
          return matchBuilder_.getMessage();
        }
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       */
      public Builder setMatch(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch value) {
        if (matchBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          match_ = value;
          onChanged();
        } else {
          matchBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       */
      public Builder setMatch(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.Builder builderForValue) {
        if (matchBuilder_ == null) {
          match_ = builderForValue.build();
          onChanged();
        } else {
          matchBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       */
      public Builder mergeMatch(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch value) {
        if (matchBuilder_ == null) {
          if (match_ != null) {
            match_ =
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.newBuilder(match_).mergeFrom(value).buildPartial();
          } else {
            match_ = value;
          }
          onChanged();
        } else {
          matchBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       */
      public Builder clearMatch() {
        if (matchBuilder_ == null) {
          match_ = null;
          onChanged();
        } else {
          match_ = null;
          matchBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.Builder getMatchBuilder() {
        
        onChanged();
        return getMatchFieldBuilder().getBuilder();
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatchOrBuilder getMatchOrBuilder() {
        if (matchBuilder_ != null) {
          return matchBuilder_.getMessageOrBuilder();
        } else {
          return match_ == null ?
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.getDefaultInstance() : match_;
        }
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteMatch match = 1;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatchOrBuilder> 
          getMatchFieldBuilder() {
        if (matchBuilder_ == null) {
          matchBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatchOrBuilder>(
                  getMatch(),
                  getParentForChildren(),
                  isClean());
          match_ = null;
        }
        return matchBuilder_;
      }
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteActionOrBuilder> routeBuilder_;
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       * @return Whether the route field is set.
       */
      @java.lang.Override
      public boolean hasRoute() {
        return actionCase_ == 2;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       * @return The route.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction getRoute() {
        if (routeBuilder_ == null) {
          if (actionCase_ == 2) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance();
        } else {
          if (actionCase_ == 2) {
            return routeBuilder_.getMessage();
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       */
      public Builder setRoute(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction value) {
        if (routeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          action_ = value;
          onChanged();
        } else {
          routeBuilder_.setMessage(value);
        }
        actionCase_ = 2;
        return this;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       */
      public Builder setRoute(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.Builder builderForValue) {
        if (routeBuilder_ == null) {
          action_ = builderForValue.build();
          onChanged();
        } else {
          routeBuilder_.setMessage(builderForValue.build());
        }
        actionCase_ = 2;
        return this;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       */
      public Builder mergeRoute(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction value) {
        if (routeBuilder_ == null) {
          if (actionCase_ == 2 &&
              action_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance()) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.newBuilder((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_)
                .mergeFrom(value).buildPartial();
          } else {
            action_ = value;
          }
          onChanged();
        } else {
          if (actionCase_ == 2) {
            routeBuilder_.mergeFrom(value);
          }
          routeBuilder_.setMessage(value);
        }
        actionCase_ = 2;
        return this;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       */
      public Builder clearRoute() {
        if (routeBuilder_ == null) {
          if (actionCase_ == 2) {
            actionCase_ = 0;
            action_ = null;
            onChanged();
          }
        } else {
          if (actionCase_ == 2) {
            actionCase_ = 0;
            action_ = null;
          }
          routeBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.Builder getRouteBuilder() {
        return getRouteFieldBuilder().getBuilder();
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteActionOrBuilder getRouteOrBuilder() {
        if ((actionCase_ == 2) && (routeBuilder_ != null)) {
          return routeBuilder_.getMessageOrBuilder();
        } else {
          if (actionCase_ == 2) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.HttpRouteAction route = 2;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteActionOrBuilder> 
          getRouteFieldBuilder() {
        if (routeBuilder_ == null) {
          if (!(actionCase_ == 2)) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance();
          }
          routeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteActionOrBuilder>(
                  (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) action_,
                  getParentForChildren(),
                  isClean());
          action_ = null;
        }
        actionCase_ = 2;
        onChanged();;
        return routeBuilder_;
      }
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectActionOrBuilder> redirectBuilder_;
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       * @return Whether the redirect field is set.
       */
      @java.lang.Override
      public boolean hasRedirect() {
        return actionCase_ == 3;
      }
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       * @return The redirect.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction getRedirect() {
        if (redirectBuilder_ == null) {
          if (actionCase_ == 3) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance();
        } else {
          if (actionCase_ == 3) {
            return redirectBuilder_.getMessage();
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       */
      public Builder setRedirect(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction value) {
        if (redirectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          action_ = value;
          onChanged();
        } else {
          redirectBuilder_.setMessage(value);
        }
        actionCase_ = 3;
        return this;
      }
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       */
      public Builder setRedirect(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.Builder builderForValue) {
        if (redirectBuilder_ == null) {
          action_ = builderForValue.build();
          onChanged();
        } else {
          redirectBuilder_.setMessage(builderForValue.build());
        }
        actionCase_ = 3;
        return this;
      }
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       */
      public Builder mergeRedirect(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction value) {
        if (redirectBuilder_ == null) {
          if (actionCase_ == 3 &&
              action_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance()) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.newBuilder((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_)
                .mergeFrom(value).buildPartial();
          } else {
            action_ = value;
          }
          onChanged();
        } else {
          if (actionCase_ == 3) {
            redirectBuilder_.mergeFrom(value);
          }
          redirectBuilder_.setMessage(value);
        }
        actionCase_ = 3;
        return this;
      }
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       */
      public Builder clearRedirect() {
        if (redirectBuilder_ == null) {
          if (actionCase_ == 3) {
            actionCase_ = 0;
            action_ = null;
            onChanged();
          }
        } else {
          if (actionCase_ == 3) {
            actionCase_ = 0;
            action_ = null;
          }
          redirectBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.Builder getRedirectBuilder() {
        return getRedirectFieldBuilder().getBuilder();
      }
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectActionOrBuilder getRedirectOrBuilder() {
        if ((actionCase_ == 3) && (redirectBuilder_ != null)) {
          return redirectBuilder_.getMessageOrBuilder();
        } else {
          if (actionCase_ == 3) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Redirects the request as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction redirect = 3;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectActionOrBuilder> 
          getRedirectFieldBuilder() {
        if (redirectBuilder_ == null) {
          if (!(actionCase_ == 3)) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance();
          }
          redirectBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectActionOrBuilder>(
                  (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) action_,
                  getParentForChildren(),
                  isClean());
          action_ = null;
        }
        actionCase_ = 3;
        onChanged();;
        return redirectBuilder_;
      }
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseActionOrBuilder> directResponseBuilder_;
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       * @return Whether the directResponse field is set.
       */
      @java.lang.Override
      public boolean hasDirectResponse() {
        return actionCase_ == 4;
      }
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       * @return The directResponse.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction getDirectResponse() {
        if (directResponseBuilder_ == null) {
          if (actionCase_ == 4) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance();
        } else {
          if (actionCase_ == 4) {
            return directResponseBuilder_.getMessage();
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       */
      public Builder setDirectResponse(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction value) {
        if (directResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          action_ = value;
          onChanged();
        } else {
          directResponseBuilder_.setMessage(value);
        }
        actionCase_ = 4;
        return this;
      }
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       */
      public Builder setDirectResponse(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.Builder builderForValue) {
        if (directResponseBuilder_ == null) {
          action_ = builderForValue.build();
          onChanged();
        } else {
          directResponseBuilder_.setMessage(builderForValue.build());
        }
        actionCase_ = 4;
        return this;
      }
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       */
      public Builder mergeDirectResponse(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction value) {
        if (directResponseBuilder_ == null) {
          if (actionCase_ == 4 &&
              action_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance()) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.newBuilder((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_)
                .mergeFrom(value).buildPartial();
          } else {
            action_ = value;
          }
          onChanged();
        } else {
          if (actionCase_ == 4) {
            directResponseBuilder_.mergeFrom(value);
          }
          directResponseBuilder_.setMessage(value);
        }
        actionCase_ = 4;
        return this;
      }
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       */
      public Builder clearDirectResponse() {
        if (directResponseBuilder_ == null) {
          if (actionCase_ == 4) {
            actionCase_ = 0;
            action_ = null;
            onChanged();
          }
        } else {
          if (actionCase_ == 4) {
            actionCase_ = 0;
            action_ = null;
          }
          directResponseBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.Builder getDirectResponseBuilder() {
        return getDirectResponseFieldBuilder().getBuilder();
      }
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseActionOrBuilder getDirectResponseOrBuilder() {
        if ((actionCase_ == 4) && (directResponseBuilder_ != null)) {
          return directResponseBuilder_.getMessageOrBuilder();
        } else {
          if (actionCase_ == 4) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Instructs the load balancer to respond directly as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.DirectResponseAction direct_response = 4;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseActionOrBuilder> 
          getDirectResponseFieldBuilder() {
        if (directResponseBuilder_ == null) {
          if (!(actionCase_ == 4)) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance();
          }
          directResponseBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseActionOrBuilder>(
                  (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) action_,
                  getParentForChildren(),
                  isClean());
          action_ = null;
        }
        actionCase_ = 4;
        onChanged();;
        return directResponseBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.HttpRoute)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.HttpRoute)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public HttpRoute parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new HttpRoute(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRoute getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface GrpcRouteOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.GrpcRoute)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
     * @return Whether the match field is set.
     */
    boolean hasMatch();
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
     * @return The match.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch getMatch();
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatchOrBuilder getMatchOrBuilder();
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
     * @return Whether the route field is set.
     */
    boolean hasRoute();
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
     * @return The route.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction getRoute();
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteActionOrBuilder getRouteOrBuilder();
    /**
     * 
     * Instructs the load balancer to respond directly with a specified status.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
     * @return Whether the statusResponse field is set.
     */
    boolean hasStatusResponse();
    /**
     * 
     * Instructs the load balancer to respond directly with a specified status.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
     * @return The statusResponse.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction getStatusResponse();
    /**
     * 
     * Instructs the load balancer to respond directly with a specified status.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseActionOrBuilder getStatusResponseOrBuilder();
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.ActionCase getActionCase();
  }
  /**
   * 
   * A gRPC route configuration resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.GrpcRoute}
   */
  public static final class GrpcRoute extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.GrpcRoute)
      GrpcRouteOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GrpcRoute.newBuilder() to construct.
    private GrpcRoute(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private GrpcRoute() {
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new GrpcRoute();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GrpcRoute(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.Builder subBuilder = null;
              if (match_ != null) {
                subBuilder = match_.toBuilder();
              }
              match_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(match_);
                match_ = subBuilder.buildPartial();
              }
              break;
            }
            case 18: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.Builder subBuilder = null;
              if (actionCase_ == 2) {
                subBuilder = ((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_).toBuilder();
              }
              action_ =
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_);
                action_ = subBuilder.buildPartial();
              }
              actionCase_ = 2;
              break;
            }
            case 26: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Builder subBuilder = null;
              if (actionCase_ == 3) {
                subBuilder = ((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_).toBuilder();
              }
              action_ =
                  input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_);
                action_ = subBuilder.buildPartial();
              }
              actionCase_ = 3;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.Builder.class);
    }
    private int actionCase_ = 0;
    private java.lang.Object action_;
    public enum ActionCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      ROUTE(2),
      STATUS_RESPONSE(3),
      ACTION_NOT_SET(0);
      private final int value;
      private ActionCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ActionCase valueOf(int value) {
        return forNumber(value);
      }
      public static ActionCase forNumber(int value) {
        switch (value) {
          case 2: return ROUTE;
          case 3: return STATUS_RESPONSE;
          case 0: return ACTION_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public ActionCase
    getActionCase() {
      return ActionCase.forNumber(
          actionCase_);
    }
    public static final int MATCH_FIELD_NUMBER = 1;
    private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch match_;
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
     * @return Whether the match field is set.
     */
    @java.lang.Override
    public boolean hasMatch() {
      return match_ != null;
    }
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
     * @return The match.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch getMatch() {
      return match_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.getDefaultInstance() : match_;
    }
    /**
     * 
     * Condition (predicate) used to select the route.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatchOrBuilder getMatchOrBuilder() {
      return getMatch();
    }
    public static final int ROUTE_FIELD_NUMBER = 2;
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
     * @return Whether the route field is set.
     */
    @java.lang.Override
    public boolean hasRoute() {
      return actionCase_ == 2;
    }
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
     * @return The route.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction getRoute() {
      if (actionCase_ == 2) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance();
    }
    /**
     * 
     * Forwards the request to a backend group for processing as configured.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteActionOrBuilder getRouteOrBuilder() {
      if (actionCase_ == 2) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance();
    }
    public static final int STATUS_RESPONSE_FIELD_NUMBER = 3;
    /**
     * 
     * Instructs the load balancer to respond directly with a specified status.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
     * @return Whether the statusResponse field is set.
     */
    @java.lang.Override
    public boolean hasStatusResponse() {
      return actionCase_ == 3;
    }
    /**
     * 
     * Instructs the load balancer to respond directly with a specified status.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
     * @return The statusResponse.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction getStatusResponse() {
      if (actionCase_ == 3) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance();
    }
    /**
     * 
     * Instructs the load balancer to respond directly with a specified status.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseActionOrBuilder getStatusResponseOrBuilder() {
      if (actionCase_ == 3) {
         return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_;
      }
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (match_ != null) {
        output.writeMessage(1, getMatch());
      }
      if (actionCase_ == 2) {
        output.writeMessage(2, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_);
      }
      if (actionCase_ == 3) {
        output.writeMessage(3, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_);
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (match_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getMatch());
      }
      if (actionCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_);
      }
      if (actionCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) obj;
      if (hasMatch() != other.hasMatch()) return false;
      if (hasMatch()) {
        if (!getMatch()
            .equals(other.getMatch())) return false;
      }
      if (!getActionCase().equals(other.getActionCase())) return false;
      switch (actionCase_) {
        case 2:
          if (!getRoute()
              .equals(other.getRoute())) return false;
          break;
        case 3:
          if (!getStatusResponse()
              .equals(other.getStatusResponse())) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMatch()) {
        hash = (37 * hash) + MATCH_FIELD_NUMBER;
        hash = (53 * hash) + getMatch().hashCode();
      }
      switch (actionCase_) {
        case 2:
          hash = (37 * hash) + ROUTE_FIELD_NUMBER;
          hash = (53 * hash) + getRoute().hashCode();
          break;
        case 3:
          hash = (37 * hash) + STATUS_RESPONSE_FIELD_NUMBER;
          hash = (53 * hash) + getStatusResponse().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A gRPC route configuration resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.GrpcRoute}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.GrpcRoute)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (matchBuilder_ == null) {
          match_ = null;
        } else {
          match_ = null;
          matchBuilder_ = null;
        }
        actionCase_ = 0;
        action_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute(this);
        if (matchBuilder_ == null) {
          result.match_ = match_;
        } else {
          result.match_ = matchBuilder_.build();
        }
        if (actionCase_ == 2) {
          if (routeBuilder_ == null) {
            result.action_ = action_;
          } else {
            result.action_ = routeBuilder_.build();
          }
        }
        if (actionCase_ == 3) {
          if (statusResponseBuilder_ == null) {
            result.action_ = action_;
          } else {
            result.action_ = statusResponseBuilder_.build();
          }
        }
        result.actionCase_ = actionCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute.getDefaultInstance()) return this;
        if (other.hasMatch()) {
          mergeMatch(other.getMatch());
        }
        switch (other.getActionCase()) {
          case ROUTE: {
            mergeRoute(other.getRoute());
            break;
          }
          case STATUS_RESPONSE: {
            mergeStatusResponse(other.getStatusResponse());
            break;
          }
          case ACTION_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int actionCase_ = 0;
      private java.lang.Object action_;
      public ActionCase
          getActionCase() {
        return ActionCase.forNumber(
            actionCase_);
      }
      public Builder clearAction() {
        actionCase_ = 0;
        action_ = null;
        onChanged();
        return this;
      }
      private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch match_;
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatchOrBuilder> matchBuilder_;
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       * @return Whether the match field is set.
       */
      public boolean hasMatch() {
        return matchBuilder_ != null || match_ != null;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       * @return The match.
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch getMatch() {
        if (matchBuilder_ == null) {
          return match_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.getDefaultInstance() : match_;
        } else {
          return matchBuilder_.getMessage();
        }
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       */
      public Builder setMatch(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch value) {
        if (matchBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          match_ = value;
          onChanged();
        } else {
          matchBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       */
      public Builder setMatch(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.Builder builderForValue) {
        if (matchBuilder_ == null) {
          match_ = builderForValue.build();
          onChanged();
        } else {
          matchBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       */
      public Builder mergeMatch(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch value) {
        if (matchBuilder_ == null) {
          if (match_ != null) {
            match_ =
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.newBuilder(match_).mergeFrom(value).buildPartial();
          } else {
            match_ = value;
          }
          onChanged();
        } else {
          matchBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       */
      public Builder clearMatch() {
        if (matchBuilder_ == null) {
          match_ = null;
          onChanged();
        } else {
          match_ = null;
          matchBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.Builder getMatchBuilder() {
        
        onChanged();
        return getMatchFieldBuilder().getBuilder();
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatchOrBuilder getMatchOrBuilder() {
        if (matchBuilder_ != null) {
          return matchBuilder_.getMessageOrBuilder();
        } else {
          return match_ == null ?
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.getDefaultInstance() : match_;
        }
      }
      /**
       * 
       * Condition (predicate) used to select the route.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteMatch match = 1;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatchOrBuilder> 
          getMatchFieldBuilder() {
        if (matchBuilder_ == null) {
          matchBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatchOrBuilder>(
                  getMatch(),
                  getParentForChildren(),
                  isClean());
          match_ = null;
        }
        return matchBuilder_;
      }
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteActionOrBuilder> routeBuilder_;
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       * @return Whether the route field is set.
       */
      @java.lang.Override
      public boolean hasRoute() {
        return actionCase_ == 2;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       * @return The route.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction getRoute() {
        if (routeBuilder_ == null) {
          if (actionCase_ == 2) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance();
        } else {
          if (actionCase_ == 2) {
            return routeBuilder_.getMessage();
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       */
      public Builder setRoute(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction value) {
        if (routeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          action_ = value;
          onChanged();
        } else {
          routeBuilder_.setMessage(value);
        }
        actionCase_ = 2;
        return this;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       */
      public Builder setRoute(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.Builder builderForValue) {
        if (routeBuilder_ == null) {
          action_ = builderForValue.build();
          onChanged();
        } else {
          routeBuilder_.setMessage(builderForValue.build());
        }
        actionCase_ = 2;
        return this;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       */
      public Builder mergeRoute(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction value) {
        if (routeBuilder_ == null) {
          if (actionCase_ == 2 &&
              action_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance()) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.newBuilder((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_)
                .mergeFrom(value).buildPartial();
          } else {
            action_ = value;
          }
          onChanged();
        } else {
          if (actionCase_ == 2) {
            routeBuilder_.mergeFrom(value);
          }
          routeBuilder_.setMessage(value);
        }
        actionCase_ = 2;
        return this;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       */
      public Builder clearRoute() {
        if (routeBuilder_ == null) {
          if (actionCase_ == 2) {
            actionCase_ = 0;
            action_ = null;
            onChanged();
          }
        } else {
          if (actionCase_ == 2) {
            actionCase_ = 0;
            action_ = null;
          }
          routeBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.Builder getRouteBuilder() {
        return getRouteFieldBuilder().getBuilder();
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteActionOrBuilder getRouteOrBuilder() {
        if ((actionCase_ == 2) && (routeBuilder_ != null)) {
          return routeBuilder_.getMessageOrBuilder();
        } else {
          if (actionCase_ == 2) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Forwards the request to a backend group for processing as configured.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcRouteAction route = 2;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteActionOrBuilder> 
          getRouteFieldBuilder() {
        if (routeBuilder_ == null) {
          if (!(actionCase_ == 2)) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance();
          }
          routeBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteActionOrBuilder>(
                  (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) action_,
                  getParentForChildren(),
                  isClean());
          action_ = null;
        }
        actionCase_ = 2;
        onChanged();;
        return routeBuilder_;
      }
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseActionOrBuilder> statusResponseBuilder_;
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       * @return Whether the statusResponse field is set.
       */
      @java.lang.Override
      public boolean hasStatusResponse() {
        return actionCase_ == 3;
      }
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       * @return The statusResponse.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction getStatusResponse() {
        if (statusResponseBuilder_ == null) {
          if (actionCase_ == 3) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance();
        } else {
          if (actionCase_ == 3) {
            return statusResponseBuilder_.getMessage();
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       */
      public Builder setStatusResponse(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction value) {
        if (statusResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          action_ = value;
          onChanged();
        } else {
          statusResponseBuilder_.setMessage(value);
        }
        actionCase_ = 3;
        return this;
      }
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       */
      public Builder setStatusResponse(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Builder builderForValue) {
        if (statusResponseBuilder_ == null) {
          action_ = builderForValue.build();
          onChanged();
        } else {
          statusResponseBuilder_.setMessage(builderForValue.build());
        }
        actionCase_ = 3;
        return this;
      }
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       */
      public Builder mergeStatusResponse(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction value) {
        if (statusResponseBuilder_ == null) {
          if (actionCase_ == 3 &&
              action_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance()) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.newBuilder((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_)
                .mergeFrom(value).buildPartial();
          } else {
            action_ = value;
          }
          onChanged();
        } else {
          if (actionCase_ == 3) {
            statusResponseBuilder_.mergeFrom(value);
          }
          statusResponseBuilder_.setMessage(value);
        }
        actionCase_ = 3;
        return this;
      }
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       */
      public Builder clearStatusResponse() {
        if (statusResponseBuilder_ == null) {
          if (actionCase_ == 3) {
            actionCase_ = 0;
            action_ = null;
            onChanged();
          }
        } else {
          if (actionCase_ == 3) {
            actionCase_ = 0;
            action_ = null;
          }
          statusResponseBuilder_.clear();
        }
        return this;
      }
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Builder getStatusResponseBuilder() {
        return getStatusResponseFieldBuilder().getBuilder();
      }
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseActionOrBuilder getStatusResponseOrBuilder() {
        if ((actionCase_ == 3) && (statusResponseBuilder_ != null)) {
          return statusResponseBuilder_.getMessageOrBuilder();
        } else {
          if (actionCase_ == 3) {
            return (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_;
          }
          return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance();
        }
      }
      /**
       * 
       * Instructs the load balancer to respond directly with a specified status.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction status_response = 3;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseActionOrBuilder> 
          getStatusResponseFieldBuilder() {
        if (statusResponseBuilder_ == null) {
          if (!(actionCase_ == 3)) {
            action_ = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance();
          }
          statusResponseBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseActionOrBuilder>(
                  (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) action_,
                  getParentForChildren(),
                  isClean());
          action_ = null;
        }
        actionCase_ = 3;
        onChanged();;
        return statusResponseBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.GrpcRoute)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.GrpcRoute)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public GrpcRoute parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GrpcRoute(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRoute getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface HttpRouteMatchOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.HttpRouteMatch)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * HTTP method specified in the request.
     * 
     *
     * repeated string http_method = 1;
     * @return A list containing the httpMethod.
     */
    java.util.List
        getHttpMethodList();
    /**
     * 
     * HTTP method specified in the request.
     * 
     *
     * repeated string http_method = 1;
     * @return The count of httpMethod.
     */
    int getHttpMethodCount();
    /**
     * 
     * HTTP method specified in the request.
     * 
     *
     * repeated string http_method = 1;
     * @param index The index of the element to return.
     * @return The httpMethod at the given index.
     */
    java.lang.String getHttpMethod(int index);
    /**
     * 
     * HTTP method specified in the request.
     * 
     *
     * repeated string http_method = 1;
     * @param index The index of the value to return.
     * @return The bytes of the httpMethod at the given index.
     */
    com.google.protobuf.ByteString
        getHttpMethodBytes(int index);
    /**
     * 
     * Match settings for the path specified in the request.
     * If not specified, the route matches all paths.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
     * @return Whether the path field is set.
     */
    boolean hasPath();
    /**
     * 
     * Match settings for the path specified in the request.
     * If not specified, the route matches all paths.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
     * @return The path.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getPath();
    /**
     * 
     * Match settings for the path specified in the request.
     * If not specified, the route matches all paths.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getPathOrBuilder();
  }
  /**
   * 
   * An HTTP route condition (predicate) resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.HttpRouteMatch}
   */
  public static final class HttpRouteMatch extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.HttpRouteMatch)
      HttpRouteMatchOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use HttpRouteMatch.newBuilder() to construct.
    private HttpRouteMatch(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private HttpRouteMatch() {
      httpMethod_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new HttpRouteMatch();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HttpRouteMatch(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                httpMethod_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              httpMethod_.add(s);
              break;
            }
            case 18: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder subBuilder = null;
              if (path_ != null) {
                subBuilder = path_.toBuilder();
              }
              path_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(path_);
                path_ = subBuilder.buildPartial();
              }
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          httpMethod_ = httpMethod_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.Builder.class);
    }
    public static final int HTTP_METHOD_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList httpMethod_;
    /**
     * 
     * HTTP method specified in the request.
     * 
     *
     * repeated string http_method = 1;
     * @return A list containing the httpMethod.
     */
    public com.google.protobuf.ProtocolStringList
        getHttpMethodList() {
      return httpMethod_;
    }
    /**
     * 
     * HTTP method specified in the request.
     * 
     *
     * repeated string http_method = 1;
     * @return The count of httpMethod.
     */
    public int getHttpMethodCount() {
      return httpMethod_.size();
    }
    /**
     * 
     * HTTP method specified in the request.
     * 
     *
     * repeated string http_method = 1;
     * @param index The index of the element to return.
     * @return The httpMethod at the given index.
     */
    public java.lang.String getHttpMethod(int index) {
      return httpMethod_.get(index);
    }
    /**
     * 
     * HTTP method specified in the request.
     * 
     *
     * repeated string http_method = 1;
     * @param index The index of the value to return.
     * @return The bytes of the httpMethod at the given index.
     */
    public com.google.protobuf.ByteString
        getHttpMethodBytes(int index) {
      return httpMethod_.getByteString(index);
    }
    public static final int PATH_FIELD_NUMBER = 2;
    private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch path_;
    /**
     * 
     * Match settings for the path specified in the request.
     * If not specified, the route matches all paths.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
     * @return Whether the path field is set.
     */
    @java.lang.Override
    public boolean hasPath() {
      return path_ != null;
    }
    /**
     * 
     * Match settings for the path specified in the request.
     * If not specified, the route matches all paths.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
     * @return The path.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getPath() {
      return path_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : path_;
    }
    /**
     * 
     * Match settings for the path specified in the request.
     * If not specified, the route matches all paths.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getPathOrBuilder() {
      return getPath();
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      for (int i = 0; i < httpMethod_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, httpMethod_.getRaw(i));
      }
      if (path_ != null) {
        output.writeMessage(2, getPath());
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < httpMethod_.size(); i++) {
          dataSize += computeStringSizeNoTag(httpMethod_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getHttpMethodList().size();
      }
      if (path_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getPath());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch) obj;
      if (!getHttpMethodList()
          .equals(other.getHttpMethodList())) return false;
      if (hasPath() != other.hasPath()) return false;
      if (hasPath()) {
        if (!getPath()
            .equals(other.getPath())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getHttpMethodCount() > 0) {
        hash = (37 * hash) + HTTP_METHOD_FIELD_NUMBER;
        hash = (53 * hash) + getHttpMethodList().hashCode();
      }
      if (hasPath()) {
        hash = (37 * hash) + PATH_FIELD_NUMBER;
        hash = (53 * hash) + getPath().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * An HTTP route condition (predicate) resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.HttpRouteMatch}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.HttpRouteMatch)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatchOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        httpMethod_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (pathBuilder_ == null) {
          path_ = null;
        } else {
          path_ = null;
          pathBuilder_ = null;
        }
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) != 0)) {
          httpMethod_ = httpMethod_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.httpMethod_ = httpMethod_;
        if (pathBuilder_ == null) {
          result.path_ = path_;
        } else {
          result.path_ = pathBuilder_.build();
        }
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch.getDefaultInstance()) return this;
        if (!other.httpMethod_.isEmpty()) {
          if (httpMethod_.isEmpty()) {
            httpMethod_ = other.httpMethod_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureHttpMethodIsMutable();
            httpMethod_.addAll(other.httpMethod_);
          }
          onChanged();
        }
        if (other.hasPath()) {
          mergePath(other.getPath());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;
      private com.google.protobuf.LazyStringList httpMethod_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureHttpMethodIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          httpMethod_ = new com.google.protobuf.LazyStringArrayList(httpMethod_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @return A list containing the httpMethod.
       */
      public com.google.protobuf.ProtocolStringList
          getHttpMethodList() {
        return httpMethod_.getUnmodifiableView();
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @return The count of httpMethod.
       */
      public int getHttpMethodCount() {
        return httpMethod_.size();
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @param index The index of the element to return.
       * @return The httpMethod at the given index.
       */
      public java.lang.String getHttpMethod(int index) {
        return httpMethod_.get(index);
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @param index The index of the value to return.
       * @return The bytes of the httpMethod at the given index.
       */
      public com.google.protobuf.ByteString
          getHttpMethodBytes(int index) {
        return httpMethod_.getByteString(index);
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @param index The index to set the value at.
       * @param value The httpMethod to set.
       * @return This builder for chaining.
       */
      public Builder setHttpMethod(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureHttpMethodIsMutable();
        httpMethod_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @param value The httpMethod to add.
       * @return This builder for chaining.
       */
      public Builder addHttpMethod(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureHttpMethodIsMutable();
        httpMethod_.add(value);
        onChanged();
        return this;
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @param values The httpMethod to add.
       * @return This builder for chaining.
       */
      public Builder addAllHttpMethod(
          java.lang.Iterable values) {
        ensureHttpMethodIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, httpMethod_);
        onChanged();
        return this;
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @return This builder for chaining.
       */
      public Builder clearHttpMethod() {
        httpMethod_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * 
       * HTTP method specified in the request.
       * 
       *
       * repeated string http_method = 1;
       * @param value The bytes of the httpMethod to add.
       * @return This builder for chaining.
       */
      public Builder addHttpMethodBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureHttpMethodIsMutable();
        httpMethod_.add(value);
        onChanged();
        return this;
      }
      private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch path_;
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder> pathBuilder_;
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       * @return Whether the path field is set.
       */
      public boolean hasPath() {
        return pathBuilder_ != null || path_ != null;
      }
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       * @return The path.
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getPath() {
        if (pathBuilder_ == null) {
          return path_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : path_;
        } else {
          return pathBuilder_.getMessage();
        }
      }
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       */
      public Builder setPath(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch value) {
        if (pathBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          path_ = value;
          onChanged();
        } else {
          pathBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       */
      public Builder setPath(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder builderForValue) {
        if (pathBuilder_ == null) {
          path_ = builderForValue.build();
          onChanged();
        } else {
          pathBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       */
      public Builder mergePath(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch value) {
        if (pathBuilder_ == null) {
          if (path_ != null) {
            path_ =
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.newBuilder(path_).mergeFrom(value).buildPartial();
          } else {
            path_ = value;
          }
          onChanged();
        } else {
          pathBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       */
      public Builder clearPath() {
        if (pathBuilder_ == null) {
          path_ = null;
          onChanged();
        } else {
          path_ = null;
          pathBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder getPathBuilder() {
        
        onChanged();
        return getPathFieldBuilder().getBuilder();
      }
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getPathOrBuilder() {
        if (pathBuilder_ != null) {
          return pathBuilder_.getMessageOrBuilder();
        } else {
          return path_ == null ?
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : path_;
        }
      }
      /**
       * 
       * Match settings for the path specified in the request.
       * If not specified, the route matches all paths.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch path = 2;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder> 
          getPathFieldBuilder() {
        if (pathBuilder_ == null) {
          pathBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder>(
                  getPath(),
                  getParentForChildren(),
                  isClean());
          path_ = null;
        }
        return pathBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.HttpRouteMatch)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.HttpRouteMatch)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public HttpRouteMatch parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new HttpRouteMatch(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteMatch getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface GrpcRouteMatchOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.GrpcRouteMatch)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Match settings for gRPC service method called in the request.
     * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
     * If not specified, the route matches all methods.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
     * @return Whether the fqmn field is set.
     */
    boolean hasFqmn();
    /**
     * 
     * Match settings for gRPC service method called in the request.
     * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
     * If not specified, the route matches all methods.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
     * @return The fqmn.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getFqmn();
    /**
     * 
     * Match settings for gRPC service method called in the request.
     * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
     * If not specified, the route matches all methods.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getFqmnOrBuilder();
  }
  /**
   * 
   * A gRPC route condition (predicate) resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.GrpcRouteMatch}
   */
  public static final class GrpcRouteMatch extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.GrpcRouteMatch)
      GrpcRouteMatchOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GrpcRouteMatch.newBuilder() to construct.
    private GrpcRouteMatch(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private GrpcRouteMatch() {
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new GrpcRouteMatch();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GrpcRouteMatch(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder subBuilder = null;
              if (fqmn_ != null) {
                subBuilder = fqmn_.toBuilder();
              }
              fqmn_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(fqmn_);
                fqmn_ = subBuilder.buildPartial();
              }
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.Builder.class);
    }
    public static final int FQMN_FIELD_NUMBER = 1;
    private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch fqmn_;
    /**
     * 
     * Match settings for gRPC service method called in the request.
     * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
     * If not specified, the route matches all methods.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
     * @return Whether the fqmn field is set.
     */
    @java.lang.Override
    public boolean hasFqmn() {
      return fqmn_ != null;
    }
    /**
     * 
     * Match settings for gRPC service method called in the request.
     * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
     * If not specified, the route matches all methods.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
     * @return The fqmn.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getFqmn() {
      return fqmn_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : fqmn_;
    }
    /**
     * 
     * Match settings for gRPC service method called in the request.
     * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
     * If not specified, the route matches all methods.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getFqmnOrBuilder() {
      return getFqmn();
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (fqmn_ != null) {
        output.writeMessage(1, getFqmn());
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (fqmn_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getFqmn());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch) obj;
      if (hasFqmn() != other.hasFqmn()) return false;
      if (hasFqmn()) {
        if (!getFqmn()
            .equals(other.getFqmn())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasFqmn()) {
        hash = (37 * hash) + FQMN_FIELD_NUMBER;
        hash = (53 * hash) + getFqmn().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A gRPC route condition (predicate) resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.GrpcRouteMatch}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.GrpcRouteMatch)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatchOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (fqmnBuilder_ == null) {
          fqmn_ = null;
        } else {
          fqmn_ = null;
          fqmnBuilder_ = null;
        }
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch(this);
        if (fqmnBuilder_ == null) {
          result.fqmn_ = fqmn_;
        } else {
          result.fqmn_ = fqmnBuilder_.build();
        }
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch.getDefaultInstance()) return this;
        if (other.hasFqmn()) {
          mergeFqmn(other.getFqmn());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch fqmn_;
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder> fqmnBuilder_;
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       * @return Whether the fqmn field is set.
       */
      public boolean hasFqmn() {
        return fqmnBuilder_ != null || fqmn_ != null;
      }
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       * @return The fqmn.
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getFqmn() {
        if (fqmnBuilder_ == null) {
          return fqmn_ == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : fqmn_;
        } else {
          return fqmnBuilder_.getMessage();
        }
      }
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       */
      public Builder setFqmn(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch value) {
        if (fqmnBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          fqmn_ = value;
          onChanged();
        } else {
          fqmnBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       */
      public Builder setFqmn(
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder builderForValue) {
        if (fqmnBuilder_ == null) {
          fqmn_ = builderForValue.build();
          onChanged();
        } else {
          fqmnBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       */
      public Builder mergeFqmn(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch value) {
        if (fqmnBuilder_ == null) {
          if (fqmn_ != null) {
            fqmn_ =
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.newBuilder(fqmn_).mergeFrom(value).buildPartial();
          } else {
            fqmn_ = value;
          }
          onChanged();
        } else {
          fqmnBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       */
      public Builder clearFqmn() {
        if (fqmnBuilder_ == null) {
          fqmn_ = null;
          onChanged();
        } else {
          fqmn_ = null;
          fqmnBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder getFqmnBuilder() {
        
        onChanged();
        return getFqmnFieldBuilder().getBuilder();
      }
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       */
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder getFqmnOrBuilder() {
        if (fqmnBuilder_ != null) {
          return fqmnBuilder_.getMessageOrBuilder();
        } else {
          return fqmn_ == null ?
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance() : fqmn_;
        }
      }
      /**
       * 
       * Match settings for gRPC service method called in the request.
       * A match string must be a fully qualified method name, e.g. `foo.bar.v1.BazService/Get`, or a prefix of such.
       * If not specified, the route matches all methods.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.StringMatch fqmn = 1;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder> 
          getFqmnFieldBuilder() {
        if (fqmnBuilder_ == null) {
          fqmnBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder>(
                  getFqmn(),
                  getParentForChildren(),
                  isClean());
          fqmn_ = null;
        }
        return fqmnBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.GrpcRouteMatch)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.GrpcRouteMatch)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public GrpcRouteMatch parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GrpcRouteMatch(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteMatch getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface StringMatchOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.StringMatch)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Exact match string.
     * 
     *
     * string exact_match = 1;
     * @return Whether the exactMatch field is set.
     */
    boolean hasExactMatch();
    /**
     * 
     * Exact match string.
     * 
     *
     * string exact_match = 1;
     * @return The exactMatch.
     */
    java.lang.String getExactMatch();
    /**
     * 
     * Exact match string.
     * 
     *
     * string exact_match = 1;
     * @return The bytes for exactMatch.
     */
    com.google.protobuf.ByteString
        getExactMatchBytes();
    /**
     * 
     * Prefix match string.
     * 
     *
     * string prefix_match = 2;
     * @return Whether the prefixMatch field is set.
     */
    boolean hasPrefixMatch();
    /**
     * 
     * Prefix match string.
     * 
     *
     * string prefix_match = 2;
     * @return The prefixMatch.
     */
    java.lang.String getPrefixMatch();
    /**
     * 
     * Prefix match string.
     * 
     *
     * string prefix_match = 2;
     * @return The bytes for prefixMatch.
     */
    com.google.protobuf.ByteString
        getPrefixMatchBytes();
    /**
     * 
     * Regular expression match string.
     * 
     *
     * string regex_match = 3;
     * @return Whether the regexMatch field is set.
     */
    boolean hasRegexMatch();
    /**
     * 
     * Regular expression match string.
     * 
     *
     * string regex_match = 3;
     * @return The regexMatch.
     */
    java.lang.String getRegexMatch();
    /**
     * 
     * Regular expression match string.
     * 
     *
     * string regex_match = 3;
     * @return The bytes for regexMatch.
     */
    com.google.protobuf.ByteString
        getRegexMatchBytes();
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.MatchCase getMatchCase();
  }
  /**
   * 
   * A string matcher resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.StringMatch}
   */
  public static final class StringMatch extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.StringMatch)
      StringMatchOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use StringMatch.newBuilder() to construct.
    private StringMatch(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private StringMatch() {
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new StringMatch();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private StringMatch(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              matchCase_ = 1;
              match_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();
              matchCase_ = 2;
              match_ = s;
              break;
            }
            case 26: {
              java.lang.String s = input.readStringRequireUtf8();
              matchCase_ = 3;
              match_ = s;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder.class);
    }
    private int matchCase_ = 0;
    private java.lang.Object match_;
    public enum MatchCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      EXACT_MATCH(1),
      PREFIX_MATCH(2),
      REGEX_MATCH(3),
      MATCH_NOT_SET(0);
      private final int value;
      private MatchCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static MatchCase valueOf(int value) {
        return forNumber(value);
      }
      public static MatchCase forNumber(int value) {
        switch (value) {
          case 1: return EXACT_MATCH;
          case 2: return PREFIX_MATCH;
          case 3: return REGEX_MATCH;
          case 0: return MATCH_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public MatchCase
    getMatchCase() {
      return MatchCase.forNumber(
          matchCase_);
    }
    public static final int EXACT_MATCH_FIELD_NUMBER = 1;
    /**
     * 
     * Exact match string.
     * 
     *
     * string exact_match = 1;
     * @return Whether the exactMatch field is set.
     */
    public boolean hasExactMatch() {
      return matchCase_ == 1;
    }
    /**
     * 
     * Exact match string.
     * 
     *
     * string exact_match = 1;
     * @return The exactMatch.
     */
    public java.lang.String getExactMatch() {
      java.lang.Object ref = "";
      if (matchCase_ == 1) {
        ref = match_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (matchCase_ == 1) {
          match_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Exact match string.
     * 
     *
     * string exact_match = 1;
     * @return The bytes for exactMatch.
     */
    public com.google.protobuf.ByteString
        getExactMatchBytes() {
      java.lang.Object ref = "";
      if (matchCase_ == 1) {
        ref = match_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (matchCase_ == 1) {
          match_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int PREFIX_MATCH_FIELD_NUMBER = 2;
    /**
     * 
     * Prefix match string.
     * 
     *
     * string prefix_match = 2;
     * @return Whether the prefixMatch field is set.
     */
    public boolean hasPrefixMatch() {
      return matchCase_ == 2;
    }
    /**
     * 
     * Prefix match string.
     * 
     *
     * string prefix_match = 2;
     * @return The prefixMatch.
     */
    public java.lang.String getPrefixMatch() {
      java.lang.Object ref = "";
      if (matchCase_ == 2) {
        ref = match_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (matchCase_ == 2) {
          match_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Prefix match string.
     * 
     *
     * string prefix_match = 2;
     * @return The bytes for prefixMatch.
     */
    public com.google.protobuf.ByteString
        getPrefixMatchBytes() {
      java.lang.Object ref = "";
      if (matchCase_ == 2) {
        ref = match_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (matchCase_ == 2) {
          match_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int REGEX_MATCH_FIELD_NUMBER = 3;
    /**
     * 
     * Regular expression match string.
     * 
     *
     * string regex_match = 3;
     * @return Whether the regexMatch field is set.
     */
    public boolean hasRegexMatch() {
      return matchCase_ == 3;
    }
    /**
     * 
     * Regular expression match string.
     * 
     *
     * string regex_match = 3;
     * @return The regexMatch.
     */
    public java.lang.String getRegexMatch() {
      java.lang.Object ref = "";
      if (matchCase_ == 3) {
        ref = match_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (matchCase_ == 3) {
          match_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Regular expression match string.
     * 
     *
     * string regex_match = 3;
     * @return The bytes for regexMatch.
     */
    public com.google.protobuf.ByteString
        getRegexMatchBytes() {
      java.lang.Object ref = "";
      if (matchCase_ == 3) {
        ref = match_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (matchCase_ == 3) {
          match_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (matchCase_ == 1) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, match_);
      }
      if (matchCase_ == 2) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, match_);
      }
      if (matchCase_ == 3) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, match_);
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (matchCase_ == 1) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, match_);
      }
      if (matchCase_ == 2) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, match_);
      }
      if (matchCase_ == 3) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, match_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch) obj;
      if (!getMatchCase().equals(other.getMatchCase())) return false;
      switch (matchCase_) {
        case 1:
          if (!getExactMatch()
              .equals(other.getExactMatch())) return false;
          break;
        case 2:
          if (!getPrefixMatch()
              .equals(other.getPrefixMatch())) return false;
          break;
        case 3:
          if (!getRegexMatch()
              .equals(other.getRegexMatch())) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (matchCase_) {
        case 1:
          hash = (37 * hash) + EXACT_MATCH_FIELD_NUMBER;
          hash = (53 * hash) + getExactMatch().hashCode();
          break;
        case 2:
          hash = (37 * hash) + PREFIX_MATCH_FIELD_NUMBER;
          hash = (53 * hash) + getPrefixMatch().hashCode();
          break;
        case 3:
          hash = (37 * hash) + REGEX_MATCH_FIELD_NUMBER;
          hash = (53 * hash) + getRegexMatch().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A string matcher resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.StringMatch}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.StringMatch)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatchOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        matchCase_ = 0;
        match_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch(this);
        if (matchCase_ == 1) {
          result.match_ = match_;
        }
        if (matchCase_ == 2) {
          result.match_ = match_;
        }
        if (matchCase_ == 3) {
          result.match_ = match_;
        }
        result.matchCase_ = matchCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch.getDefaultInstance()) return this;
        switch (other.getMatchCase()) {
          case EXACT_MATCH: {
            matchCase_ = 1;
            match_ = other.match_;
            onChanged();
            break;
          }
          case PREFIX_MATCH: {
            matchCase_ = 2;
            match_ = other.match_;
            onChanged();
            break;
          }
          case REGEX_MATCH: {
            matchCase_ = 3;
            match_ = other.match_;
            onChanged();
            break;
          }
          case MATCH_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int matchCase_ = 0;
      private java.lang.Object match_;
      public MatchCase
          getMatchCase() {
        return MatchCase.forNumber(
            matchCase_);
      }
      public Builder clearMatch() {
        matchCase_ = 0;
        match_ = null;
        onChanged();
        return this;
      }
      /**
       * 
       * Exact match string.
       * 
       *
       * string exact_match = 1;
       * @return Whether the exactMatch field is set.
       */
      @java.lang.Override
      public boolean hasExactMatch() {
        return matchCase_ == 1;
      }
      /**
       * 
       * Exact match string.
       * 
       *
       * string exact_match = 1;
       * @return The exactMatch.
       */
      @java.lang.Override
      public java.lang.String getExactMatch() {
        java.lang.Object ref = "";
        if (matchCase_ == 1) {
          ref = match_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (matchCase_ == 1) {
            match_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Exact match string.
       * 
       *
       * string exact_match = 1;
       * @return The bytes for exactMatch.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getExactMatchBytes() {
        java.lang.Object ref = "";
        if (matchCase_ == 1) {
          ref = match_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (matchCase_ == 1) {
            match_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Exact match string.
       * 
       *
       * string exact_match = 1;
       * @param value The exactMatch to set.
       * @return This builder for chaining.
       */
      public Builder setExactMatch(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  matchCase_ = 1;
        match_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Exact match string.
       * 
       *
       * string exact_match = 1;
       * @return This builder for chaining.
       */
      public Builder clearExactMatch() {
        if (matchCase_ == 1) {
          matchCase_ = 0;
          match_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Exact match string.
       * 
       *
       * string exact_match = 1;
       * @param value The bytes for exactMatch to set.
       * @return This builder for chaining.
       */
      public Builder setExactMatchBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        matchCase_ = 1;
        match_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Prefix match string.
       * 
       *
       * string prefix_match = 2;
       * @return Whether the prefixMatch field is set.
       */
      @java.lang.Override
      public boolean hasPrefixMatch() {
        return matchCase_ == 2;
      }
      /**
       * 
       * Prefix match string.
       * 
       *
       * string prefix_match = 2;
       * @return The prefixMatch.
       */
      @java.lang.Override
      public java.lang.String getPrefixMatch() {
        java.lang.Object ref = "";
        if (matchCase_ == 2) {
          ref = match_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (matchCase_ == 2) {
            match_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Prefix match string.
       * 
       *
       * string prefix_match = 2;
       * @return The bytes for prefixMatch.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getPrefixMatchBytes() {
        java.lang.Object ref = "";
        if (matchCase_ == 2) {
          ref = match_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (matchCase_ == 2) {
            match_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Prefix match string.
       * 
       *
       * string prefix_match = 2;
       * @param value The prefixMatch to set.
       * @return This builder for chaining.
       */
      public Builder setPrefixMatch(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  matchCase_ = 2;
        match_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Prefix match string.
       * 
       *
       * string prefix_match = 2;
       * @return This builder for chaining.
       */
      public Builder clearPrefixMatch() {
        if (matchCase_ == 2) {
          matchCase_ = 0;
          match_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Prefix match string.
       * 
       *
       * string prefix_match = 2;
       * @param value The bytes for prefixMatch to set.
       * @return This builder for chaining.
       */
      public Builder setPrefixMatchBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        matchCase_ = 2;
        match_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Regular expression match string.
       * 
       *
       * string regex_match = 3;
       * @return Whether the regexMatch field is set.
       */
      @java.lang.Override
      public boolean hasRegexMatch() {
        return matchCase_ == 3;
      }
      /**
       * 
       * Regular expression match string.
       * 
       *
       * string regex_match = 3;
       * @return The regexMatch.
       */
      @java.lang.Override
      public java.lang.String getRegexMatch() {
        java.lang.Object ref = "";
        if (matchCase_ == 3) {
          ref = match_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (matchCase_ == 3) {
            match_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Regular expression match string.
       * 
       *
       * string regex_match = 3;
       * @return The bytes for regexMatch.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getRegexMatchBytes() {
        java.lang.Object ref = "";
        if (matchCase_ == 3) {
          ref = match_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (matchCase_ == 3) {
            match_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Regular expression match string.
       * 
       *
       * string regex_match = 3;
       * @param value The regexMatch to set.
       * @return This builder for chaining.
       */
      public Builder setRegexMatch(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  matchCase_ = 3;
        match_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Regular expression match string.
       * 
       *
       * string regex_match = 3;
       * @return This builder for chaining.
       */
      public Builder clearRegexMatch() {
        if (matchCase_ == 3) {
          matchCase_ = 0;
          match_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Regular expression match string.
       * 
       *
       * string regex_match = 3;
       * @param value The bytes for regexMatch to set.
       * @return This builder for chaining.
       */
      public Builder setRegexMatchBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        matchCase_ = 3;
        match_ = value;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.StringMatch)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.StringMatch)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public StringMatch parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StringMatch(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.StringMatch getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface RedirectActionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.RedirectAction)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * URI scheme replacement.
     * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
     * the port is also removed.
     * If not specified, the original scheme and port are used.
     * 
     *
     * string replace_scheme = 1;
     * @return The replaceScheme.
     */
    java.lang.String getReplaceScheme();
    /**
     * 
     * URI scheme replacement.
     * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
     * the port is also removed.
     * If not specified, the original scheme and port are used.
     * 
     *
     * string replace_scheme = 1;
     * @return The bytes for replaceScheme.
     */
    com.google.protobuf.ByteString
        getReplaceSchemeBytes();
    /**
     * 
     * URI host replacement.
     * If not specified, the original host is used.
     * 
     *
     * string replace_host = 2;
     * @return The replaceHost.
     */
    java.lang.String getReplaceHost();
    /**
     * 
     * URI host replacement.
     * If not specified, the original host is used.
     * 
     *
     * string replace_host = 2;
     * @return The bytes for replaceHost.
     */
    com.google.protobuf.ByteString
        getReplaceHostBytes();
    /**
     * 
     * URI host replacement.
     * If not specified, the original host is used.
     * 
     *
     * int64 replace_port = 3;
     * @return The replacePort.
     */
    long getReplacePort();
    /**
     * 
     * Replacement for the whole path.
     * 
     *
     * string replace_path = 4;
     * @return Whether the replacePath field is set.
     */
    boolean hasReplacePath();
    /**
     * 
     * Replacement for the whole path.
     * 
     *
     * string replace_path = 4;
     * @return The replacePath.
     */
    java.lang.String getReplacePath();
    /**
     * 
     * Replacement for the whole path.
     * 
     *
     * string replace_path = 4;
     * @return The bytes for replacePath.
     */
    com.google.protobuf.ByteString
        getReplacePathBytes();
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
     * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
     * For [StringMatch.exact_match], the whole path is replaced.
     * 
     *
     * string replace_prefix = 5;
     * @return Whether the replacePrefix field is set.
     */
    boolean hasReplacePrefix();
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
     * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
     * For [StringMatch.exact_match], the whole path is replaced.
     * 
     *
     * string replace_prefix = 5;
     * @return The replacePrefix.
     */
    java.lang.String getReplacePrefix();
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
     * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
     * For [StringMatch.exact_match], the whole path is replaced.
     * 
     *
     * string replace_prefix = 5;
     * @return The bytes for replacePrefix.
     */
    com.google.protobuf.ByteString
        getReplacePrefixBytes();
    /**
     * 
     * Removes URI query.
     * 
     *
     * bool remove_query = 6;
     * @return The removeQuery.
     */
    boolean getRemoveQuery();
    /**
     * 
     * HTTP status code to use in redirect responses.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
     * @return The enum numeric value on the wire for responseCode.
     */
    int getResponseCodeValue();
    /**
     * 
     * HTTP status code to use in redirect responses.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
     * @return The responseCode.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode getResponseCode();
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.PathCase getPathCase();
  }
  /**
   * 
   * A redirect action resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.RedirectAction}
   */
  public static final class RedirectAction extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.RedirectAction)
      RedirectActionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RedirectAction.newBuilder() to construct.
    private RedirectAction(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private RedirectAction() {
      replaceScheme_ = "";
      replaceHost_ = "";
      responseCode_ = 0;
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new RedirectAction();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RedirectAction(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              replaceScheme_ = s;
              break;
            }
            case 18: {
              java.lang.String s = input.readStringRequireUtf8();
              replaceHost_ = s;
              break;
            }
            case 24: {
              replacePort_ = input.readInt64();
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();
              pathCase_ = 4;
              path_ = s;
              break;
            }
            case 42: {
              java.lang.String s = input.readStringRequireUtf8();
              pathCase_ = 5;
              path_ = s;
              break;
            }
            case 48: {
              removeQuery_ = input.readBool();
              break;
            }
            case 56: {
              int rawValue = input.readEnum();
              responseCode_ = rawValue;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.Builder.class);
    }
    /**
     * 
     * HTTP status codes supported for use in redirect responses.
     * 
     *
     * Protobuf enum {@code yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode}
     */
    public enum RedirectResponseCode
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * 
       * `301 Moved Permanently` status code.
       * 
       *
       * MOVED_PERMANENTLY = 0;
       */
      MOVED_PERMANENTLY(0),
      /**
       * 
       * `302 Found` status code.
       * 
       *
       * FOUND = 1;
       */
      FOUND(1),
      /**
       * 
       * `303 See Other` status code.
       * 
       *
       * SEE_OTHER = 2;
       */
      SEE_OTHER(2),
      /**
       * 
       * `307 Temporary Redirect` status code.
       * 
       *
       * TEMPORARY_REDIRECT = 3;
       */
      TEMPORARY_REDIRECT(3),
      /**
       * 
       * `308 Permanent Redirect` status code.
       * 
       *
       * PERMANENT_REDIRECT = 4;
       */
      PERMANENT_REDIRECT(4),
      UNRECOGNIZED(-1),
      ;
      /**
       * 
       * `301 Moved Permanently` status code.
       * 
       *
       * MOVED_PERMANENTLY = 0;
       */
      public static final int MOVED_PERMANENTLY_VALUE = 0;
      /**
       * 
       * `302 Found` status code.
       * 
       *
       * FOUND = 1;
       */
      public static final int FOUND_VALUE = 1;
      /**
       * 
       * `303 See Other` status code.
       * 
       *
       * SEE_OTHER = 2;
       */
      public static final int SEE_OTHER_VALUE = 2;
      /**
       * 
       * `307 Temporary Redirect` status code.
       * 
       *
       * TEMPORARY_REDIRECT = 3;
       */
      public static final int TEMPORARY_REDIRECT_VALUE = 3;
      /**
       * 
       * `308 Permanent Redirect` status code.
       * 
       *
       * PERMANENT_REDIRECT = 4;
       */
      public static final int PERMANENT_REDIRECT_VALUE = 4;
      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }
      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static RedirectResponseCode valueOf(int value) {
        return forNumber(value);
      }
      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static RedirectResponseCode forNumber(int value) {
        switch (value) {
          case 0: return MOVED_PERMANENTLY;
          case 1: return FOUND;
          case 2: return SEE_OTHER;
          case 3: return TEMPORARY_REDIRECT;
          case 4: return PERMANENT_REDIRECT;
          default: return null;
        }
      }
      public static com.google.protobuf.Internal.EnumLiteMap
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          RedirectResponseCode> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap() {
              public RedirectResponseCode findValueByNumber(int number) {
                return RedirectResponseCode.forNumber(number);
              }
            };
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDescriptor().getEnumTypes().get(0);
      }
      private static final RedirectResponseCode[] VALUES = values();
      public static RedirectResponseCode valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }
      private final int value;
      private RedirectResponseCode(int value) {
        this.value = value;
      }
      // @@protoc_insertion_point(enum_scope:yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode)
    }
    private int pathCase_ = 0;
    private java.lang.Object path_;
    public enum PathCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      REPLACE_PATH(4),
      REPLACE_PREFIX(5),
      PATH_NOT_SET(0);
      private final int value;
      private PathCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static PathCase valueOf(int value) {
        return forNumber(value);
      }
      public static PathCase forNumber(int value) {
        switch (value) {
          case 4: return REPLACE_PATH;
          case 5: return REPLACE_PREFIX;
          case 0: return PATH_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public PathCase
    getPathCase() {
      return PathCase.forNumber(
          pathCase_);
    }
    public static final int REPLACE_SCHEME_FIELD_NUMBER = 1;
    private volatile java.lang.Object replaceScheme_;
    /**
     * 
     * URI scheme replacement.
     * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
     * the port is also removed.
     * If not specified, the original scheme and port are used.
     * 
     *
     * string replace_scheme = 1;
     * @return The replaceScheme.
     */
    @java.lang.Override
    public java.lang.String getReplaceScheme() {
      java.lang.Object ref = replaceScheme_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        replaceScheme_ = s;
        return s;
      }
    }
    /**
     * 
     * URI scheme replacement.
     * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
     * the port is also removed.
     * If not specified, the original scheme and port are used.
     * 
     *
     * string replace_scheme = 1;
     * @return The bytes for replaceScheme.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReplaceSchemeBytes() {
      java.lang.Object ref = replaceScheme_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        replaceScheme_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int REPLACE_HOST_FIELD_NUMBER = 2;
    private volatile java.lang.Object replaceHost_;
    /**
     * 
     * URI host replacement.
     * If not specified, the original host is used.
     * 
     *
     * string replace_host = 2;
     * @return The replaceHost.
     */
    @java.lang.Override
    public java.lang.String getReplaceHost() {
      java.lang.Object ref = replaceHost_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        replaceHost_ = s;
        return s;
      }
    }
    /**
     * 
     * URI host replacement.
     * If not specified, the original host is used.
     * 
     *
     * string replace_host = 2;
     * @return The bytes for replaceHost.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getReplaceHostBytes() {
      java.lang.Object ref = replaceHost_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        replaceHost_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int REPLACE_PORT_FIELD_NUMBER = 3;
    private long replacePort_;
    /**
     * 
     * URI host replacement.
     * If not specified, the original host is used.
     * 
     *
     * int64 replace_port = 3;
     * @return The replacePort.
     */
    @java.lang.Override
    public long getReplacePort() {
      return replacePort_;
    }
    public static final int REPLACE_PATH_FIELD_NUMBER = 4;
    /**
     * 
     * Replacement for the whole path.
     * 
     *
     * string replace_path = 4;
     * @return Whether the replacePath field is set.
     */
    public boolean hasReplacePath() {
      return pathCase_ == 4;
    }
    /**
     * 
     * Replacement for the whole path.
     * 
     *
     * string replace_path = 4;
     * @return The replacePath.
     */
    public java.lang.String getReplacePath() {
      java.lang.Object ref = "";
      if (pathCase_ == 4) {
        ref = path_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (pathCase_ == 4) {
          path_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Replacement for the whole path.
     * 
     *
     * string replace_path = 4;
     * @return The bytes for replacePath.
     */
    public com.google.protobuf.ByteString
        getReplacePathBytes() {
      java.lang.Object ref = "";
      if (pathCase_ == 4) {
        ref = path_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (pathCase_ == 4) {
          path_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int REPLACE_PREFIX_FIELD_NUMBER = 5;
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
     * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
     * For [StringMatch.exact_match], the whole path is replaced.
     * 
     *
     * string replace_prefix = 5;
     * @return Whether the replacePrefix field is set.
     */
    public boolean hasReplacePrefix() {
      return pathCase_ == 5;
    }
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
     * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
     * For [StringMatch.exact_match], the whole path is replaced.
     * 
     *
     * string replace_prefix = 5;
     * @return The replacePrefix.
     */
    public java.lang.String getReplacePrefix() {
      java.lang.Object ref = "";
      if (pathCase_ == 5) {
        ref = path_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (pathCase_ == 5) {
          path_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
     * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
     * For [StringMatch.exact_match], the whole path is replaced.
     * 
     *
     * string replace_prefix = 5;
     * @return The bytes for replacePrefix.
     */
    public com.google.protobuf.ByteString
        getReplacePrefixBytes() {
      java.lang.Object ref = "";
      if (pathCase_ == 5) {
        ref = path_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (pathCase_ == 5) {
          path_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int REMOVE_QUERY_FIELD_NUMBER = 6;
    private boolean removeQuery_;
    /**
     * 
     * Removes URI query.
     * 
     *
     * bool remove_query = 6;
     * @return The removeQuery.
     */
    @java.lang.Override
    public boolean getRemoveQuery() {
      return removeQuery_;
    }
    public static final int RESPONSE_CODE_FIELD_NUMBER = 7;
    private int responseCode_;
    /**
     * 
     * HTTP status code to use in redirect responses.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
     * @return The enum numeric value on the wire for responseCode.
     */
    @java.lang.Override public int getResponseCodeValue() {
      return responseCode_;
    }
    /**
     * 
     * HTTP status code to use in redirect responses.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
     * @return The responseCode.
     */
    @java.lang.Override public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode getResponseCode() {
      @SuppressWarnings("deprecation")
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode result = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode.valueOf(responseCode_);
      return result == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode.UNRECOGNIZED : result;
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(replaceScheme_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, replaceScheme_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(replaceHost_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, replaceHost_);
      }
      if (replacePort_ != 0L) {
        output.writeInt64(3, replacePort_);
      }
      if (pathCase_ == 4) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, path_);
      }
      if (pathCase_ == 5) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, path_);
      }
      if (removeQuery_ != false) {
        output.writeBool(6, removeQuery_);
      }
      if (responseCode_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode.MOVED_PERMANENTLY.getNumber()) {
        output.writeEnum(7, responseCode_);
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(replaceScheme_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, replaceScheme_);
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(replaceHost_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, replaceHost_);
      }
      if (replacePort_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, replacePort_);
      }
      if (pathCase_ == 4) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, path_);
      }
      if (pathCase_ == 5) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, path_);
      }
      if (removeQuery_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, removeQuery_);
      }
      if (responseCode_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode.MOVED_PERMANENTLY.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(7, responseCode_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) obj;
      if (!getReplaceScheme()
          .equals(other.getReplaceScheme())) return false;
      if (!getReplaceHost()
          .equals(other.getReplaceHost())) return false;
      if (getReplacePort()
          != other.getReplacePort()) return false;
      if (getRemoveQuery()
          != other.getRemoveQuery()) return false;
      if (responseCode_ != other.responseCode_) return false;
      if (!getPathCase().equals(other.getPathCase())) return false;
      switch (pathCase_) {
        case 4:
          if (!getReplacePath()
              .equals(other.getReplacePath())) return false;
          break;
        case 5:
          if (!getReplacePrefix()
              .equals(other.getReplacePrefix())) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + REPLACE_SCHEME_FIELD_NUMBER;
      hash = (53 * hash) + getReplaceScheme().hashCode();
      hash = (37 * hash) + REPLACE_HOST_FIELD_NUMBER;
      hash = (53 * hash) + getReplaceHost().hashCode();
      hash = (37 * hash) + REPLACE_PORT_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getReplacePort());
      hash = (37 * hash) + REMOVE_QUERY_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getRemoveQuery());
      hash = (37 * hash) + RESPONSE_CODE_FIELD_NUMBER;
      hash = (53 * hash) + responseCode_;
      switch (pathCase_) {
        case 4:
          hash = (37 * hash) + REPLACE_PATH_FIELD_NUMBER;
          hash = (53 * hash) + getReplacePath().hashCode();
          break;
        case 5:
          hash = (37 * hash) + REPLACE_PREFIX_FIELD_NUMBER;
          hash = (53 * hash) + getReplacePrefix().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A redirect action resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.RedirectAction}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.RedirectAction)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectActionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        replaceScheme_ = "";
        replaceHost_ = "";
        replacePort_ = 0L;
        removeQuery_ = false;
        responseCode_ = 0;
        pathCase_ = 0;
        path_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction(this);
        result.replaceScheme_ = replaceScheme_;
        result.replaceHost_ = replaceHost_;
        result.replacePort_ = replacePort_;
        if (pathCase_ == 4) {
          result.path_ = path_;
        }
        if (pathCase_ == 5) {
          result.path_ = path_;
        }
        result.removeQuery_ = removeQuery_;
        result.responseCode_ = responseCode_;
        result.pathCase_ = pathCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.getDefaultInstance()) return this;
        if (!other.getReplaceScheme().isEmpty()) {
          replaceScheme_ = other.replaceScheme_;
          onChanged();
        }
        if (!other.getReplaceHost().isEmpty()) {
          replaceHost_ = other.replaceHost_;
          onChanged();
        }
        if (other.getReplacePort() != 0L) {
          setReplacePort(other.getReplacePort());
        }
        if (other.getRemoveQuery() != false) {
          setRemoveQuery(other.getRemoveQuery());
        }
        if (other.responseCode_ != 0) {
          setResponseCodeValue(other.getResponseCodeValue());
        }
        switch (other.getPathCase()) {
          case REPLACE_PATH: {
            pathCase_ = 4;
            path_ = other.path_;
            onChanged();
            break;
          }
          case REPLACE_PREFIX: {
            pathCase_ = 5;
            path_ = other.path_;
            onChanged();
            break;
          }
          case PATH_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int pathCase_ = 0;
      private java.lang.Object path_;
      public PathCase
          getPathCase() {
        return PathCase.forNumber(
            pathCase_);
      }
      public Builder clearPath() {
        pathCase_ = 0;
        path_ = null;
        onChanged();
        return this;
      }
      private java.lang.Object replaceScheme_ = "";
      /**
       * 
       * URI scheme replacement.
       * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
       * the port is also removed.
       * If not specified, the original scheme and port are used.
       * 
       *
       * string replace_scheme = 1;
       * @return The replaceScheme.
       */
      public java.lang.String getReplaceScheme() {
        java.lang.Object ref = replaceScheme_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          replaceScheme_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * URI scheme replacement.
       * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
       * the port is also removed.
       * If not specified, the original scheme and port are used.
       * 
       *
       * string replace_scheme = 1;
       * @return The bytes for replaceScheme.
       */
      public com.google.protobuf.ByteString
          getReplaceSchemeBytes() {
        java.lang.Object ref = replaceScheme_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          replaceScheme_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * URI scheme replacement.
       * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
       * the port is also removed.
       * If not specified, the original scheme and port are used.
       * 
       *
       * string replace_scheme = 1;
       * @param value The replaceScheme to set.
       * @return This builder for chaining.
       */
      public Builder setReplaceScheme(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        replaceScheme_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * URI scheme replacement.
       * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
       * the port is also removed.
       * If not specified, the original scheme and port are used.
       * 
       *
       * string replace_scheme = 1;
       * @return This builder for chaining.
       */
      public Builder clearReplaceScheme() {
        
        replaceScheme_ = getDefaultInstance().getReplaceScheme();
        onChanged();
        return this;
      }
      /**
       * 
       * URI scheme replacement.
       * If `http` or `https` scheme is to be replaced and `80` or `443` port is specified in the original URI,
       * the port is also removed.
       * If not specified, the original scheme and port are used.
       * 
       *
       * string replace_scheme = 1;
       * @param value The bytes for replaceScheme to set.
       * @return This builder for chaining.
       */
      public Builder setReplaceSchemeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        replaceScheme_ = value;
        onChanged();
        return this;
      }
      private java.lang.Object replaceHost_ = "";
      /**
       * 
       * URI host replacement.
       * If not specified, the original host is used.
       * 
       *
       * string replace_host = 2;
       * @return The replaceHost.
       */
      public java.lang.String getReplaceHost() {
        java.lang.Object ref = replaceHost_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          replaceHost_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * URI host replacement.
       * If not specified, the original host is used.
       * 
       *
       * string replace_host = 2;
       * @return The bytes for replaceHost.
       */
      public com.google.protobuf.ByteString
          getReplaceHostBytes() {
        java.lang.Object ref = replaceHost_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          replaceHost_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * URI host replacement.
       * If not specified, the original host is used.
       * 
       *
       * string replace_host = 2;
       * @param value The replaceHost to set.
       * @return This builder for chaining.
       */
      public Builder setReplaceHost(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        replaceHost_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * URI host replacement.
       * If not specified, the original host is used.
       * 
       *
       * string replace_host = 2;
       * @return This builder for chaining.
       */
      public Builder clearReplaceHost() {
        
        replaceHost_ = getDefaultInstance().getReplaceHost();
        onChanged();
        return this;
      }
      /**
       * 
       * URI host replacement.
       * If not specified, the original host is used.
       * 
       *
       * string replace_host = 2;
       * @param value The bytes for replaceHost to set.
       * @return This builder for chaining.
       */
      public Builder setReplaceHostBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        replaceHost_ = value;
        onChanged();
        return this;
      }
      private long replacePort_ ;
      /**
       * 
       * URI host replacement.
       * If not specified, the original host is used.
       * 
       *
       * int64 replace_port = 3;
       * @return The replacePort.
       */
      @java.lang.Override
      public long getReplacePort() {
        return replacePort_;
      }
      /**
       * 
       * URI host replacement.
       * If not specified, the original host is used.
       * 
       *
       * int64 replace_port = 3;
       * @param value The replacePort to set.
       * @return This builder for chaining.
       */
      public Builder setReplacePort(long value) {
        
        replacePort_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * URI host replacement.
       * If not specified, the original host is used.
       * 
       *
       * int64 replace_port = 3;
       * @return This builder for chaining.
       */
      public Builder clearReplacePort() {
        
        replacePort_ = 0L;
        onChanged();
        return this;
      }
      /**
       * 
       * Replacement for the whole path.
       * 
       *
       * string replace_path = 4;
       * @return Whether the replacePath field is set.
       */
      @java.lang.Override
      public boolean hasReplacePath() {
        return pathCase_ == 4;
      }
      /**
       * 
       * Replacement for the whole path.
       * 
       *
       * string replace_path = 4;
       * @return The replacePath.
       */
      @java.lang.Override
      public java.lang.String getReplacePath() {
        java.lang.Object ref = "";
        if (pathCase_ == 4) {
          ref = path_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (pathCase_ == 4) {
            path_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Replacement for the whole path.
       * 
       *
       * string replace_path = 4;
       * @return The bytes for replacePath.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getReplacePathBytes() {
        java.lang.Object ref = "";
        if (pathCase_ == 4) {
          ref = path_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (pathCase_ == 4) {
            path_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Replacement for the whole path.
       * 
       *
       * string replace_path = 4;
       * @param value The replacePath to set.
       * @return This builder for chaining.
       */
      public Builder setReplacePath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  pathCase_ = 4;
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Replacement for the whole path.
       * 
       *
       * string replace_path = 4;
       * @return This builder for chaining.
       */
      public Builder clearReplacePath() {
        if (pathCase_ == 4) {
          pathCase_ = 0;
          path_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Replacement for the whole path.
       * 
       *
       * string replace_path = 4;
       * @param value The bytes for replacePath to set.
       * @return This builder for chaining.
       */
      public Builder setReplacePathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        pathCase_ = 4;
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
       * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
       * For [StringMatch.exact_match], the whole path is replaced.
       * 
       *
       * string replace_prefix = 5;
       * @return Whether the replacePrefix field is set.
       */
      @java.lang.Override
      public boolean hasReplacePrefix() {
        return pathCase_ == 5;
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
       * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
       * For [StringMatch.exact_match], the whole path is replaced.
       * 
       *
       * string replace_prefix = 5;
       * @return The replacePrefix.
       */
      @java.lang.Override
      public java.lang.String getReplacePrefix() {
        java.lang.Object ref = "";
        if (pathCase_ == 5) {
          ref = path_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (pathCase_ == 5) {
            path_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
       * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
       * For [StringMatch.exact_match], the whole path is replaced.
       * 
       *
       * string replace_prefix = 5;
       * @return The bytes for replacePrefix.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getReplacePrefixBytes() {
        java.lang.Object ref = "";
        if (pathCase_ == 5) {
          ref = path_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (pathCase_ == 5) {
            path_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
       * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
       * For [StringMatch.exact_match], the whole path is replaced.
       * 
       *
       * string replace_prefix = 5;
       * @param value The replacePrefix to set.
       * @return This builder for chaining.
       */
      public Builder setReplacePrefix(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  pathCase_ = 5;
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
       * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
       * For [StringMatch.exact_match], the whole path is replaced.
       * 
       *
       * string replace_prefix = 5;
       * @return This builder for chaining.
       */
      public Builder clearReplacePrefix() {
        if (pathCase_ == 5) {
          pathCase_ = 0;
          path_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `replace_prefix` value is `/bar`,
       * a request with `https://example.com/foobaz` URI is redirected to `https://example.com/barbaz`.
       * For [StringMatch.exact_match], the whole path is replaced.
       * 
       *
       * string replace_prefix = 5;
       * @param value The bytes for replacePrefix to set.
       * @return This builder for chaining.
       */
      public Builder setReplacePrefixBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        pathCase_ = 5;
        path_ = value;
        onChanged();
        return this;
      }
      private boolean removeQuery_ ;
      /**
       * 
       * Removes URI query.
       * 
       *
       * bool remove_query = 6;
       * @return The removeQuery.
       */
      @java.lang.Override
      public boolean getRemoveQuery() {
        return removeQuery_;
      }
      /**
       * 
       * Removes URI query.
       * 
       *
       * bool remove_query = 6;
       * @param value The removeQuery to set.
       * @return This builder for chaining.
       */
      public Builder setRemoveQuery(boolean value) {
        
        removeQuery_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Removes URI query.
       * 
       *
       * bool remove_query = 6;
       * @return This builder for chaining.
       */
      public Builder clearRemoveQuery() {
        
        removeQuery_ = false;
        onChanged();
        return this;
      }
      private int responseCode_ = 0;
      /**
       * 
       * HTTP status code to use in redirect responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
       * @return The enum numeric value on the wire for responseCode.
       */
      @java.lang.Override public int getResponseCodeValue() {
        return responseCode_;
      }
      /**
       * 
       * HTTP status code to use in redirect responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
       * @param value The enum numeric value on the wire for responseCode to set.
       * @return This builder for chaining.
       */
      public Builder setResponseCodeValue(int value) {
        
        responseCode_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * HTTP status code to use in redirect responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
       * @return The responseCode.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode getResponseCode() {
        @SuppressWarnings("deprecation")
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode result = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode.valueOf(responseCode_);
        return result == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode.UNRECOGNIZED : result;
      }
      /**
       * 
       * HTTP status code to use in redirect responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
       * @param value The responseCode to set.
       * @return This builder for chaining.
       */
      public Builder setResponseCode(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction.RedirectResponseCode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        responseCode_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * 
       * HTTP status code to use in redirect responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.RedirectAction.RedirectResponseCode response_code = 7;
       * @return This builder for chaining.
       */
      public Builder clearResponseCode() {
        
        responseCode_ = 0;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.RedirectAction)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.RedirectAction)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public RedirectAction parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RedirectAction(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.RedirectAction getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface DirectResponseActionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.DirectResponseAction)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * HTTP status code to use in responses.
     * 
     *
     * int64 status = 1 [(.yandex.cloud.value) = "100-599"];
     * @return The status.
     */
    long getStatus();
    /**
     * 
     * Response body.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
     * @return Whether the body field is set.
     */
    boolean hasBody();
    /**
     * 
     * Response body.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
     * @return The body.
     */
    yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload getBody();
    /**
     * 
     * Response body.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
     */
    yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.PayloadOrBuilder getBodyOrBuilder();
  }
  /**
   * 
   * A direct response action resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.DirectResponseAction}
   */
  public static final class DirectResponseAction extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.DirectResponseAction)
      DirectResponseActionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DirectResponseAction.newBuilder() to construct.
    private DirectResponseAction(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private DirectResponseAction() {
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new DirectResponseAction();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DirectResponseAction(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              status_ = input.readInt64();
              break;
            }
            case 18: {
              yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.Builder subBuilder = null;
              if (body_ != null) {
                subBuilder = body_.toBuilder();
              }
              body_ = input.readMessage(yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(body_);
                body_ = subBuilder.buildPartial();
              }
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.Builder.class);
    }
    public static final int STATUS_FIELD_NUMBER = 1;
    private long status_;
    /**
     * 
     * HTTP status code to use in responses.
     * 
     *
     * int64 status = 1 [(.yandex.cloud.value) = "100-599"];
     * @return The status.
     */
    @java.lang.Override
    public long getStatus() {
      return status_;
    }
    public static final int BODY_FIELD_NUMBER = 2;
    private yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload body_;
    /**
     * 
     * Response body.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
     * @return Whether the body field is set.
     */
    @java.lang.Override
    public boolean hasBody() {
      return body_ != null;
    }
    /**
     * 
     * Response body.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
     * @return The body.
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload getBody() {
      return body_ == null ? yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.getDefaultInstance() : body_;
    }
    /**
     * 
     * Response body.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
     */
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.PayloadOrBuilder getBodyOrBuilder() {
      return getBody();
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != 0L) {
        output.writeInt64(1, status_);
      }
      if (body_ != null) {
        output.writeMessage(2, getBody());
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (status_ != 0L) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, status_);
      }
      if (body_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getBody());
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) obj;
      if (getStatus()
          != other.getStatus()) return false;
      if (hasBody() != other.hasBody()) return false;
      if (hasBody()) {
        if (!getBody()
            .equals(other.getBody())) return false;
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + STATUS_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
          getStatus());
      if (hasBody()) {
        hash = (37 * hash) + BODY_FIELD_NUMBER;
        hash = (53 * hash) + getBody().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A direct response action resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.DirectResponseAction}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.DirectResponseAction)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseActionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        status_ = 0L;
        if (bodyBuilder_ == null) {
          body_ = null;
        } else {
          body_ = null;
          bodyBuilder_ = null;
        }
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction(this);
        result.status_ = status_;
        if (bodyBuilder_ == null) {
          result.body_ = body_;
        } else {
          result.body_ = bodyBuilder_.build();
        }
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction.getDefaultInstance()) return this;
        if (other.getStatus() != 0L) {
          setStatus(other.getStatus());
        }
        if (other.hasBody()) {
          mergeBody(other.getBody());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private long status_ ;
      /**
       * 
       * HTTP status code to use in responses.
       * 
       *
       * int64 status = 1 [(.yandex.cloud.value) = "100-599"];
       * @return The status.
       */
      @java.lang.Override
      public long getStatus() {
        return status_;
      }
      /**
       * 
       * HTTP status code to use in responses.
       * 
       *
       * int64 status = 1 [(.yandex.cloud.value) = "100-599"];
       * @param value The status to set.
       * @return This builder for chaining.
       */
      public Builder setStatus(long value) {
        
        status_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * HTTP status code to use in responses.
       * 
       *
       * int64 status = 1 [(.yandex.cloud.value) = "100-599"];
       * @return This builder for chaining.
       */
      public Builder clearStatus() {
        
        status_ = 0L;
        onChanged();
        return this;
      }
      private yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload body_;
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload, yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.Builder, yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.PayloadOrBuilder> bodyBuilder_;
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       * @return Whether the body field is set.
       */
      public boolean hasBody() {
        return bodyBuilder_ != null || body_ != null;
      }
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       * @return The body.
       */
      public yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload getBody() {
        if (bodyBuilder_ == null) {
          return body_ == null ? yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.getDefaultInstance() : body_;
        } else {
          return bodyBuilder_.getMessage();
        }
      }
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       */
      public Builder setBody(yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload value) {
        if (bodyBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          body_ = value;
          onChanged();
        } else {
          bodyBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       */
      public Builder setBody(
          yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.Builder builderForValue) {
        if (bodyBuilder_ == null) {
          body_ = builderForValue.build();
          onChanged();
        } else {
          bodyBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       */
      public Builder mergeBody(yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload value) {
        if (bodyBuilder_ == null) {
          if (body_ != null) {
            body_ =
              yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.newBuilder(body_).mergeFrom(value).buildPartial();
          } else {
            body_ = value;
          }
          onChanged();
        } else {
          bodyBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       */
      public Builder clearBody() {
        if (bodyBuilder_ == null) {
          body_ = null;
          onChanged();
        } else {
          body_ = null;
          bodyBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.Builder getBodyBuilder() {
        
        onChanged();
        return getBodyFieldBuilder().getBuilder();
      }
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       */
      public yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.PayloadOrBuilder getBodyOrBuilder() {
        if (bodyBuilder_ != null) {
          return bodyBuilder_.getMessageOrBuilder();
        } else {
          return body_ == null ?
              yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.getDefaultInstance() : body_;
        }
      }
      /**
       * 
       * Response body.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.Payload body = 2;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload, yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.Builder, yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.PayloadOrBuilder> 
          getBodyFieldBuilder() {
        if (bodyBuilder_ == null) {
          bodyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload, yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.Payload.Builder, yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.PayloadOrBuilder>(
                  getBody(),
                  getParentForChildren(),
                  isClean());
          body_ = null;
        }
        return bodyBuilder_;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.DirectResponseAction)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.DirectResponseAction)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public DirectResponseAction parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DirectResponseAction(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.DirectResponseAction getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface GrpcStatusResponseActionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
     * @return The enum numeric value on the wire for status.
     */
    int getStatusValue();
    /**
     * 
     * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
     * @return The status.
     */
    yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status getStatus();
  }
  /**
   * 
   * A gRPC status response action resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction}
   */
  public static final class GrpcStatusResponseAction extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction)
      GrpcStatusResponseActionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GrpcStatusResponseAction.newBuilder() to construct.
    private GrpcStatusResponseAction(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private GrpcStatusResponseAction() {
      status_ = 0;
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new GrpcStatusResponseAction();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GrpcStatusResponseAction(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 8: {
              int rawValue = input.readEnum();
              status_ = rawValue;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Builder.class);
    }
    /**
     * 
     * gRPC status code supported for use in responses.
     * 
     *
     * Protobuf enum {@code yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status}
     */
    public enum Status
        implements com.google.protobuf.ProtocolMessageEnum {
      /**
       * 
       * `OK` (0) status code.
       * 
       *
       * OK = 0;
       */
      OK(0),
      /**
       * 
       * `INVALID_ARGUMENT` (3) status code.
       * 
       *
       * INVALID_ARGUMENT = 1;
       */
      INVALID_ARGUMENT(1),
      /**
       * 
       * `NOT_FOUND` (5) status code.
       * 
       *
       * NOT_FOUND = 2;
       */
      NOT_FOUND(2),
      /**
       * 
       * `PERMISSION_DENIED` (7) status code.
       * 
       *
       * PERMISSION_DENIED = 3;
       */
      PERMISSION_DENIED(3),
      /**
       * 
       * `UNAUTHENTICATED` (16) status code.
       * 
       *
       * UNAUTHENTICATED = 4;
       */
      UNAUTHENTICATED(4),
      /**
       * 
       * `UNIMPLEMENTED` (12) status code.
       * 
       *
       * UNIMPLEMENTED = 5;
       */
      UNIMPLEMENTED(5),
      /**
       * 
       * `INTERNAL` (13) status code.
       * 
       *
       * INTERNAL = 6;
       */
      INTERNAL(6),
      /**
       * 
       * `UNAVAILABLE` (14) status code.
       * 
       *
       * UNAVAILABLE = 7;
       */
      UNAVAILABLE(7),
      UNRECOGNIZED(-1),
      ;
      /**
       * 
       * `OK` (0) status code.
       * 
       *
       * OK = 0;
       */
      public static final int OK_VALUE = 0;
      /**
       * 
       * `INVALID_ARGUMENT` (3) status code.
       * 
       *
       * INVALID_ARGUMENT = 1;
       */
      public static final int INVALID_ARGUMENT_VALUE = 1;
      /**
       * 
       * `NOT_FOUND` (5) status code.
       * 
       *
       * NOT_FOUND = 2;
       */
      public static final int NOT_FOUND_VALUE = 2;
      /**
       * 
       * `PERMISSION_DENIED` (7) status code.
       * 
       *
       * PERMISSION_DENIED = 3;
       */
      public static final int PERMISSION_DENIED_VALUE = 3;
      /**
       * 
       * `UNAUTHENTICATED` (16) status code.
       * 
       *
       * UNAUTHENTICATED = 4;
       */
      public static final int UNAUTHENTICATED_VALUE = 4;
      /**
       * 
       * `UNIMPLEMENTED` (12) status code.
       * 
       *
       * UNIMPLEMENTED = 5;
       */
      public static final int UNIMPLEMENTED_VALUE = 5;
      /**
       * 
       * `INTERNAL` (13) status code.
       * 
       *
       * INTERNAL = 6;
       */
      public static final int INTERNAL_VALUE = 6;
      /**
       * 
       * `UNAVAILABLE` (14) status code.
       * 
       *
       * UNAVAILABLE = 7;
       */
      public static final int UNAVAILABLE_VALUE = 7;
      public final int getNumber() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalArgumentException(
              "Can't get the number of an unknown enum value.");
        }
        return value;
      }
      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static Status valueOf(int value) {
        return forNumber(value);
      }
      /**
       * @param value The numeric wire value of the corresponding enum entry.
       * @return The enum associated with the given numeric wire value.
       */
      public static Status forNumber(int value) {
        switch (value) {
          case 0: return OK;
          case 1: return INVALID_ARGUMENT;
          case 2: return NOT_FOUND;
          case 3: return PERMISSION_DENIED;
          case 4: return UNAUTHENTICATED;
          case 5: return UNIMPLEMENTED;
          case 6: return INTERNAL;
          case 7: return UNAVAILABLE;
          default: return null;
        }
      }
      public static com.google.protobuf.Internal.EnumLiteMap
          internalGetValueMap() {
        return internalValueMap;
      }
      private static final com.google.protobuf.Internal.EnumLiteMap<
          Status> internalValueMap =
            new com.google.protobuf.Internal.EnumLiteMap() {
              public Status findValueByNumber(int number) {
                return Status.forNumber(number);
              }
            };
      public final com.google.protobuf.Descriptors.EnumValueDescriptor
          getValueDescriptor() {
        if (this == UNRECOGNIZED) {
          throw new java.lang.IllegalStateException(
              "Can't get the descriptor of an unrecognized enum value.");
        }
        return getDescriptor().getValues().get(ordinal());
      }
      public final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptorForType() {
        return getDescriptor();
      }
      public static final com.google.protobuf.Descriptors.EnumDescriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDescriptor().getEnumTypes().get(0);
      }
      private static final Status[] VALUES = values();
      public static Status valueOf(
          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
        if (desc.getType() != getDescriptor()) {
          throw new java.lang.IllegalArgumentException(
            "EnumValueDescriptor is not for this type.");
        }
        if (desc.getIndex() == -1) {
          return UNRECOGNIZED;
        }
        return VALUES[desc.getIndex()];
      }
      private final int value;
      private Status(int value) {
        this.value = value;
      }
      // @@protoc_insertion_point(enum_scope:yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status)
    }
    public static final int STATUS_FIELD_NUMBER = 1;
    private int status_;
    /**
     * 
     * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
     * @return The enum numeric value on the wire for status.
     */
    @java.lang.Override public int getStatusValue() {
      return status_;
    }
    /**
     * 
     * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
     * 
     *
     * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
     * @return The status.
     */
    @java.lang.Override public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status getStatus() {
      @SuppressWarnings("deprecation")
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status result = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status.valueOf(status_);
      return result == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status.UNRECOGNIZED : result;
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status.OK.getNumber()) {
        output.writeEnum(1, status_);
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (status_ != yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status.OK.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, status_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) obj;
      if (status_ != other.status_) return false;
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + STATUS_FIELD_NUMBER;
      hash = (53 * hash) + status_;
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A gRPC status response action resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseActionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        status_ = 0;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction(this);
        result.status_ = status_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.getDefaultInstance()) return this;
        if (other.status_ != 0) {
          setStatusValue(other.getStatusValue());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int status_ = 0;
      /**
       * 
       * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
       * @return The enum numeric value on the wire for status.
       */
      @java.lang.Override public int getStatusValue() {
        return status_;
      }
      /**
       * 
       * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
       * @param value The enum numeric value on the wire for status to set.
       * @return This builder for chaining.
       */
      public Builder setStatusValue(int value) {
        
        status_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
       * @return The status.
       */
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status getStatus() {
        @SuppressWarnings("deprecation")
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status result = yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status.valueOf(status_);
        return result == null ? yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status.UNRECOGNIZED : result;
      }
      /**
       * 
       * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
       * @param value The status to set.
       * @return This builder for chaining.
       */
      public Builder setStatus(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction.Status value) {
        if (value == null) {
          throw new NullPointerException();
        }
        
        status_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * 
       * gRPC [status code](https://grpc.github.io/grpc/core/md_doc_statuscodes.html) to use in responses.
       * 
       *
       * .yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction.Status status = 1;
       * @return This builder for chaining.
       */
      public Builder clearStatus() {
        
        status_ = 0;
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.GrpcStatusResponseAction)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public GrpcStatusResponseAction parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GrpcStatusResponseAction(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcStatusResponseAction getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface HttpRouteActionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.HttpRouteAction)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Backend group to forward requests to.
     * Stream (TCP) backend groups are not supported.
     * 
     *
     * string backend_group_id = 1 [(.yandex.cloud.required) = true];
     * @return The backendGroupId.
     */
    java.lang.String getBackendGroupId();
    /**
     * 
     * Backend group to forward requests to.
     * Stream (TCP) backend groups are not supported.
     * 
     *
     * string backend_group_id = 1 [(.yandex.cloud.required) = true];
     * @return The bytes for backendGroupId.
     */
    com.google.protobuf.ByteString
        getBackendGroupIdBytes();
    /**
     * 
     * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration timeout = 2;
     * @return Whether the timeout field is set.
     */
    boolean hasTimeout();
    /**
     * 
     * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration timeout = 2;
     * @return The timeout.
     */
    com.google.protobuf.Duration getTimeout();
    /**
     * 
     * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration timeout = 2;
     */
    com.google.protobuf.DurationOrBuilder getTimeoutOrBuilder();
    /**
     * 
     * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     * @return Whether the idleTimeout field is set.
     */
    boolean hasIdleTimeout();
    /**
     * 
     * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     * @return The idleTimeout.
     */
    com.google.protobuf.Duration getIdleTimeout();
    /**
     * 
     * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     */
    com.google.protobuf.DurationOrBuilder getIdleTimeoutOrBuilder();
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return Whether the hostRewrite field is set.
     */
    boolean hasHostRewrite();
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return The hostRewrite.
     */
    java.lang.String getHostRewrite();
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return The bytes for hostRewrite.
     */
    com.google.protobuf.ByteString
        getHostRewriteBytes();
    /**
     * 
     * Automatically replaces the host with that of the target.
     * 
     *
     * bool auto_host_rewrite = 5;
     * @return Whether the autoHostRewrite field is set.
     */
    boolean hasAutoHostRewrite();
    /**
     * 
     * Automatically replaces the host with that of the target.
     * 
     *
     * bool auto_host_rewrite = 5;
     * @return The autoHostRewrite.
     */
    boolean getAutoHostRewrite();
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
     * a request with `/foobaz` path is forwarded with `/barbaz` path.
     * For [StringMatch.exact_match], the whole path is replaced.
     * If not specified, the path is not changed.
     * 
     *
     * string prefix_rewrite = 6;
     * @return The prefixRewrite.
     */
    java.lang.String getPrefixRewrite();
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
     * a request with `/foobaz` path is forwarded with `/barbaz` path.
     * For [StringMatch.exact_match], the whole path is replaced.
     * If not specified, the path is not changed.
     * 
     *
     * string prefix_rewrite = 6;
     * @return The bytes for prefixRewrite.
     */
    com.google.protobuf.ByteString
        getPrefixRewriteBytes();
    /**
     * 
     * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
     * 
     *
     * repeated string upgrade_types = 7;
     * @return A list containing the upgradeTypes.
     */
    java.util.List
        getUpgradeTypesList();
    /**
     * 
     * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
     * 
     *
     * repeated string upgrade_types = 7;
     * @return The count of upgradeTypes.
     */
    int getUpgradeTypesCount();
    /**
     * 
     * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
     * 
     *
     * repeated string upgrade_types = 7;
     * @param index The index of the element to return.
     * @return The upgradeTypes at the given index.
     */
    java.lang.String getUpgradeTypes(int index);
    /**
     * 
     * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
     * 
     *
     * repeated string upgrade_types = 7;
     * @param index The index of the value to return.
     * @return The bytes of the upgradeTypes at the given index.
     */
    com.google.protobuf.ByteString
        getUpgradeTypesBytes(int index);
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.HostRewriteSpecifierCase getHostRewriteSpecifierCase();
  }
  /**
   * 
   * An HTTP route action resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.HttpRouteAction}
   */
  public static final class HttpRouteAction extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.HttpRouteAction)
      HttpRouteActionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use HttpRouteAction.newBuilder() to construct.
    private HttpRouteAction(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private HttpRouteAction() {
      backendGroupId_ = "";
      prefixRewrite_ = "";
      upgradeTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new HttpRouteAction();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private HttpRouteAction(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              backendGroupId_ = s;
              break;
            }
            case 18: {
              com.google.protobuf.Duration.Builder subBuilder = null;
              if (timeout_ != null) {
                subBuilder = timeout_.toBuilder();
              }
              timeout_ = input.readMessage(com.google.protobuf.Duration.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(timeout_);
                timeout_ = subBuilder.buildPartial();
              }
              break;
            }
            case 26: {
              com.google.protobuf.Duration.Builder subBuilder = null;
              if (idleTimeout_ != null) {
                subBuilder = idleTimeout_.toBuilder();
              }
              idleTimeout_ = input.readMessage(com.google.protobuf.Duration.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(idleTimeout_);
                idleTimeout_ = subBuilder.buildPartial();
              }
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();
              hostRewriteSpecifierCase_ = 4;
              hostRewriteSpecifier_ = s;
              break;
            }
            case 40: {
              hostRewriteSpecifier_ = input.readBool();
              hostRewriteSpecifierCase_ = 5;
              break;
            }
            case 50: {
              java.lang.String s = input.readStringRequireUtf8();
              prefixRewrite_ = s;
              break;
            }
            case 58: {
              java.lang.String s = input.readStringRequireUtf8();
              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                upgradeTypes_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              upgradeTypes_.add(s);
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) != 0)) {
          upgradeTypes_ = upgradeTypes_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.Builder.class);
    }
    private int hostRewriteSpecifierCase_ = 0;
    private java.lang.Object hostRewriteSpecifier_;
    public enum HostRewriteSpecifierCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      HOST_REWRITE(4),
      AUTO_HOST_REWRITE(5),
      HOSTREWRITESPECIFIER_NOT_SET(0);
      private final int value;
      private HostRewriteSpecifierCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static HostRewriteSpecifierCase valueOf(int value) {
        return forNumber(value);
      }
      public static HostRewriteSpecifierCase forNumber(int value) {
        switch (value) {
          case 4: return HOST_REWRITE;
          case 5: return AUTO_HOST_REWRITE;
          case 0: return HOSTREWRITESPECIFIER_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public HostRewriteSpecifierCase
    getHostRewriteSpecifierCase() {
      return HostRewriteSpecifierCase.forNumber(
          hostRewriteSpecifierCase_);
    }
    public static final int BACKEND_GROUP_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object backendGroupId_;
    /**
     * 
     * Backend group to forward requests to.
     * Stream (TCP) backend groups are not supported.
     * 
     *
     * string backend_group_id = 1 [(.yandex.cloud.required) = true];
     * @return The backendGroupId.
     */
    @java.lang.Override
    public java.lang.String getBackendGroupId() {
      java.lang.Object ref = backendGroupId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        backendGroupId_ = s;
        return s;
      }
    }
    /**
     * 
     * Backend group to forward requests to.
     * Stream (TCP) backend groups are not supported.
     * 
     *
     * string backend_group_id = 1 [(.yandex.cloud.required) = true];
     * @return The bytes for backendGroupId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getBackendGroupIdBytes() {
      java.lang.Object ref = backendGroupId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        backendGroupId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int TIMEOUT_FIELD_NUMBER = 2;
    private com.google.protobuf.Duration timeout_;
    /**
     * 
     * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration timeout = 2;
     * @return Whether the timeout field is set.
     */
    @java.lang.Override
    public boolean hasTimeout() {
      return timeout_ != null;
    }
    /**
     * 
     * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration timeout = 2;
     * @return The timeout.
     */
    @java.lang.Override
    public com.google.protobuf.Duration getTimeout() {
      return timeout_ == null ? com.google.protobuf.Duration.getDefaultInstance() : timeout_;
    }
    /**
     * 
     * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration timeout = 2;
     */
    @java.lang.Override
    public com.google.protobuf.DurationOrBuilder getTimeoutOrBuilder() {
      return getTimeout();
    }
    public static final int IDLE_TIMEOUT_FIELD_NUMBER = 3;
    private com.google.protobuf.Duration idleTimeout_;
    /**
     * 
     * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     * @return Whether the idleTimeout field is set.
     */
    @java.lang.Override
    public boolean hasIdleTimeout() {
      return idleTimeout_ != null;
    }
    /**
     * 
     * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     * @return The idleTimeout.
     */
    @java.lang.Override
    public com.google.protobuf.Duration getIdleTimeout() {
      return idleTimeout_ == null ? com.google.protobuf.Duration.getDefaultInstance() : idleTimeout_;
    }
    /**
     * 
     * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
     * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     */
    @java.lang.Override
    public com.google.protobuf.DurationOrBuilder getIdleTimeoutOrBuilder() {
      return getIdleTimeout();
    }
    public static final int HOST_REWRITE_FIELD_NUMBER = 4;
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return Whether the hostRewrite field is set.
     */
    public boolean hasHostRewrite() {
      return hostRewriteSpecifierCase_ == 4;
    }
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return The hostRewrite.
     */
    public java.lang.String getHostRewrite() {
      java.lang.Object ref = "";
      if (hostRewriteSpecifierCase_ == 4) {
        ref = hostRewriteSpecifier_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (hostRewriteSpecifierCase_ == 4) {
          hostRewriteSpecifier_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return The bytes for hostRewrite.
     */
    public com.google.protobuf.ByteString
        getHostRewriteBytes() {
      java.lang.Object ref = "";
      if (hostRewriteSpecifierCase_ == 4) {
        ref = hostRewriteSpecifier_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (hostRewriteSpecifierCase_ == 4) {
          hostRewriteSpecifier_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int AUTO_HOST_REWRITE_FIELD_NUMBER = 5;
    /**
     * 
     * Automatically replaces the host with that of the target.
     * 
     *
     * bool auto_host_rewrite = 5;
     * @return Whether the autoHostRewrite field is set.
     */
    @java.lang.Override
    public boolean hasAutoHostRewrite() {
      return hostRewriteSpecifierCase_ == 5;
    }
    /**
     * 
     * Automatically replaces the host with that of the target.
     * 
     *
     * bool auto_host_rewrite = 5;
     * @return The autoHostRewrite.
     */
    @java.lang.Override
    public boolean getAutoHostRewrite() {
      if (hostRewriteSpecifierCase_ == 5) {
        return (java.lang.Boolean) hostRewriteSpecifier_;
      }
      return false;
    }
    public static final int PREFIX_REWRITE_FIELD_NUMBER = 6;
    private volatile java.lang.Object prefixRewrite_;
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
     * a request with `/foobaz` path is forwarded with `/barbaz` path.
     * For [StringMatch.exact_match], the whole path is replaced.
     * If not specified, the path is not changed.
     * 
     *
     * string prefix_rewrite = 6;
     * @return The prefixRewrite.
     */
    @java.lang.Override
    public java.lang.String getPrefixRewrite() {
      java.lang.Object ref = prefixRewrite_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        prefixRewrite_ = s;
        return s;
      }
    }
    /**
     * 
     * Replacement for the path prefix matched by [StringMatch].
     * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
     * a request with `/foobaz` path is forwarded with `/barbaz` path.
     * For [StringMatch.exact_match], the whole path is replaced.
     * If not specified, the path is not changed.
     * 
     *
     * string prefix_rewrite = 6;
     * @return The bytes for prefixRewrite.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getPrefixRewriteBytes() {
      java.lang.Object ref = prefixRewrite_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        prefixRewrite_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int UPGRADE_TYPES_FIELD_NUMBER = 7;
    private com.google.protobuf.LazyStringList upgradeTypes_;
    /**
     * 
     * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
     * 
     *
     * repeated string upgrade_types = 7;
     * @return A list containing the upgradeTypes.
     */
    public com.google.protobuf.ProtocolStringList
        getUpgradeTypesList() {
      return upgradeTypes_;
    }
    /**
     * 
     * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
     * 
     *
     * repeated string upgrade_types = 7;
     * @return The count of upgradeTypes.
     */
    public int getUpgradeTypesCount() {
      return upgradeTypes_.size();
    }
    /**
     * 
     * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
     * 
     *
     * repeated string upgrade_types = 7;
     * @param index The index of the element to return.
     * @return The upgradeTypes at the given index.
     */
    public java.lang.String getUpgradeTypes(int index) {
      return upgradeTypes_.get(index);
    }
    /**
     * 
     * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
     * 
     *
     * repeated string upgrade_types = 7;
     * @param index The index of the value to return.
     * @return The bytes of the upgradeTypes at the given index.
     */
    public com.google.protobuf.ByteString
        getUpgradeTypesBytes(int index) {
      return upgradeTypes_.getByteString(index);
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backendGroupId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, backendGroupId_);
      }
      if (timeout_ != null) {
        output.writeMessage(2, getTimeout());
      }
      if (idleTimeout_ != null) {
        output.writeMessage(3, getIdleTimeout());
      }
      if (hostRewriteSpecifierCase_ == 4) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, hostRewriteSpecifier_);
      }
      if (hostRewriteSpecifierCase_ == 5) {
        output.writeBool(
            5, (boolean)((java.lang.Boolean) hostRewriteSpecifier_));
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(prefixRewrite_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, prefixRewrite_);
      }
      for (int i = 0; i < upgradeTypes_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, upgradeTypes_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backendGroupId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, backendGroupId_);
      }
      if (timeout_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getTimeout());
      }
      if (idleTimeout_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getIdleTimeout());
      }
      if (hostRewriteSpecifierCase_ == 4) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, hostRewriteSpecifier_);
      }
      if (hostRewriteSpecifierCase_ == 5) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(
              5, (boolean)((java.lang.Boolean) hostRewriteSpecifier_));
      }
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(prefixRewrite_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, prefixRewrite_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < upgradeTypes_.size(); i++) {
          dataSize += computeStringSizeNoTag(upgradeTypes_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getUpgradeTypesList().size();
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) obj;
      if (!getBackendGroupId()
          .equals(other.getBackendGroupId())) return false;
      if (hasTimeout() != other.hasTimeout()) return false;
      if (hasTimeout()) {
        if (!getTimeout()
            .equals(other.getTimeout())) return false;
      }
      if (hasIdleTimeout() != other.hasIdleTimeout()) return false;
      if (hasIdleTimeout()) {
        if (!getIdleTimeout()
            .equals(other.getIdleTimeout())) return false;
      }
      if (!getPrefixRewrite()
          .equals(other.getPrefixRewrite())) return false;
      if (!getUpgradeTypesList()
          .equals(other.getUpgradeTypesList())) return false;
      if (!getHostRewriteSpecifierCase().equals(other.getHostRewriteSpecifierCase())) return false;
      switch (hostRewriteSpecifierCase_) {
        case 4:
          if (!getHostRewrite()
              .equals(other.getHostRewrite())) return false;
          break;
        case 5:
          if (getAutoHostRewrite()
              != other.getAutoHostRewrite()) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + BACKEND_GROUP_ID_FIELD_NUMBER;
      hash = (53 * hash) + getBackendGroupId().hashCode();
      if (hasTimeout()) {
        hash = (37 * hash) + TIMEOUT_FIELD_NUMBER;
        hash = (53 * hash) + getTimeout().hashCode();
      }
      if (hasIdleTimeout()) {
        hash = (37 * hash) + IDLE_TIMEOUT_FIELD_NUMBER;
        hash = (53 * hash) + getIdleTimeout().hashCode();
      }
      hash = (37 * hash) + PREFIX_REWRITE_FIELD_NUMBER;
      hash = (53 * hash) + getPrefixRewrite().hashCode();
      if (getUpgradeTypesCount() > 0) {
        hash = (37 * hash) + UPGRADE_TYPES_FIELD_NUMBER;
        hash = (53 * hash) + getUpgradeTypesList().hashCode();
      }
      switch (hostRewriteSpecifierCase_) {
        case 4:
          hash = (37 * hash) + HOST_REWRITE_FIELD_NUMBER;
          hash = (53 * hash) + getHostRewrite().hashCode();
          break;
        case 5:
          hash = (37 * hash) + AUTO_HOST_REWRITE_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
              getAutoHostRewrite());
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * An HTTP route action resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.HttpRouteAction}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.HttpRouteAction)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteActionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        backendGroupId_ = "";
        if (timeoutBuilder_ == null) {
          timeout_ = null;
        } else {
          timeout_ = null;
          timeoutBuilder_ = null;
        }
        if (idleTimeoutBuilder_ == null) {
          idleTimeout_ = null;
        } else {
          idleTimeout_ = null;
          idleTimeoutBuilder_ = null;
        }
        prefixRewrite_ = "";
        upgradeTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        hostRewriteSpecifierCase_ = 0;
        hostRewriteSpecifier_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction(this);
        int from_bitField0_ = bitField0_;
        result.backendGroupId_ = backendGroupId_;
        if (timeoutBuilder_ == null) {
          result.timeout_ = timeout_;
        } else {
          result.timeout_ = timeoutBuilder_.build();
        }
        if (idleTimeoutBuilder_ == null) {
          result.idleTimeout_ = idleTimeout_;
        } else {
          result.idleTimeout_ = idleTimeoutBuilder_.build();
        }
        if (hostRewriteSpecifierCase_ == 4) {
          result.hostRewriteSpecifier_ = hostRewriteSpecifier_;
        }
        if (hostRewriteSpecifierCase_ == 5) {
          result.hostRewriteSpecifier_ = hostRewriteSpecifier_;
        }
        result.prefixRewrite_ = prefixRewrite_;
        if (((bitField0_ & 0x00000001) != 0)) {
          upgradeTypes_ = upgradeTypes_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.upgradeTypes_ = upgradeTypes_;
        result.hostRewriteSpecifierCase_ = hostRewriteSpecifierCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction.getDefaultInstance()) return this;
        if (!other.getBackendGroupId().isEmpty()) {
          backendGroupId_ = other.backendGroupId_;
          onChanged();
        }
        if (other.hasTimeout()) {
          mergeTimeout(other.getTimeout());
        }
        if (other.hasIdleTimeout()) {
          mergeIdleTimeout(other.getIdleTimeout());
        }
        if (!other.getPrefixRewrite().isEmpty()) {
          prefixRewrite_ = other.prefixRewrite_;
          onChanged();
        }
        if (!other.upgradeTypes_.isEmpty()) {
          if (upgradeTypes_.isEmpty()) {
            upgradeTypes_ = other.upgradeTypes_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureUpgradeTypesIsMutable();
            upgradeTypes_.addAll(other.upgradeTypes_);
          }
          onChanged();
        }
        switch (other.getHostRewriteSpecifierCase()) {
          case HOST_REWRITE: {
            hostRewriteSpecifierCase_ = 4;
            hostRewriteSpecifier_ = other.hostRewriteSpecifier_;
            onChanged();
            break;
          }
          case AUTO_HOST_REWRITE: {
            setAutoHostRewrite(other.getAutoHostRewrite());
            break;
          }
          case HOSTREWRITESPECIFIER_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int hostRewriteSpecifierCase_ = 0;
      private java.lang.Object hostRewriteSpecifier_;
      public HostRewriteSpecifierCase
          getHostRewriteSpecifierCase() {
        return HostRewriteSpecifierCase.forNumber(
            hostRewriteSpecifierCase_);
      }
      public Builder clearHostRewriteSpecifier() {
        hostRewriteSpecifierCase_ = 0;
        hostRewriteSpecifier_ = null;
        onChanged();
        return this;
      }
      private int bitField0_;
      private java.lang.Object backendGroupId_ = "";
      /**
       * 
       * Backend group to forward requests to.
       * Stream (TCP) backend groups are not supported.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @return The backendGroupId.
       */
      public java.lang.String getBackendGroupId() {
        java.lang.Object ref = backendGroupId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          backendGroupId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Backend group to forward requests to.
       * Stream (TCP) backend groups are not supported.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @return The bytes for backendGroupId.
       */
      public com.google.protobuf.ByteString
          getBackendGroupIdBytes() {
        java.lang.Object ref = backendGroupId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          backendGroupId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Backend group to forward requests to.
       * Stream (TCP) backend groups are not supported.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @param value The backendGroupId to set.
       * @return This builder for chaining.
       */
      public Builder setBackendGroupId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        backendGroupId_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Backend group to forward requests to.
       * Stream (TCP) backend groups are not supported.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @return This builder for chaining.
       */
      public Builder clearBackendGroupId() {
        
        backendGroupId_ = getDefaultInstance().getBackendGroupId();
        onChanged();
        return this;
      }
      /**
       * 
       * Backend group to forward requests to.
       * Stream (TCP) backend groups are not supported.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @param value The bytes for backendGroupId to set.
       * @return This builder for chaining.
       */
      public Builder setBackendGroupIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        backendGroupId_ = value;
        onChanged();
        return this;
      }
      private com.google.protobuf.Duration timeout_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> timeoutBuilder_;
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       * @return Whether the timeout field is set.
       */
      public boolean hasTimeout() {
        return timeoutBuilder_ != null || timeout_ != null;
      }
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       * @return The timeout.
       */
      public com.google.protobuf.Duration getTimeout() {
        if (timeoutBuilder_ == null) {
          return timeout_ == null ? com.google.protobuf.Duration.getDefaultInstance() : timeout_;
        } else {
          return timeoutBuilder_.getMessage();
        }
      }
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       */
      public Builder setTimeout(com.google.protobuf.Duration value) {
        if (timeoutBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          timeout_ = value;
          onChanged();
        } else {
          timeoutBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       */
      public Builder setTimeout(
          com.google.protobuf.Duration.Builder builderForValue) {
        if (timeoutBuilder_ == null) {
          timeout_ = builderForValue.build();
          onChanged();
        } else {
          timeoutBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       */
      public Builder mergeTimeout(com.google.protobuf.Duration value) {
        if (timeoutBuilder_ == null) {
          if (timeout_ != null) {
            timeout_ =
              com.google.protobuf.Duration.newBuilder(timeout_).mergeFrom(value).buildPartial();
          } else {
            timeout_ = value;
          }
          onChanged();
        } else {
          timeoutBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       */
      public Builder clearTimeout() {
        if (timeoutBuilder_ == null) {
          timeout_ = null;
          onChanged();
        } else {
          timeout_ = null;
          timeoutBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       */
      public com.google.protobuf.Duration.Builder getTimeoutBuilder() {
        
        onChanged();
        return getTimeoutFieldBuilder().getBuilder();
      }
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       */
      public com.google.protobuf.DurationOrBuilder getTimeoutOrBuilder() {
        if (timeoutBuilder_ != null) {
          return timeoutBuilder_.getMessageOrBuilder();
        } else {
          return timeout_ == null ?
              com.google.protobuf.Duration.getDefaultInstance() : timeout_;
        }
      }
      /**
       * 
       * Overall timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration timeout = 2;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
          getTimeoutFieldBuilder() {
        if (timeoutBuilder_ == null) {
          timeoutBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
                  getTimeout(),
                  getParentForChildren(),
                  isClean());
          timeout_ = null;
        }
        return timeoutBuilder_;
      }
      private com.google.protobuf.Duration idleTimeout_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> idleTimeoutBuilder_;
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       * @return Whether the idleTimeout field is set.
       */
      public boolean hasIdleTimeout() {
        return idleTimeoutBuilder_ != null || idleTimeout_ != null;
      }
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       * @return The idleTimeout.
       */
      public com.google.protobuf.Duration getIdleTimeout() {
        if (idleTimeoutBuilder_ == null) {
          return idleTimeout_ == null ? com.google.protobuf.Duration.getDefaultInstance() : idleTimeout_;
        } else {
          return idleTimeoutBuilder_.getMessage();
        }
      }
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public Builder setIdleTimeout(com.google.protobuf.Duration value) {
        if (idleTimeoutBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          idleTimeout_ = value;
          onChanged();
        } else {
          idleTimeoutBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public Builder setIdleTimeout(
          com.google.protobuf.Duration.Builder builderForValue) {
        if (idleTimeoutBuilder_ == null) {
          idleTimeout_ = builderForValue.build();
          onChanged();
        } else {
          idleTimeoutBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public Builder mergeIdleTimeout(com.google.protobuf.Duration value) {
        if (idleTimeoutBuilder_ == null) {
          if (idleTimeout_ != null) {
            idleTimeout_ =
              com.google.protobuf.Duration.newBuilder(idleTimeout_).mergeFrom(value).buildPartial();
          } else {
            idleTimeout_ = value;
          }
          onChanged();
        } else {
          idleTimeoutBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public Builder clearIdleTimeout() {
        if (idleTimeoutBuilder_ == null) {
          idleTimeout_ = null;
          onChanged();
        } else {
          idleTimeout_ = null;
          idleTimeoutBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public com.google.protobuf.Duration.Builder getIdleTimeoutBuilder() {
        
        onChanged();
        return getIdleTimeoutFieldBuilder().getBuilder();
      }
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public com.google.protobuf.DurationOrBuilder getIdleTimeoutOrBuilder() {
        if (idleTimeoutBuilder_ != null) {
          return idleTimeoutBuilder_.getMessageOrBuilder();
        } else {
          return idleTimeout_ == null ?
              com.google.protobuf.Duration.getDefaultInstance() : idleTimeout_;
        }
      }
      /**
       * 
       * Idle timeout for an HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events (`EventSource` interface) etc.
       * If a connection times out, the load balancer responds to the client with a `504 Gateway Timeout` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration (see [timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
          getIdleTimeoutFieldBuilder() {
        if (idleTimeoutBuilder_ == null) {
          idleTimeoutBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
                  getIdleTimeout(),
                  getParentForChildren(),
                  isClean());
          idleTimeout_ = null;
        }
        return idleTimeoutBuilder_;
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @return Whether the hostRewrite field is set.
       */
      @java.lang.Override
      public boolean hasHostRewrite() {
        return hostRewriteSpecifierCase_ == 4;
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @return The hostRewrite.
       */
      @java.lang.Override
      public java.lang.String getHostRewrite() {
        java.lang.Object ref = "";
        if (hostRewriteSpecifierCase_ == 4) {
          ref = hostRewriteSpecifier_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (hostRewriteSpecifierCase_ == 4) {
            hostRewriteSpecifier_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @return The bytes for hostRewrite.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getHostRewriteBytes() {
        java.lang.Object ref = "";
        if (hostRewriteSpecifierCase_ == 4) {
          ref = hostRewriteSpecifier_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (hostRewriteSpecifierCase_ == 4) {
            hostRewriteSpecifier_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @param value The hostRewrite to set.
       * @return This builder for chaining.
       */
      public Builder setHostRewrite(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  hostRewriteSpecifierCase_ = 4;
        hostRewriteSpecifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @return This builder for chaining.
       */
      public Builder clearHostRewrite() {
        if (hostRewriteSpecifierCase_ == 4) {
          hostRewriteSpecifierCase_ = 0;
          hostRewriteSpecifier_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @param value The bytes for hostRewrite to set.
       * @return This builder for chaining.
       */
      public Builder setHostRewriteBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        hostRewriteSpecifierCase_ = 4;
        hostRewriteSpecifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Automatically replaces the host with that of the target.
       * 
       *
       * bool auto_host_rewrite = 5;
       * @return Whether the autoHostRewrite field is set.
       */
      public boolean hasAutoHostRewrite() {
        return hostRewriteSpecifierCase_ == 5;
      }
      /**
       * 
       * Automatically replaces the host with that of the target.
       * 
       *
       * bool auto_host_rewrite = 5;
       * @return The autoHostRewrite.
       */
      public boolean getAutoHostRewrite() {
        if (hostRewriteSpecifierCase_ == 5) {
          return (java.lang.Boolean) hostRewriteSpecifier_;
        }
        return false;
      }
      /**
       * 
       * Automatically replaces the host with that of the target.
       * 
       *
       * bool auto_host_rewrite = 5;
       * @param value The autoHostRewrite to set.
       * @return This builder for chaining.
       */
      public Builder setAutoHostRewrite(boolean value) {
        hostRewriteSpecifierCase_ = 5;
        hostRewriteSpecifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Automatically replaces the host with that of the target.
       * 
       *
       * bool auto_host_rewrite = 5;
       * @return This builder for chaining.
       */
      public Builder clearAutoHostRewrite() {
        if (hostRewriteSpecifierCase_ == 5) {
          hostRewriteSpecifierCase_ = 0;
          hostRewriteSpecifier_ = null;
          onChanged();
        }
        return this;
      }
      private java.lang.Object prefixRewrite_ = "";
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
       * a request with `/foobaz` path is forwarded with `/barbaz` path.
       * For [StringMatch.exact_match], the whole path is replaced.
       * If not specified, the path is not changed.
       * 
       *
       * string prefix_rewrite = 6;
       * @return The prefixRewrite.
       */
      public java.lang.String getPrefixRewrite() {
        java.lang.Object ref = prefixRewrite_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          prefixRewrite_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
       * a request with `/foobaz` path is forwarded with `/barbaz` path.
       * For [StringMatch.exact_match], the whole path is replaced.
       * If not specified, the path is not changed.
       * 
       *
       * string prefix_rewrite = 6;
       * @return The bytes for prefixRewrite.
       */
      public com.google.protobuf.ByteString
          getPrefixRewriteBytes() {
        java.lang.Object ref = prefixRewrite_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          prefixRewrite_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
       * a request with `/foobaz` path is forwarded with `/barbaz` path.
       * For [StringMatch.exact_match], the whole path is replaced.
       * If not specified, the path is not changed.
       * 
       *
       * string prefix_rewrite = 6;
       * @param value The prefixRewrite to set.
       * @return This builder for chaining.
       */
      public Builder setPrefixRewrite(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        prefixRewrite_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
       * a request with `/foobaz` path is forwarded with `/barbaz` path.
       * For [StringMatch.exact_match], the whole path is replaced.
       * If not specified, the path is not changed.
       * 
       *
       * string prefix_rewrite = 6;
       * @return This builder for chaining.
       */
      public Builder clearPrefixRewrite() {
        
        prefixRewrite_ = getDefaultInstance().getPrefixRewrite();
        onChanged();
        return this;
      }
      /**
       * 
       * Replacement for the path prefix matched by [StringMatch].
       * For instance, if [StringMatch.prefix_match] value is `/foo` and `prefix_rewrite` value is `/bar`,
       * a request with `/foobaz` path is forwarded with `/barbaz` path.
       * For [StringMatch.exact_match], the whole path is replaced.
       * If not specified, the path is not changed.
       * 
       *
       * string prefix_rewrite = 6;
       * @param value The bytes for prefixRewrite to set.
       * @return This builder for chaining.
       */
      public Builder setPrefixRewriteBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        prefixRewrite_ = value;
        onChanged();
        return this;
      }
      private com.google.protobuf.LazyStringList upgradeTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureUpgradeTypesIsMutable() {
        if (!((bitField0_ & 0x00000001) != 0)) {
          upgradeTypes_ = new com.google.protobuf.LazyStringArrayList(upgradeTypes_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @return A list containing the upgradeTypes.
       */
      public com.google.protobuf.ProtocolStringList
          getUpgradeTypesList() {
        return upgradeTypes_.getUnmodifiableView();
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @return The count of upgradeTypes.
       */
      public int getUpgradeTypesCount() {
        return upgradeTypes_.size();
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @param index The index of the element to return.
       * @return The upgradeTypes at the given index.
       */
      public java.lang.String getUpgradeTypes(int index) {
        return upgradeTypes_.get(index);
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @param index The index of the value to return.
       * @return The bytes of the upgradeTypes at the given index.
       */
      public com.google.protobuf.ByteString
          getUpgradeTypesBytes(int index) {
        return upgradeTypes_.getByteString(index);
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @param index The index to set the value at.
       * @param value The upgradeTypes to set.
       * @return This builder for chaining.
       */
      public Builder setUpgradeTypes(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUpgradeTypesIsMutable();
        upgradeTypes_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @param value The upgradeTypes to add.
       * @return This builder for chaining.
       */
      public Builder addUpgradeTypes(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUpgradeTypesIsMutable();
        upgradeTypes_.add(value);
        onChanged();
        return this;
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @param values The upgradeTypes to add.
       * @return This builder for chaining.
       */
      public Builder addAllUpgradeTypes(
          java.lang.Iterable values) {
        ensureUpgradeTypesIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, upgradeTypes_);
        onChanged();
        return this;
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @return This builder for chaining.
       */
      public Builder clearUpgradeTypes() {
        upgradeTypes_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * 
       * Supported values for HTTP `Upgrade` header. E.g. `websocket`.
       * 
       *
       * repeated string upgrade_types = 7;
       * @param value The bytes of the upgradeTypes to add.
       * @return This builder for chaining.
       */
      public Builder addUpgradeTypesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        ensureUpgradeTypesIsMutable();
        upgradeTypes_.add(value);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.HttpRouteAction)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.HttpRouteAction)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public HttpRouteAction parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new HttpRouteAction(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.HttpRouteAction getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  public interface GrpcRouteActionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:yandex.cloud.apploadbalancer.v1.GrpcRouteAction)
      com.google.protobuf.MessageOrBuilder {
    /**
     * 
     * Backend group to forward requests to.
     * 
     *
     * string backend_group_id = 1 [(.yandex.cloud.required) = true];
     * @return The backendGroupId.
     */
    java.lang.String getBackendGroupId();
    /**
     * 
     * Backend group to forward requests to.
     * 
     *
     * string backend_group_id = 1 [(.yandex.cloud.required) = true];
     * @return The bytes for backendGroupId.
     */
    com.google.protobuf.ByteString
        getBackendGroupIdBytes();
    /**
     * 
     * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration max_timeout = 2;
     * @return Whether the maxTimeout field is set.
     */
    boolean hasMaxTimeout();
    /**
     * 
     * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration max_timeout = 2;
     * @return The maxTimeout.
     */
    com.google.protobuf.Duration getMaxTimeout();
    /**
     * 
     * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration max_timeout = 2;
     */
    com.google.protobuf.DurationOrBuilder getMaxTimeoutOrBuilder();
    /**
     * 
     * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events etc.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
     * (see [max_timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     * @return Whether the idleTimeout field is set.
     */
    boolean hasIdleTimeout();
    /**
     * 
     * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events etc.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
     * (see [max_timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     * @return The idleTimeout.
     */
    com.google.protobuf.Duration getIdleTimeout();
    /**
     * 
     * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events etc.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
     * (see [max_timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     */
    com.google.protobuf.DurationOrBuilder getIdleTimeoutOrBuilder();
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return Whether the hostRewrite field is set.
     */
    boolean hasHostRewrite();
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return The hostRewrite.
     */
    java.lang.String getHostRewrite();
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return The bytes for hostRewrite.
     */
    com.google.protobuf.ByteString
        getHostRewriteBytes();
    /**
     * 
     * Automatically replaces the host with that of the target.
     * 
     *
     * bool auto_host_rewrite = 5;
     * @return Whether the autoHostRewrite field is set.
     */
    boolean hasAutoHostRewrite();
    /**
     * 
     * Automatically replaces the host with that of the target.
     * 
     *
     * bool auto_host_rewrite = 5;
     * @return The autoHostRewrite.
     */
    boolean getAutoHostRewrite();
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.HostRewriteSpecifierCase getHostRewriteSpecifierCase();
  }
  /**
   * 
   * A gRPC route action resource.
   * 
   *
   * Protobuf type {@code yandex.cloud.apploadbalancer.v1.GrpcRouteAction}
   */
  public static final class GrpcRouteAction extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:yandex.cloud.apploadbalancer.v1.GrpcRouteAction)
      GrpcRouteActionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GrpcRouteAction.newBuilder() to construct.
    private GrpcRouteAction(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
      super(builder);
    }
    private GrpcRouteAction() {
      backendGroupId_ = "";
    }
    @java.lang.Override
    @SuppressWarnings({"unused"})
    protected java.lang.Object newInstance(
        UnusedPrivateParameter unused) {
      return new GrpcRouteAction();
    }
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GrpcRouteAction(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10: {
              java.lang.String s = input.readStringRequireUtf8();
              backendGroupId_ = s;
              break;
            }
            case 18: {
              com.google.protobuf.Duration.Builder subBuilder = null;
              if (maxTimeout_ != null) {
                subBuilder = maxTimeout_.toBuilder();
              }
              maxTimeout_ = input.readMessage(com.google.protobuf.Duration.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(maxTimeout_);
                maxTimeout_ = subBuilder.buildPartial();
              }
              break;
            }
            case 26: {
              com.google.protobuf.Duration.Builder subBuilder = null;
              if (idleTimeout_ != null) {
                subBuilder = idleTimeout_.toBuilder();
              }
              idleTimeout_ = input.readMessage(com.google.protobuf.Duration.parser(), extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(idleTimeout_);
                idleTimeout_ = subBuilder.buildPartial();
              }
              break;
            }
            case 34: {
              java.lang.String s = input.readStringRequireUtf8();
              hostRewriteSpecifierCase_ = 4;
              hostRewriteSpecifier_ = s;
              break;
            }
            case 40: {
              hostRewriteSpecifier_ = input.readBool();
              hostRewriteSpecifierCase_ = 5;
              break;
            }
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_descriptor;
    }
    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.Builder.class);
    }
    private int hostRewriteSpecifierCase_ = 0;
    private java.lang.Object hostRewriteSpecifier_;
    public enum HostRewriteSpecifierCase
        implements com.google.protobuf.Internal.EnumLite,
            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
      HOST_REWRITE(4),
      AUTO_HOST_REWRITE(5),
      HOSTREWRITESPECIFIER_NOT_SET(0);
      private final int value;
      private HostRewriteSpecifierCase(int value) {
        this.value = value;
      }
      /**
       * @param value The number of the enum to look for.
       * @return The enum associated with the given number.
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static HostRewriteSpecifierCase valueOf(int value) {
        return forNumber(value);
      }
      public static HostRewriteSpecifierCase forNumber(int value) {
        switch (value) {
          case 4: return HOST_REWRITE;
          case 5: return AUTO_HOST_REWRITE;
          case 0: return HOSTREWRITESPECIFIER_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };
    public HostRewriteSpecifierCase
    getHostRewriteSpecifierCase() {
      return HostRewriteSpecifierCase.forNumber(
          hostRewriteSpecifierCase_);
    }
    public static final int BACKEND_GROUP_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object backendGroupId_;
    /**
     * 
     * Backend group to forward requests to.
     * 
     *
     * string backend_group_id = 1 [(.yandex.cloud.required) = true];
     * @return The backendGroupId.
     */
    @java.lang.Override
    public java.lang.String getBackendGroupId() {
      java.lang.Object ref = backendGroupId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        backendGroupId_ = s;
        return s;
      }
    }
    /**
     * 
     * Backend group to forward requests to.
     * 
     *
     * string backend_group_id = 1 [(.yandex.cloud.required) = true];
     * @return The bytes for backendGroupId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getBackendGroupIdBytes() {
      java.lang.Object ref = backendGroupId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        backendGroupId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int MAX_TIMEOUT_FIELD_NUMBER = 2;
    private com.google.protobuf.Duration maxTimeout_;
    /**
     * 
     * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration max_timeout = 2;
     * @return Whether the maxTimeout field is set.
     */
    @java.lang.Override
    public boolean hasMaxTimeout() {
      return maxTimeout_ != null;
    }
    /**
     * 
     * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration max_timeout = 2;
     * @return The maxTimeout.
     */
    @java.lang.Override
    public com.google.protobuf.Duration getMaxTimeout() {
      return maxTimeout_ == null ? com.google.protobuf.Duration.getDefaultInstance() : maxTimeout_;
    }
    /**
     * 
     * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
     * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * Default value: `60`.
     * 
     *
     * .google.protobuf.Duration max_timeout = 2;
     */
    @java.lang.Override
    public com.google.protobuf.DurationOrBuilder getMaxTimeoutOrBuilder() {
      return getMaxTimeout();
    }
    public static final int IDLE_TIMEOUT_FIELD_NUMBER = 3;
    private com.google.protobuf.Duration idleTimeout_;
    /**
     * 
     * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events etc.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
     * (see [max_timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     * @return Whether the idleTimeout field is set.
     */
    @java.lang.Override
    public boolean hasIdleTimeout() {
      return idleTimeout_ != null;
    }
    /**
     * 
     * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events etc.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
     * (see [max_timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     * @return The idleTimeout.
     */
    @java.lang.Override
    public com.google.protobuf.Duration getIdleTimeout() {
      return idleTimeout_ == null ? com.google.protobuf.Duration.getDefaultInstance() : idleTimeout_;
    }
    /**
     * 
     * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
     * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
     * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
     * server-push mechanisms such as long polling, server-sent events etc.
     * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
     * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
     * (see [max_timeout]).
     * 
     *
     * .google.protobuf.Duration idle_timeout = 3;
     */
    @java.lang.Override
    public com.google.protobuf.DurationOrBuilder getIdleTimeoutOrBuilder() {
      return getIdleTimeout();
    }
    public static final int HOST_REWRITE_FIELD_NUMBER = 4;
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return Whether the hostRewrite field is set.
     */
    public boolean hasHostRewrite() {
      return hostRewriteSpecifierCase_ == 4;
    }
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return The hostRewrite.
     */
    public java.lang.String getHostRewrite() {
      java.lang.Object ref = "";
      if (hostRewriteSpecifierCase_ == 4) {
        ref = hostRewriteSpecifier_;
      }
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (hostRewriteSpecifierCase_ == 4) {
          hostRewriteSpecifier_ = s;
        }
        return s;
      }
    }
    /**
     * 
     * Host replacement.
     * 
     *
     * string host_rewrite = 4;
     * @return The bytes for hostRewrite.
     */
    public com.google.protobuf.ByteString
        getHostRewriteBytes() {
      java.lang.Object ref = "";
      if (hostRewriteSpecifierCase_ == 4) {
        ref = hostRewriteSpecifier_;
      }
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        if (hostRewriteSpecifierCase_ == 4) {
          hostRewriteSpecifier_ = b;
        }
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }
    public static final int AUTO_HOST_REWRITE_FIELD_NUMBER = 5;
    /**
     * 
     * Automatically replaces the host with that of the target.
     * 
     *
     * bool auto_host_rewrite = 5;
     * @return Whether the autoHostRewrite field is set.
     */
    @java.lang.Override
    public boolean hasAutoHostRewrite() {
      return hostRewriteSpecifierCase_ == 5;
    }
    /**
     * 
     * Automatically replaces the host with that of the target.
     * 
     *
     * bool auto_host_rewrite = 5;
     * @return The autoHostRewrite.
     */
    @java.lang.Override
    public boolean getAutoHostRewrite() {
      if (hostRewriteSpecifierCase_ == 5) {
        return (java.lang.Boolean) hostRewriteSpecifier_;
      }
      return false;
    }
    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;
      memoizedIsInitialized = 1;
      return true;
    }
    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backendGroupId_)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, backendGroupId_);
      }
      if (maxTimeout_ != null) {
        output.writeMessage(2, getMaxTimeout());
      }
      if (idleTimeout_ != null) {
        output.writeMessage(3, getIdleTimeout());
      }
      if (hostRewriteSpecifierCase_ == 4) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, hostRewriteSpecifier_);
      }
      if (hostRewriteSpecifierCase_ == 5) {
        output.writeBool(
            5, (boolean)((java.lang.Boolean) hostRewriteSpecifier_));
      }
      unknownFields.writeTo(output);
    }
    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;
      size = 0;
      if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(backendGroupId_)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, backendGroupId_);
      }
      if (maxTimeout_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getMaxTimeout());
      }
      if (idleTimeout_ != null) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getIdleTimeout());
      }
      if (hostRewriteSpecifierCase_ == 4) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, hostRewriteSpecifier_);
      }
      if (hostRewriteSpecifierCase_ == 5) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(
              5, (boolean)((java.lang.Boolean) hostRewriteSpecifier_));
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }
    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction)) {
        return super.equals(obj);
      }
      yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction other = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) obj;
      if (!getBackendGroupId()
          .equals(other.getBackendGroupId())) return false;
      if (hasMaxTimeout() != other.hasMaxTimeout()) return false;
      if (hasMaxTimeout()) {
        if (!getMaxTimeout()
            .equals(other.getMaxTimeout())) return false;
      }
      if (hasIdleTimeout() != other.hasIdleTimeout()) return false;
      if (hasIdleTimeout()) {
        if (!getIdleTimeout()
            .equals(other.getIdleTimeout())) return false;
      }
      if (!getHostRewriteSpecifierCase().equals(other.getHostRewriteSpecifierCase())) return false;
      switch (hostRewriteSpecifierCase_) {
        case 4:
          if (!getHostRewrite()
              .equals(other.getHostRewrite())) return false;
          break;
        case 5:
          if (getAutoHostRewrite()
              != other.getAutoHostRewrite()) return false;
          break;
        case 0:
        default:
      }
      if (!unknownFields.equals(other.unknownFields)) return false;
      return true;
    }
    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + BACKEND_GROUP_ID_FIELD_NUMBER;
      hash = (53 * hash) + getBackendGroupId().hashCode();
      if (hasMaxTimeout()) {
        hash = (37 * hash) + MAX_TIMEOUT_FIELD_NUMBER;
        hash = (53 * hash) + getMaxTimeout().hashCode();
      }
      if (hasIdleTimeout()) {
        hash = (37 * hash) + IDLE_TIMEOUT_FIELD_NUMBER;
        hash = (53 * hash) + getIdleTimeout().hashCode();
      }
      switch (hostRewriteSpecifierCase_) {
        case 4:
          hash = (37 * hash) + HOST_REWRITE_FIELD_NUMBER;
          hash = (53 * hash) + getHostRewrite().hashCode();
          break;
        case 5:
          hash = (37 * hash) + AUTO_HOST_REWRITE_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
              getAutoHostRewrite());
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }
    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }
    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * 
     * A gRPC route action resource.
     * 
     *
     * Protobuf type {@code yandex.cloud.apploadbalancer.v1.GrpcRouteAction}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder implements
        // @@protoc_insertion_point(builder_implements:yandex.cloud.apploadbalancer.v1.GrpcRouteAction)
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteActionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_descriptor;
      }
      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.class, yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.Builder.class);
      }
      // Construct using yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }
      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        backendGroupId_ = "";
        if (maxTimeoutBuilder_ == null) {
          maxTimeout_ = null;
        } else {
          maxTimeout_ = null;
          maxTimeoutBuilder_ = null;
        }
        if (idleTimeoutBuilder_ == null) {
          idleTimeout_ = null;
        } else {
          idleTimeout_ = null;
          idleTimeoutBuilder_ = null;
        }
        hostRewriteSpecifierCase_ = 0;
        hostRewriteSpecifier_ = null;
        return this;
      }
      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_descriptor;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction getDefaultInstanceForType() {
        return yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance();
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction build() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }
      @java.lang.Override
      public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction buildPartial() {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction result = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction(this);
        result.backendGroupId_ = backendGroupId_;
        if (maxTimeoutBuilder_ == null) {
          result.maxTimeout_ = maxTimeout_;
        } else {
          result.maxTimeout_ = maxTimeoutBuilder_.build();
        }
        if (idleTimeoutBuilder_ == null) {
          result.idleTimeout_ = idleTimeout_;
        } else {
          result.idleTimeout_ = idleTimeoutBuilder_.build();
        }
        if (hostRewriteSpecifierCase_ == 4) {
          result.hostRewriteSpecifier_ = hostRewriteSpecifier_;
        }
        if (hostRewriteSpecifierCase_ == 5) {
          result.hostRewriteSpecifier_ = hostRewriteSpecifier_;
        }
        result.hostRewriteSpecifierCase_ = hostRewriteSpecifierCase_;
        onBuilt();
        return result;
      }
      @java.lang.Override
      public Builder clone() {
        return super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) {
          return mergeFrom((yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      public Builder mergeFrom(yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction other) {
        if (other == yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction.getDefaultInstance()) return this;
        if (!other.getBackendGroupId().isEmpty()) {
          backendGroupId_ = other.backendGroupId_;
          onChanged();
        }
        if (other.hasMaxTimeout()) {
          mergeMaxTimeout(other.getMaxTimeout());
        }
        if (other.hasIdleTimeout()) {
          mergeIdleTimeout(other.getIdleTimeout());
        }
        switch (other.getHostRewriteSpecifierCase()) {
          case HOST_REWRITE: {
            hostRewriteSpecifierCase_ = 4;
            hostRewriteSpecifier_ = other.hostRewriteSpecifier_;
            onChanged();
            break;
          }
          case AUTO_HOST_REWRITE: {
            setAutoHostRewrite(other.getAutoHostRewrite());
            break;
          }
          case HOSTREWRITESPECIFIER_NOT_SET: {
            break;
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }
      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }
      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int hostRewriteSpecifierCase_ = 0;
      private java.lang.Object hostRewriteSpecifier_;
      public HostRewriteSpecifierCase
          getHostRewriteSpecifierCase() {
        return HostRewriteSpecifierCase.forNumber(
            hostRewriteSpecifierCase_);
      }
      public Builder clearHostRewriteSpecifier() {
        hostRewriteSpecifierCase_ = 0;
        hostRewriteSpecifier_ = null;
        onChanged();
        return this;
      }
      private java.lang.Object backendGroupId_ = "";
      /**
       * 
       * Backend group to forward requests to.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @return The backendGroupId.
       */
      public java.lang.String getBackendGroupId() {
        java.lang.Object ref = backendGroupId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          backendGroupId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Backend group to forward requests to.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @return The bytes for backendGroupId.
       */
      public com.google.protobuf.ByteString
          getBackendGroupIdBytes() {
        java.lang.Object ref = backendGroupId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          backendGroupId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Backend group to forward requests to.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @param value The backendGroupId to set.
       * @return This builder for chaining.
       */
      public Builder setBackendGroupId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  
        backendGroupId_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Backend group to forward requests to.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @return This builder for chaining.
       */
      public Builder clearBackendGroupId() {
        
        backendGroupId_ = getDefaultInstance().getBackendGroupId();
        onChanged();
        return this;
      }
      /**
       * 
       * Backend group to forward requests to.
       * 
       *
       * string backend_group_id = 1 [(.yandex.cloud.required) = true];
       * @param value The bytes for backendGroupId to set.
       * @return This builder for chaining.
       */
      public Builder setBackendGroupIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        
        backendGroupId_ = value;
        onChanged();
        return this;
      }
      private com.google.protobuf.Duration maxTimeout_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> maxTimeoutBuilder_;
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       * @return Whether the maxTimeout field is set.
       */
      public boolean hasMaxTimeout() {
        return maxTimeoutBuilder_ != null || maxTimeout_ != null;
      }
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       * @return The maxTimeout.
       */
      public com.google.protobuf.Duration getMaxTimeout() {
        if (maxTimeoutBuilder_ == null) {
          return maxTimeout_ == null ? com.google.protobuf.Duration.getDefaultInstance() : maxTimeout_;
        } else {
          return maxTimeoutBuilder_.getMessage();
        }
      }
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       */
      public Builder setMaxTimeout(com.google.protobuf.Duration value) {
        if (maxTimeoutBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          maxTimeout_ = value;
          onChanged();
        } else {
          maxTimeoutBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       */
      public Builder setMaxTimeout(
          com.google.protobuf.Duration.Builder builderForValue) {
        if (maxTimeoutBuilder_ == null) {
          maxTimeout_ = builderForValue.build();
          onChanged();
        } else {
          maxTimeoutBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       */
      public Builder mergeMaxTimeout(com.google.protobuf.Duration value) {
        if (maxTimeoutBuilder_ == null) {
          if (maxTimeout_ != null) {
            maxTimeout_ =
              com.google.protobuf.Duration.newBuilder(maxTimeout_).mergeFrom(value).buildPartial();
          } else {
            maxTimeout_ = value;
          }
          onChanged();
        } else {
          maxTimeoutBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       */
      public Builder clearMaxTimeout() {
        if (maxTimeoutBuilder_ == null) {
          maxTimeout_ = null;
          onChanged();
        } else {
          maxTimeout_ = null;
          maxTimeoutBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       */
      public com.google.protobuf.Duration.Builder getMaxTimeoutBuilder() {
        
        onChanged();
        return getMaxTimeoutFieldBuilder().getBuilder();
      }
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       */
      public com.google.protobuf.DurationOrBuilder getMaxTimeoutOrBuilder() {
        if (maxTimeoutBuilder_ != null) {
          return maxTimeoutBuilder_.getMessageOrBuilder();
        } else {
          return maxTimeout_ == null ?
              com.google.protobuf.Duration.getDefaultInstance() : maxTimeout_;
        }
      }
      /**
       * 
       * Overall timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is kept alive for, regardless of whether data is transferred over it.
       * If a client specifies a lower timeout in HTTP `grpc-timeout` header, the `max_timeout` value is ignored.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * Default value: `60`.
       * 
       *
       * .google.protobuf.Duration max_timeout = 2;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
          getMaxTimeoutFieldBuilder() {
        if (maxTimeoutBuilder_ == null) {
          maxTimeoutBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
                  getMaxTimeout(),
                  getParentForChildren(),
                  isClean());
          maxTimeout_ = null;
        }
        return maxTimeoutBuilder_;
      }
      private com.google.protobuf.Duration idleTimeout_;
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> idleTimeoutBuilder_;
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       * @return Whether the idleTimeout field is set.
       */
      public boolean hasIdleTimeout() {
        return idleTimeoutBuilder_ != null || idleTimeout_ != null;
      }
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       * @return The idleTimeout.
       */
      public com.google.protobuf.Duration getIdleTimeout() {
        if (idleTimeoutBuilder_ == null) {
          return idleTimeout_ == null ? com.google.protobuf.Duration.getDefaultInstance() : idleTimeout_;
        } else {
          return idleTimeoutBuilder_.getMessage();
        }
      }
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public Builder setIdleTimeout(com.google.protobuf.Duration value) {
        if (idleTimeoutBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          idleTimeout_ = value;
          onChanged();
        } else {
          idleTimeoutBuilder_.setMessage(value);
        }
        return this;
      }
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public Builder setIdleTimeout(
          com.google.protobuf.Duration.Builder builderForValue) {
        if (idleTimeoutBuilder_ == null) {
          idleTimeout_ = builderForValue.build();
          onChanged();
        } else {
          idleTimeoutBuilder_.setMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public Builder mergeIdleTimeout(com.google.protobuf.Duration value) {
        if (idleTimeoutBuilder_ == null) {
          if (idleTimeout_ != null) {
            idleTimeout_ =
              com.google.protobuf.Duration.newBuilder(idleTimeout_).mergeFrom(value).buildPartial();
          } else {
            idleTimeout_ = value;
          }
          onChanged();
        } else {
          idleTimeoutBuilder_.mergeFrom(value);
        }
        return this;
      }
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public Builder clearIdleTimeout() {
        if (idleTimeoutBuilder_ == null) {
          idleTimeout_ = null;
          onChanged();
        } else {
          idleTimeout_ = null;
          idleTimeoutBuilder_ = null;
        }
        return this;
      }
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public com.google.protobuf.Duration.Builder getIdleTimeoutBuilder() {
        
        onChanged();
        return getIdleTimeoutFieldBuilder().getBuilder();
      }
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      public com.google.protobuf.DurationOrBuilder getIdleTimeoutOrBuilder() {
        if (idleTimeoutBuilder_ != null) {
          return idleTimeoutBuilder_.getMessageOrBuilder();
        } else {
          return idleTimeout_ == null ?
              com.google.protobuf.Duration.getDefaultInstance() : idleTimeout_;
        }
      }
      /**
       * 
       * Idle timeout for an underlying HTTP connection between a load balancer node an a backend from the backend group:
       * the maximum time the connection is allowed to be idle, i.e. without any data transferred over it.
       * Specifying meaningful values for both [max_timeout] and `idle_timeout` is useful for implementing
       * server-push mechanisms such as long polling, server-sent events etc.
       * If a connection times out, the load balancer responds to the client with an `UNAVAILABLE` status code.
       * If not specified, no idle timeout is used, and an alive connection may be idle for any duration
       * (see [max_timeout]).
       * 
       *
       * .google.protobuf.Duration idle_timeout = 3;
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
          getIdleTimeoutFieldBuilder() {
        if (idleTimeoutBuilder_ == null) {
          idleTimeoutBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder>(
                  getIdleTimeout(),
                  getParentForChildren(),
                  isClean());
          idleTimeout_ = null;
        }
        return idleTimeoutBuilder_;
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @return Whether the hostRewrite field is set.
       */
      @java.lang.Override
      public boolean hasHostRewrite() {
        return hostRewriteSpecifierCase_ == 4;
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @return The hostRewrite.
       */
      @java.lang.Override
      public java.lang.String getHostRewrite() {
        java.lang.Object ref = "";
        if (hostRewriteSpecifierCase_ == 4) {
          ref = hostRewriteSpecifier_;
        }
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (hostRewriteSpecifierCase_ == 4) {
            hostRewriteSpecifier_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @return The bytes for hostRewrite.
       */
      @java.lang.Override
      public com.google.protobuf.ByteString
          getHostRewriteBytes() {
        java.lang.Object ref = "";
        if (hostRewriteSpecifierCase_ == 4) {
          ref = hostRewriteSpecifier_;
        }
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          if (hostRewriteSpecifierCase_ == 4) {
            hostRewriteSpecifier_ = b;
          }
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @param value The hostRewrite to set.
       * @return This builder for chaining.
       */
      public Builder setHostRewrite(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  hostRewriteSpecifierCase_ = 4;
        hostRewriteSpecifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @return This builder for chaining.
       */
      public Builder clearHostRewrite() {
        if (hostRewriteSpecifierCase_ == 4) {
          hostRewriteSpecifierCase_ = 0;
          hostRewriteSpecifier_ = null;
          onChanged();
        }
        return this;
      }
      /**
       * 
       * Host replacement.
       * 
       *
       * string host_rewrite = 4;
       * @param value The bytes for hostRewrite to set.
       * @return This builder for chaining.
       */
      public Builder setHostRewriteBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  checkByteStringIsUtf8(value);
        hostRewriteSpecifierCase_ = 4;
        hostRewriteSpecifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Automatically replaces the host with that of the target.
       * 
       *
       * bool auto_host_rewrite = 5;
       * @return Whether the autoHostRewrite field is set.
       */
      public boolean hasAutoHostRewrite() {
        return hostRewriteSpecifierCase_ == 5;
      }
      /**
       * 
       * Automatically replaces the host with that of the target.
       * 
       *
       * bool auto_host_rewrite = 5;
       * @return The autoHostRewrite.
       */
      public boolean getAutoHostRewrite() {
        if (hostRewriteSpecifierCase_ == 5) {
          return (java.lang.Boolean) hostRewriteSpecifier_;
        }
        return false;
      }
      /**
       * 
       * Automatically replaces the host with that of the target.
       * 
       *
       * bool auto_host_rewrite = 5;
       * @param value The autoHostRewrite to set.
       * @return This builder for chaining.
       */
      public Builder setAutoHostRewrite(boolean value) {
        hostRewriteSpecifierCase_ = 5;
        hostRewriteSpecifier_ = value;
        onChanged();
        return this;
      }
      /**
       * 
       * Automatically replaces the host with that of the target.
       * 
       *
       * bool auto_host_rewrite = 5;
       * @return This builder for chaining.
       */
      public Builder clearAutoHostRewrite() {
        if (hostRewriteSpecifierCase_ == 5) {
          hostRewriteSpecifierCase_ = 0;
          hostRewriteSpecifier_ = null;
          onChanged();
        }
        return this;
      }
      @java.lang.Override
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }
      @java.lang.Override
      public final Builder mergeUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.mergeUnknownFields(unknownFields);
      }
      // @@protoc_insertion_point(builder_scope:yandex.cloud.apploadbalancer.v1.GrpcRouteAction)
    }
    // @@protoc_insertion_point(class_scope:yandex.cloud.apploadbalancer.v1.GrpcRouteAction)
    private static final yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction();
    }
    public static yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }
    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public GrpcRouteAction parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GrpcRouteAction(input, extensionRegistry);
      }
    };
    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }
    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }
    @java.lang.Override
    public yandex.cloud.api.apploadbalancer.v1.VirtualHostOuterClass.GrpcRouteAction getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }
  }
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_RBAC_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_RBAC_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_Principals_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_Principals_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_Principal_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_Principal_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_Route_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_Route_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_fieldAccessorTable;
  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n2yandex/cloud/apploadbalancer/v1/virtua" +
      "l_host.proto\022\037yandex.cloud.apploadbalanc" +
      "er.v1\032\036google/protobuf/duration.proto\032-y" +
      "andex/cloud/apploadbalancer/v1/payload.p" +
      "roto\032\035yandex/cloud/validation.proto\"\335\002\n\013" +
      "VirtualHost\022\022\n\004name\030\001 \001(\tB\004\350\3071\001\022\021\n\tautho" +
      "rity\030\002 \003(\t\0226\n\006routes\030\003 \003(\0132&.yandex.clou" +
      "d.apploadbalancer.v1.Route\022S\n\026modify_req" +
      "uest_headers\030\004 \003(\01323.yandex.cloud.apploa" +
      "dbalancer.v1.HeaderModification\022T\n\027modif" +
      "y_response_headers\030\005 \003(\01323.yandex.cloud." +
      "apploadbalancer.v1.HeaderModification\022D\n" +
      "\rroute_options\030\006 \001(\0132-.yandex.cloud.appl" +
      "oadbalancer.v1.RouteOptions\"\356\001\n\014RouteOpt" +
      "ions\022S\n\026modify_request_headers\030\001 \003(\01323.y" +
      "andex.cloud.apploadbalancer.v1.HeaderMod" +
      "ification\022T\n\027modify_response_headers\030\002 \003" +
      "(\01323.yandex.cloud.apploadbalancer.v1.Hea" +
      "derModification\0223\n\004rbac\030\003 \001(\0132%.yandex.c" +
      "loud.apploadbalancer.v1.RBAC\"\313\001\n\004RBAC\022B\n" +
      "\006action\030\001 \001(\0162,.yandex.cloud.apploadbala" +
      "ncer.v1.RBAC.ActionB\004\350\3071\001\022H\n\nprincipals\030" +
      "\002 \003(\0132+.yandex.cloud.apploadbalancer.v1." +
      "PrincipalsB\007\202\3101\003>=1\"5\n\006Action\022\026\n\022ACTION_" +
      "UNSPECIFIED\020\000\022\t\n\005ALLOW\020\001\022\010\n\004DENY\020\002\"Y\n\nPr" +
      "incipals\022K\n\016and_principals\030\001 \003(\0132*.yande" +
      "x.cloud.apploadbalancer.v1.PrincipalB\007\202\310" +
      "1\003>=1\"\361\001\n\tPrincipal\022J\n\006header\030\001 \001(\01328.ya" +
      "ndex.cloud.apploadbalancer.v1.Principal." +
      "HeaderMatcherH\000\022\023\n\tremote_ip\030\002 \001(\tH\000\022\r\n\003" +
      "any\030\003 \001(\010H\000\032`\n\rHeaderMatcher\022\022\n\004name\030\001 \001" +
      "(\tB\004\350\3071\001\022;\n\005value\030\002 \001(\0132,.yandex.cloud.a" +
      "pploadbalancer.v1.StringMatchB\022\n\nidentif" +
      "ier\022\004\300\3011\001\"x\n\022HeaderModification\022\014\n\004name\030" +
      "\001 \001(\t\022\020\n\006append\030\002 \001(\tH\000\022\021\n\007replace\030\003 \001(\t" +
      "H\000\022\020\n\006remove\030\004 \001(\010H\000\022\020\n\006rename\030\005 \001(\tH\000B\013" +
      "\n\toperation\"\350\001\n\005Route\022\022\n\004name\030\001 \001(\tB\004\350\3071" +
      "\001\022:\n\004http\030\002 \001(\0132*.yandex.cloud.apploadba" +
      "lancer.v1.HttpRouteH\000\022:\n\004grpc\030\003 \001(\0132*.ya" +
      "ndex.cloud.apploadbalancer.v1.GrpcRouteH" +
      "\000\022D\n\rroute_options\030\004 \001(\0132-.yandex.cloud." +
      "apploadbalancer.v1.RouteOptionsB\r\n\005route" +
      "\022\004\300\3011\001\"\265\002\n\tHttpRoute\022>\n\005match\030\001 \001(\0132/.ya" +
      "ndex.cloud.apploadbalancer.v1.HttpRouteM" +
      "atch\022A\n\005route\030\002 \001(\01320.yandex.cloud.applo" +
      "adbalancer.v1.HttpRouteActionH\000\022C\n\010redir" +
      "ect\030\003 \001(\0132/.yandex.cloud.apploadbalancer" +
      ".v1.RedirectActionH\000\022P\n\017direct_response\030" +
      "\004 \001(\01325.yandex.cloud.apploadbalancer.v1." +
      "DirectResponseActionH\000B\016\n\006action\022\004\300\3011\001\"\364" +
      "\001\n\tGrpcRoute\022>\n\005match\030\001 \001(\0132/.yandex.clo" +
      "ud.apploadbalancer.v1.GrpcRouteMatch\022A\n\005" +
      "route\030\002 \001(\01320.yandex.cloud.apploadbalanc" +
      "er.v1.GrpcRouteActionH\000\022T\n\017status_respon" +
      "se\030\003 \001(\01329.yandex.cloud.apploadbalancer." +
      "v1.GrpcStatusResponseActionH\000B\016\n\006action\022" +
      "\004\300\3011\001\"a\n\016HttpRouteMatch\022\023\n\013http_method\030\001" +
      " \003(\t\022:\n\004path\030\002 \001(\0132,.yandex.cloud.apploa" +
      "dbalancer.v1.StringMatch\"L\n\016GrpcRouteMat" +
      "ch\022:\n\004fqmn\030\001 \001(\0132,.yandex.cloud.apploadb" +
      "alancer.v1.StringMatch\"b\n\013StringMatch\022\025\n" +
      "\013exact_match\030\001 \001(\tH\000\022\026\n\014prefix_match\030\002 \001" +
      "(\tH\000\022\025\n\013regex_match\030\003 \001(\tH\000B\r\n\005match\022\004\300\301" +
      "1\001\"\372\002\n\016RedirectAction\022\026\n\016replace_scheme\030" +
      "\001 \001(\t\022\024\n\014replace_host\030\002 \001(\t\022\024\n\014replace_p" +
      "ort\030\003 \001(\003\022\026\n\014replace_path\030\004 \001(\tH\000\022\030\n\016rep" +
      "lace_prefix\030\005 \001(\tH\000\022\024\n\014remove_query\030\006 \001(" +
      "\010\022[\n\rresponse_code\030\007 \001(\0162D.yandex.cloud." +
      "apploadbalancer.v1.RedirectAction.Redire" +
      "ctResponseCode\"w\n\024RedirectResponseCode\022\025" +
      "\n\021MOVED_PERMANENTLY\020\000\022\t\n\005FOUND\020\001\022\r\n\tSEE_" +
      "OTHER\020\002\022\026\n\022TEMPORARY_REDIRECT\020\003\022\026\n\022PERMA" +
      "NENT_REDIRECT\020\004B\006\n\004path\"k\n\024DirectRespons" +
      "eAction\022\033\n\006status\030\001 \001(\003B\013\372\3071\007100-599\0226\n\004" +
      "body\030\002 \001(\0132(.yandex.cloud.apploadbalance" +
      "r.v1.Payload\"\202\002\n\030GrpcStatusResponseActio" +
      "n\022P\n\006status\030\001 \001(\[email protected]" +
      "balancer.v1.GrpcStatusResponseAction.Sta" +
      "tus\"\223\001\n\006Status\022\006\n\002OK\020\000\022\024\n\020INVALID_ARGUME" +
      "NT\020\001\022\r\n\tNOT_FOUND\020\002\022\025\n\021PERMISSION_DENIED" +
      "\020\003\022\023\n\017UNAUTHENTICATED\020\004\022\021\n\rUNIMPLEMENTED" +
      "\020\005\022\014\n\010INTERNAL\020\006\022\017\n\013UNAVAILABLE\020\007\"\214\002\n\017Ht" +
      "tpRouteAction\022\036\n\020backend_group_id\030\001 \001(\tB" +
      "\004\350\3071\001\022*\n\007timeout\030\002 \001(\0132\031.google.protobuf" +
      ".Duration\022/\n\014idle_timeout\030\003 \001(\0132\031.google" +
      ".protobuf.Duration\022\026\n\014host_rewrite\030\004 \001(\t" +
      "H\000\022\033\n\021auto_host_rewrite\030\005 \001(\010H\000\022\026\n\016prefi" +
      "x_rewrite\030\006 \001(\t\022\025\n\rupgrade_types\030\007 \003(\tB\030" +
      "\n\026host_rewrite_specifier\"\341\001\n\017GrpcRouteAc" +
      "tion\022\036\n\020backend_group_id\030\001 \001(\tB\004\350\3071\001\022.\n\013" +
      "max_timeout\030\002 \001(\0132\031.google.protobuf.Dura" +
      "tion\022/\n\014idle_timeout\030\003 \001(\0132\031.google.prot" +
      "obuf.Duration\022\026\n\014host_rewrite\030\004 \001(\tH\000\022\033\n" +
      "\021auto_host_rewrite\030\005 \001(\010H\000B\030\n\026host_rewri" +
      "te_specifierBz\n#yandex.cloud.api.appload" +
      "balancer.v1ZSgithub.com/yandex-cloud/go-" +
      "genproto/yandex/cloud/apploadbalancer/v1" +
      ";apploadbalancerb\006proto3"
    };
    descriptor = com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          com.google.protobuf.DurationProto.getDescriptor(),
          yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.getDescriptor(),
          yandex.cloud.api.Validation.getDescriptor(),
        });
    internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_VirtualHost_descriptor,
        new java.lang.String[] { "Name", "Authority", "Routes", "ModifyRequestHeaders", "ModifyResponseHeaders", "RouteOptions", });
    internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_RouteOptions_descriptor,
        new java.lang.String[] { "ModifyRequestHeaders", "ModifyResponseHeaders", "Rbac", });
    internal_static_yandex_cloud_apploadbalancer_v1_RBAC_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_yandex_cloud_apploadbalancer_v1_RBAC_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_RBAC_descriptor,
        new java.lang.String[] { "Action", "Principals", });
    internal_static_yandex_cloud_apploadbalancer_v1_Principals_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_yandex_cloud_apploadbalancer_v1_Principals_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_Principals_descriptor,
        new java.lang.String[] { "AndPrincipals", });
    internal_static_yandex_cloud_apploadbalancer_v1_Principal_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_yandex_cloud_apploadbalancer_v1_Principal_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_Principal_descriptor,
        new java.lang.String[] { "Header", "RemoteIp", "Any", "Identifier", });
    internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_descriptor =
      internal_static_yandex_cloud_apploadbalancer_v1_Principal_descriptor.getNestedTypes().get(0);
    internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_Principal_HeaderMatcher_descriptor,
        new java.lang.String[] { "Name", "Value", });
    internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_HeaderModification_descriptor,
        new java.lang.String[] { "Name", "Append", "Replace", "Remove", "Rename", "Operation", });
    internal_static_yandex_cloud_apploadbalancer_v1_Route_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_yandex_cloud_apploadbalancer_v1_Route_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_Route_descriptor,
        new java.lang.String[] { "Name", "Http", "Grpc", "RouteOptions", "Route", });
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_HttpRoute_descriptor,
        new java.lang.String[] { "Match", "Route", "Redirect", "DirectResponse", "Action", });
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_GrpcRoute_descriptor,
        new java.lang.String[] { "Match", "Route", "StatusResponse", "Action", });
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteMatch_descriptor,
        new java.lang.String[] { "HttpMethod", "Path", });
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteMatch_descriptor,
        new java.lang.String[] { "Fqmn", });
    internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_StringMatch_descriptor,
        new java.lang.String[] { "ExactMatch", "PrefixMatch", "RegexMatch", "Match", });
    internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_RedirectAction_descriptor,
        new java.lang.String[] { "ReplaceScheme", "ReplaceHost", "ReplacePort", "ReplacePath", "ReplacePrefix", "RemoveQuery", "ResponseCode", "Path", });
    internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_DirectResponseAction_descriptor,
        new java.lang.String[] { "Status", "Body", });
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_GrpcStatusResponseAction_descriptor,
        new java.lang.String[] { "Status", });
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_HttpRouteAction_descriptor,
        new java.lang.String[] { "BackendGroupId", "Timeout", "IdleTimeout", "HostRewrite", "AutoHostRewrite", "PrefixRewrite", "UpgradeTypes", "HostRewriteSpecifier", });
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_yandex_cloud_apploadbalancer_v1_GrpcRouteAction_descriptor,
        new java.lang.String[] { "BackendGroupId", "MaxTimeout", "IdleTimeout", "HostRewrite", "AutoHostRewrite", "HostRewriteSpecifier", });
    com.google.protobuf.ExtensionRegistry registry =
        com.google.protobuf.ExtensionRegistry.newInstance();
    registry.add(yandex.cloud.api.Validation.exactlyOne);
    registry.add(yandex.cloud.api.Validation.required);
    registry.add(yandex.cloud.api.Validation.size);
    registry.add(yandex.cloud.api.Validation.value);
    com.google.protobuf.Descriptors.FileDescriptor
        .internalUpdateFileDescriptor(descriptor, registry);
    com.google.protobuf.DurationProto.getDescriptor();
    yandex.cloud.api.apploadbalancer.v1.PayloadOuterClass.getDescriptor();
    yandex.cloud.api.Validation.getDescriptor();
  }
  // @@protoc_insertion_point(outer_class_scope)
}
                                                                                                                                                                  © 2015 - 2025 Weber Informatics LLC | Privacy Policy