// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: src/main/protobuf/crosstool_config.proto

package com.google.devtools.build.lib.view.config.crosstool;

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

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * Protobuf enum {@code com.google.devtools.build.lib.view.config.crosstool.CompilationMode}
   */
  public enum CompilationMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>FASTBUILD = 1;</code>
     */
    FASTBUILD(1),
    /**
     * <code>DBG = 2;</code>
     */
    DBG(2),
    /**
     * <code>OPT = 3;</code>
     */
    OPT(3),
    /**
     * <pre>
     * This value is ignored and should not be used in new files.
     * </pre>
     *
     * <code>COVERAGE = 4;</code>
     */
    COVERAGE(4),
    ;

    /**
     * <code>FASTBUILD = 1;</code>
     */
    public static final int FASTBUILD_VALUE = 1;
    /**
     * <code>DBG = 2;</code>
     */
    public static final int DBG_VALUE = 2;
    /**
     * <code>OPT = 3;</code>
     */
    public static final int OPT_VALUE = 3;
    /**
     * <pre>
     * This value is ignored and should not be used in new files.
     * </pre>
     *
     * <code>COVERAGE = 4;</code>
     */
    public static final int COVERAGE_VALUE = 4;


    public final int getNumber() {
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static CompilationMode valueOf(int value) {
      return forNumber(value);
    }

    public static CompilationMode forNumber(int value) {
      switch (value) {
        case 1: return FASTBUILD;
        case 2: return DBG;
        case 3: return OPT;
        case 4: return COVERAGE;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.getDescriptor().getEnumTypes().get(0);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:com.google.devtools.build.lib.view.config.crosstool.CompilationMode)
  }

  /**
   * Protobuf enum {@code com.google.devtools.build.lib.view.config.crosstool.LinkingMode}
   */
  public enum LinkingMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>FULLY_STATIC = 1;</code>
     */
    FULLY_STATIC(1),
    /**
     * <code>MOSTLY_STATIC = 2;</code>
     */
    MOSTLY_STATIC(2),
    /**
     * <code>DYNAMIC = 3;</code>
     */
    DYNAMIC(3),
    /**
     * <code>MOSTLY_STATIC_LIBRARIES = 4;</code>
     */
    MOSTLY_STATIC_LIBRARIES(4),
    ;

    /**
     * <code>FULLY_STATIC = 1;</code>
     */
    public static final int FULLY_STATIC_VALUE = 1;
    /**
     * <code>MOSTLY_STATIC = 2;</code>
     */
    public static final int MOSTLY_STATIC_VALUE = 2;
    /**
     * <code>DYNAMIC = 3;</code>
     */
    public static final int DYNAMIC_VALUE = 3;
    /**
     * <code>MOSTLY_STATIC_LIBRARIES = 4;</code>
     */
    public static final int MOSTLY_STATIC_LIBRARIES_VALUE = 4;


    public final int getNumber() {
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static LinkingMode valueOf(int value) {
      return forNumber(value);
    }

    public static LinkingMode forNumber(int value) {
      switch (value) {
        case 1: return FULLY_STATIC;
        case 2: return MOSTLY_STATIC;
        case 3: return DYNAMIC;
        case 4: return MOSTLY_STATIC_LIBRARIES;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.getDescriptor().getEnumTypes().get(1);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:com.google.devtools.build.lib.view.config.crosstool.LinkingMode)
  }

  /**
   * Protobuf enum {@code com.google.devtools.build.lib.view.config.crosstool.LipoMode}
   */
  public enum LipoMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <code>OFF = 1;</code>
     */
    OFF(1),
    /**
     * <pre>
     * LIBRARY = 3;  // RESERVED
     * </pre>
     *
     * <code>BINARY = 2;</code>
     */
    BINARY(2),
    ;

    /**
     * <code>OFF = 1;</code>
     */
    public static final int OFF_VALUE = 1;
    /**
     * <pre>
     * LIBRARY = 3;  // RESERVED
     * </pre>
     *
     * <code>BINARY = 2;</code>
     */
    public static final int BINARY_VALUE = 2;


    public final int getNumber() {
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static LipoMode valueOf(int value) {
      return forNumber(value);
    }

    public static LipoMode forNumber(int value) {
      switch (value) {
        case 1: return OFF;
        case 2: return BINARY;
        default: return null;
      }
    }

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

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.getDescriptor().getEnumTypes().get(2);
    }

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

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

    private final int value;

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

    // @@protoc_insertion_point(enum_scope:com.google.devtools.build.lib.view.config.crosstool.LipoMode)
  }

  public interface CToolchainOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature> 
        getFeatureList();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature getFeature(int index);
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    int getFeatureCount();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder> 
        getFeatureOrBuilderList();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder getFeatureOrBuilder(
        int index);

    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig> 
        getActionConfigList();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig getActionConfig(int index);
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    int getActionConfigCount();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder> 
        getActionConfigOrBuilderList();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder getActionConfigOrBuilder(
        int index);

    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern> 
        getArtifactNamePatternList();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern getArtifactNamePattern(int index);
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    int getArtifactNamePatternCount();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder> 
        getArtifactNamePatternOrBuilderList();
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder getArtifactNamePatternOrBuilder(
        int index);

    /**
     * <pre>
     * The unique identifier of the toolchain within the crosstool release. It
     * must be possible to use this as a directory name in a path.
     * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
     * </pre>
     *
     * <code>required string toolchain_identifier = 1;</code>
     */
    boolean hasToolchainIdentifier();
    /**
     * <pre>
     * The unique identifier of the toolchain within the crosstool release. It
     * must be possible to use this as a directory name in a path.
     * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
     * </pre>
     *
     * <code>required string toolchain_identifier = 1;</code>
     */
    java.lang.String getToolchainIdentifier();
    /**
     * <pre>
     * The unique identifier of the toolchain within the crosstool release. It
     * must be possible to use this as a directory name in a path.
     * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
     * </pre>
     *
     * <code>required string toolchain_identifier = 1;</code>
     */
    com.google.protobuf.ByteString
        getToolchainIdentifierBytes();

    /**
     * <pre>
     * A basic toolchain description.
     * </pre>
     *
     * <code>required string host_system_name = 2;</code>
     */
    boolean hasHostSystemName();
    /**
     * <pre>
     * A basic toolchain description.
     * </pre>
     *
     * <code>required string host_system_name = 2;</code>
     */
    java.lang.String getHostSystemName();
    /**
     * <pre>
     * A basic toolchain description.
     * </pre>
     *
     * <code>required string host_system_name = 2;</code>
     */
    com.google.protobuf.ByteString
        getHostSystemNameBytes();

    /**
     * <code>required string target_system_name = 3;</code>
     */
    boolean hasTargetSystemName();
    /**
     * <code>required string target_system_name = 3;</code>
     */
    java.lang.String getTargetSystemName();
    /**
     * <code>required string target_system_name = 3;</code>
     */
    com.google.protobuf.ByteString
        getTargetSystemNameBytes();

    /**
     * <code>required string target_cpu = 4;</code>
     */
    boolean hasTargetCpu();
    /**
     * <code>required string target_cpu = 4;</code>
     */
    java.lang.String getTargetCpu();
    /**
     * <code>required string target_cpu = 4;</code>
     */
    com.google.protobuf.ByteString
        getTargetCpuBytes();

    /**
     * <code>required string target_libc = 5;</code>
     */
    boolean hasTargetLibc();
    /**
     * <code>required string target_libc = 5;</code>
     */
    java.lang.String getTargetLibc();
    /**
     * <code>required string target_libc = 5;</code>
     */
    com.google.protobuf.ByteString
        getTargetLibcBytes();

    /**
     * <code>required string compiler = 6;</code>
     */
    boolean hasCompiler();
    /**
     * <code>required string compiler = 6;</code>
     */
    java.lang.String getCompiler();
    /**
     * <code>required string compiler = 6;</code>
     */
    com.google.protobuf.ByteString
        getCompilerBytes();

    /**
     * <code>required string abi_version = 7;</code>
     */
    boolean hasAbiVersion();
    /**
     * <code>required string abi_version = 7;</code>
     */
    java.lang.String getAbiVersion();
    /**
     * <code>required string abi_version = 7;</code>
     */
    com.google.protobuf.ByteString
        getAbiVersionBytes();

    /**
     * <code>required string abi_libc_version = 8;</code>
     */
    boolean hasAbiLibcVersion();
    /**
     * <code>required string abi_libc_version = 8;</code>
     */
    java.lang.String getAbiLibcVersion();
    /**
     * <code>required string abi_libc_version = 8;</code>
     */
    com.google.protobuf.ByteString
        getAbiLibcVersionBytes();

    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath> 
        getToolPathList();
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath getToolPath(int index);
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    int getToolPathCount();
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder> 
        getToolPathOrBuilderList();
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder getToolPathOrBuilder(
        int index);

    /**
     * <pre>
     * Feature flags.
     * TODO(bazel-team): Sink those into 'Feature' instances.
     * </pre>
     *
     * <code>optional bool supports_gold_linker = 10 [default = false];</code>
     */
    boolean hasSupportsGoldLinker();
    /**
     * <pre>
     * Feature flags.
     * TODO(bazel-team): Sink those into 'Feature' instances.
     * </pre>
     *
     * <code>optional bool supports_gold_linker = 10 [default = false];</code>
     */
    boolean getSupportsGoldLinker();

    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>optional bool supports_thin_archives = 11 [default = false];</code>
     */
    boolean hasSupportsThinArchives();
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>optional bool supports_thin_archives = 11 [default = false];</code>
     */
    boolean getSupportsThinArchives();

    /**
     * <code>optional bool supports_start_end_lib = 28 [default = false];</code>
     */
    boolean hasSupportsStartEndLib();
    /**
     * <code>optional bool supports_start_end_lib = 28 [default = false];</code>
     */
    boolean getSupportsStartEndLib();

    /**
     * <code>optional bool supports_interface_shared_objects = 32 [default = false];</code>
     */
    boolean hasSupportsInterfaceSharedObjects();
    /**
     * <code>optional bool supports_interface_shared_objects = 32 [default = false];</code>
     */
    boolean getSupportsInterfaceSharedObjects();

    /**
     * <code>optional bool supports_embedded_runtimes = 40 [default = false];</code>
     */
    boolean hasSupportsEmbeddedRuntimes();
    /**
     * <code>optional bool supports_embedded_runtimes = 40 [default = false];</code>
     */
    boolean getSupportsEmbeddedRuntimes();

    /**
     * <pre>
     * If specified, Blaze finds statically linked / dynamically linked runtime
     * libraries in the declared crosstool filegroup. Otherwise, Blaze
     * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
     * </pre>
     *
     * <code>optional string static_runtimes_filegroup = 45;</code>
     */
    boolean hasStaticRuntimesFilegroup();
    /**
     * <pre>
     * If specified, Blaze finds statically linked / dynamically linked runtime
     * libraries in the declared crosstool filegroup. Otherwise, Blaze
     * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
     * </pre>
     *
     * <code>optional string static_runtimes_filegroup = 45;</code>
     */
    java.lang.String getStaticRuntimesFilegroup();
    /**
     * <pre>
     * If specified, Blaze finds statically linked / dynamically linked runtime
     * libraries in the declared crosstool filegroup. Otherwise, Blaze
     * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
     * </pre>
     *
     * <code>optional string static_runtimes_filegroup = 45;</code>
     */
    com.google.protobuf.ByteString
        getStaticRuntimesFilegroupBytes();

    /**
     * <code>optional string dynamic_runtimes_filegroup = 46;</code>
     */
    boolean hasDynamicRuntimesFilegroup();
    /**
     * <code>optional string dynamic_runtimes_filegroup = 46;</code>
     */
    java.lang.String getDynamicRuntimesFilegroup();
    /**
     * <code>optional string dynamic_runtimes_filegroup = 46;</code>
     */
    com.google.protobuf.ByteString
        getDynamicRuntimesFilegroupBytes();

    /**
     * <code>optional bool supports_incremental_linker = 41 [default = false];</code>
     */
    boolean hasSupportsIncrementalLinker();
    /**
     * <code>optional bool supports_incremental_linker = 41 [default = false];</code>
     */
    boolean getSupportsIncrementalLinker();

    /**
     * <pre>
     * This should be true, if the toolchain supports the D flag to ar, which
     * makes it output normalized archives that don't contain timestamps.
     * </pre>
     *
     * <code>optional bool supports_normalizing_ar = 26 [default = false];</code>
     */
    boolean hasSupportsNormalizingAr();
    /**
     * <pre>
     * This should be true, if the toolchain supports the D flag to ar, which
     * makes it output normalized archives that don't contain timestamps.
     * </pre>
     *
     * <code>optional bool supports_normalizing_ar = 26 [default = false];</code>
     */
    boolean getSupportsNormalizingAr();

    /**
     * <code>optional bool supports_fission = 43 [default = false];</code>
     */
    boolean hasSupportsFission();
    /**
     * <code>optional bool supports_fission = 43 [default = false];</code>
     */
    boolean getSupportsFission();

    /**
     * <pre>
     * Can generate dsym debug symbol information.
     * </pre>
     *
     * <code>optional bool supports_dsym = 51 [default = false];</code>
     */
    boolean hasSupportsDsym();
    /**
     * <pre>
     * Can generate dsym debug symbol information.
     * </pre>
     *
     * <code>optional bool supports_dsym = 51 [default = false];</code>
     */
    boolean getSupportsDsym();

    /**
     * <code>optional bool needsPic = 12 [default = false];</code>
     */
    boolean hasNeedsPic();
    /**
     * <code>optional bool needsPic = 12 [default = false];</code>
     */
    boolean getNeedsPic();

    /**
     * <pre>
     * Compiler flags for C/C++/Asm compilation.
     * </pre>
     *
     * <code>repeated string compiler_flag = 13;</code>
     */
    java.util.List<java.lang.String>
        getCompilerFlagList();
    /**
     * <pre>
     * Compiler flags for C/C++/Asm compilation.
     * </pre>
     *
     * <code>repeated string compiler_flag = 13;</code>
     */
    int getCompilerFlagCount();
    /**
     * <pre>
     * Compiler flags for C/C++/Asm compilation.
     * </pre>
     *
     * <code>repeated string compiler_flag = 13;</code>
     */
    java.lang.String getCompilerFlag(int index);
    /**
     * <pre>
     * Compiler flags for C/C++/Asm compilation.
     * </pre>
     *
     * <code>repeated string compiler_flag = 13;</code>
     */
    com.google.protobuf.ByteString
        getCompilerFlagBytes(int index);

    /**
     * <pre>
     * Additional compiler flags for C++ compilation.
     * </pre>
     *
     * <code>repeated string cxx_flag = 14;</code>
     */
    java.util.List<java.lang.String>
        getCxxFlagList();
    /**
     * <pre>
     * Additional compiler flags for C++ compilation.
     * </pre>
     *
     * <code>repeated string cxx_flag = 14;</code>
     */
    int getCxxFlagCount();
    /**
     * <pre>
     * Additional compiler flags for C++ compilation.
     * </pre>
     *
     * <code>repeated string cxx_flag = 14;</code>
     */
    java.lang.String getCxxFlag(int index);
    /**
     * <pre>
     * Additional compiler flags for C++ compilation.
     * </pre>
     *
     * <code>repeated string cxx_flag = 14;</code>
     */
    com.google.protobuf.ByteString
        getCxxFlagBytes(int index);

    /**
     * <pre>
     * Additional unfiltered compiler flags for C/C++/Asm compilation.
     * These are not subject to nocopt filtering in cc_* rules.
     * Note: These flags are *not* applied to objc/objc++ compiles.
     * </pre>
     *
     * <code>repeated string unfiltered_cxx_flag = 25;</code>
     */
    java.util.List<java.lang.String>
        getUnfilteredCxxFlagList();
    /**
     * <pre>
     * Additional unfiltered compiler flags for C/C++/Asm compilation.
     * These are not subject to nocopt filtering in cc_* rules.
     * Note: These flags are *not* applied to objc/objc++ compiles.
     * </pre>
     *
     * <code>repeated string unfiltered_cxx_flag = 25;</code>
     */
    int getUnfilteredCxxFlagCount();
    /**
     * <pre>
     * Additional unfiltered compiler flags for C/C++/Asm compilation.
     * These are not subject to nocopt filtering in cc_* rules.
     * Note: These flags are *not* applied to objc/objc++ compiles.
     * </pre>
     *
     * <code>repeated string unfiltered_cxx_flag = 25;</code>
     */
    java.lang.String getUnfilteredCxxFlag(int index);
    /**
     * <pre>
     * Additional unfiltered compiler flags for C/C++/Asm compilation.
     * These are not subject to nocopt filtering in cc_* rules.
     * Note: These flags are *not* applied to objc/objc++ compiles.
     * </pre>
     *
     * <code>repeated string unfiltered_cxx_flag = 25;</code>
     */
    com.google.protobuf.ByteString
        getUnfilteredCxxFlagBytes(int index);

    /**
     * <pre>
     * Linker flags.
     * </pre>
     *
     * <code>repeated string linker_flag = 15;</code>
     */
    java.util.List<java.lang.String>
        getLinkerFlagList();
    /**
     * <pre>
     * Linker flags.
     * </pre>
     *
     * <code>repeated string linker_flag = 15;</code>
     */
    int getLinkerFlagCount();
    /**
     * <pre>
     * Linker flags.
     * </pre>
     *
     * <code>repeated string linker_flag = 15;</code>
     */
    java.lang.String getLinkerFlag(int index);
    /**
     * <pre>
     * Linker flags.
     * </pre>
     *
     * <code>repeated string linker_flag = 15;</code>
     */
    com.google.protobuf.ByteString
        getLinkerFlagBytes(int index);

    /**
     * <pre>
     * Additional linker flags when linking dynamic libraries.
     * </pre>
     *
     * <code>repeated string dynamic_library_linker_flag = 27;</code>
     */
    java.util.List<java.lang.String>
        getDynamicLibraryLinkerFlagList();
    /**
     * <pre>
     * Additional linker flags when linking dynamic libraries.
     * </pre>
     *
     * <code>repeated string dynamic_library_linker_flag = 27;</code>
     */
    int getDynamicLibraryLinkerFlagCount();
    /**
     * <pre>
     * Additional linker flags when linking dynamic libraries.
     * </pre>
     *
     * <code>repeated string dynamic_library_linker_flag = 27;</code>
     */
    java.lang.String getDynamicLibraryLinkerFlag(int index);
    /**
     * <pre>
     * Additional linker flags when linking dynamic libraries.
     * </pre>
     *
     * <code>repeated string dynamic_library_linker_flag = 27;</code>
     */
    com.google.protobuf.ByteString
        getDynamicLibraryLinkerFlagBytes(int index);

    /**
     * <pre>
     * Additional test-only linker flags.
     * </pre>
     *
     * <code>repeated string test_only_linker_flag = 49;</code>
     */
    java.util.List<java.lang.String>
        getTestOnlyLinkerFlagList();
    /**
     * <pre>
     * Additional test-only linker flags.
     * </pre>
     *
     * <code>repeated string test_only_linker_flag = 49;</code>
     */
    int getTestOnlyLinkerFlagCount();
    /**
     * <pre>
     * Additional test-only linker flags.
     * </pre>
     *
     * <code>repeated string test_only_linker_flag = 49;</code>
     */
    java.lang.String getTestOnlyLinkerFlag(int index);
    /**
     * <pre>
     * Additional test-only linker flags.
     * </pre>
     *
     * <code>repeated string test_only_linker_flag = 49;</code>
     */
    com.google.protobuf.ByteString
        getTestOnlyLinkerFlagBytes(int index);

    /**
     * <pre>
     * Objcopy flags for embedding files into binaries.
     * </pre>
     *
     * <code>repeated string objcopy_embed_flag = 16;</code>
     */
    java.util.List<java.lang.String>
        getObjcopyEmbedFlagList();
    /**
     * <pre>
     * Objcopy flags for embedding files into binaries.
     * </pre>
     *
     * <code>repeated string objcopy_embed_flag = 16;</code>
     */
    int getObjcopyEmbedFlagCount();
    /**
     * <pre>
     * Objcopy flags for embedding files into binaries.
     * </pre>
     *
     * <code>repeated string objcopy_embed_flag = 16;</code>
     */
    java.lang.String getObjcopyEmbedFlag(int index);
    /**
     * <pre>
     * Objcopy flags for embedding files into binaries.
     * </pre>
     *
     * <code>repeated string objcopy_embed_flag = 16;</code>
     */
    com.google.protobuf.ByteString
        getObjcopyEmbedFlagBytes(int index);

    /**
     * <pre>
     * Ld flags for embedding files into binaries. This is used by filewrapper
     * since it calls ld directly and needs to know what -m flag to pass.
     * </pre>
     *
     * <code>repeated string ld_embed_flag = 23;</code>
     */
    java.util.List<java.lang.String>
        getLdEmbedFlagList();
    /**
     * <pre>
     * Ld flags for embedding files into binaries. This is used by filewrapper
     * since it calls ld directly and needs to know what -m flag to pass.
     * </pre>
     *
     * <code>repeated string ld_embed_flag = 23;</code>
     */
    int getLdEmbedFlagCount();
    /**
     * <pre>
     * Ld flags for embedding files into binaries. This is used by filewrapper
     * since it calls ld directly and needs to know what -m flag to pass.
     * </pre>
     *
     * <code>repeated string ld_embed_flag = 23;</code>
     */
    java.lang.String getLdEmbedFlag(int index);
    /**
     * <pre>
     * Ld flags for embedding files into binaries. This is used by filewrapper
     * since it calls ld directly and needs to know what -m flag to pass.
     * </pre>
     *
     * <code>repeated string ld_embed_flag = 23;</code>
     */
    com.google.protobuf.ByteString
        getLdEmbedFlagBytes(int index);

    /**
     * <pre>
     * Ar flags for combining object files into archives. If this is not set, it
     * defaults to "rcsD".
     * TODO(b/37271982): Remove after blaze with ar action_config release
     * </pre>
     *
     * <code>repeated string ar_flag = 47;</code>
     */
    java.util.List<java.lang.String>
        getArFlagList();
    /**
     * <pre>
     * Ar flags for combining object files into archives. If this is not set, it
     * defaults to "rcsD".
     * TODO(b/37271982): Remove after blaze with ar action_config release
     * </pre>
     *
     * <code>repeated string ar_flag = 47;</code>
     */
    int getArFlagCount();
    /**
     * <pre>
     * Ar flags for combining object files into archives. If this is not set, it
     * defaults to "rcsD".
     * TODO(b/37271982): Remove after blaze with ar action_config release
     * </pre>
     *
     * <code>repeated string ar_flag = 47;</code>
     */
    java.lang.String getArFlag(int index);
    /**
     * <pre>
     * Ar flags for combining object files into archives. If this is not set, it
     * defaults to "rcsD".
     * TODO(b/37271982): Remove after blaze with ar action_config release
     * </pre>
     *
     * <code>repeated string ar_flag = 47;</code>
     */
    com.google.protobuf.ByteString
        getArFlagBytes(int index);

    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>repeated string ar_thin_archives_flag = 48;</code>
     */
    java.util.List<java.lang.String>
        getArThinArchivesFlagList();
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>repeated string ar_thin_archives_flag = 48;</code>
     */
    int getArThinArchivesFlagCount();
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>repeated string ar_thin_archives_flag = 48;</code>
     */
    java.lang.String getArThinArchivesFlag(int index);
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>repeated string ar_thin_archives_flag = 48;</code>
     */
    com.google.protobuf.ByteString
        getArThinArchivesFlagBytes(int index);

    /**
     * <pre>
     * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
     * </pre>
     *
     * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
     */
    java.util.List<java.lang.String>
        getGccPluginCompilerFlagList();
    /**
     * <pre>
     * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
     * </pre>
     *
     * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
     */
    int getGccPluginCompilerFlagCount();
    /**
     * <pre>
     * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
     * </pre>
     *
     * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
     */
    java.lang.String getGccPluginCompilerFlag(int index);
    /**
     * <pre>
     * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
     * </pre>
     *
     * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
     */
    com.google.protobuf.ByteString
        getGccPluginCompilerFlagBytes(int index);

    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags> 
        getCompilationModeFlagsList();
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags getCompilationModeFlags(int index);
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    int getCompilationModeFlagsCount();
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder> 
        getCompilationModeFlagsOrBuilderList();
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder getCompilationModeFlagsOrBuilder(
        int index);

    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags> 
        getLipoModeFlagsList();
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags getLipoModeFlags(int index);
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    int getLipoModeFlagsCount();
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder> 
        getLipoModeFlagsOrBuilderList();
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder getLipoModeFlagsOrBuilder(
        int index);

    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags> 
        getLinkingModeFlagsList();
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags getLinkingModeFlags(int index);
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    int getLinkingModeFlagsCount();
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder> 
        getLinkingModeFlagsOrBuilderList();
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder getLinkingModeFlagsOrBuilder(
        int index);

    /**
     * <pre>
     * Plugin header directories for gcc and mao plugins. If none are set, the
     * toolchain does not support plugins. Relative paths are resolved relative
     * to the configuration file directory.
     * </pre>
     *
     * <code>repeated string gcc_plugin_header_directory = 19;</code>
     */
    java.util.List<java.lang.String>
        getGccPluginHeaderDirectoryList();
    /**
     * <pre>
     * Plugin header directories for gcc and mao plugins. If none are set, the
     * toolchain does not support plugins. Relative paths are resolved relative
     * to the configuration file directory.
     * </pre>
     *
     * <code>repeated string gcc_plugin_header_directory = 19;</code>
     */
    int getGccPluginHeaderDirectoryCount();
    /**
     * <pre>
     * Plugin header directories for gcc and mao plugins. If none are set, the
     * toolchain does not support plugins. Relative paths are resolved relative
     * to the configuration file directory.
     * </pre>
     *
     * <code>repeated string gcc_plugin_header_directory = 19;</code>
     */
    java.lang.String getGccPluginHeaderDirectory(int index);
    /**
     * <pre>
     * Plugin header directories for gcc and mao plugins. If none are set, the
     * toolchain does not support plugins. Relative paths are resolved relative
     * to the configuration file directory.
     * </pre>
     *
     * <code>repeated string gcc_plugin_header_directory = 19;</code>
     */
    com.google.protobuf.ByteString
        getGccPluginHeaderDirectoryBytes(int index);

    /**
     * <code>repeated string mao_plugin_header_directory = 20;</code>
     */
    java.util.List<java.lang.String>
        getMaoPluginHeaderDirectoryList();
    /**
     * <code>repeated string mao_plugin_header_directory = 20;</code>
     */
    int getMaoPluginHeaderDirectoryCount();
    /**
     * <code>repeated string mao_plugin_header_directory = 20;</code>
     */
    java.lang.String getMaoPluginHeaderDirectory(int index);
    /**
     * <code>repeated string mao_plugin_header_directory = 20;</code>
     */
    com.google.protobuf.ByteString
        getMaoPluginHeaderDirectoryBytes(int index);

    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable> 
        getMakeVariableList();
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable getMakeVariable(int index);
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    int getMakeVariableCount();
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder> 
        getMakeVariableOrBuilderList();
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder getMakeVariableOrBuilder(
        int index);

    /**
     * <pre>
     * Built-in include directories for C++ compilation. These should be the exact
     * paths used by the compiler, and are generally relative to the exec root.
     * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
     * We currently use the C++ paths also for C compilation, which is safe as
     * long as there are no name clashes between C++ and C header files.
     * Relative paths are resolved relative to the configuration file directory.
     * If the compiler has --sysroot support, then these paths should use
     * %sysroot% rather than the include path, and specify the sysroot attribute
     * in order to give blaze the information necessary to make the correct
     * replacements.
     * </pre>
     *
     * <code>repeated string cxx_builtin_include_directory = 22;</code>
     */
    java.util.List<java.lang.String>
        getCxxBuiltinIncludeDirectoryList();
    /**
     * <pre>
     * Built-in include directories for C++ compilation. These should be the exact
     * paths used by the compiler, and are generally relative to the exec root.
     * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
     * We currently use the C++ paths also for C compilation, which is safe as
     * long as there are no name clashes between C++ and C header files.
     * Relative paths are resolved relative to the configuration file directory.
     * If the compiler has --sysroot support, then these paths should use
     * %sysroot% rather than the include path, and specify the sysroot attribute
     * in order to give blaze the information necessary to make the correct
     * replacements.
     * </pre>
     *
     * <code>repeated string cxx_builtin_include_directory = 22;</code>
     */
    int getCxxBuiltinIncludeDirectoryCount();
    /**
     * <pre>
     * Built-in include directories for C++ compilation. These should be the exact
     * paths used by the compiler, and are generally relative to the exec root.
     * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
     * We currently use the C++ paths also for C compilation, which is safe as
     * long as there are no name clashes between C++ and C header files.
     * Relative paths are resolved relative to the configuration file directory.
     * If the compiler has --sysroot support, then these paths should use
     * %sysroot% rather than the include path, and specify the sysroot attribute
     * in order to give blaze the information necessary to make the correct
     * replacements.
     * </pre>
     *
     * <code>repeated string cxx_builtin_include_directory = 22;</code>
     */
    java.lang.String getCxxBuiltinIncludeDirectory(int index);
    /**
     * <pre>
     * Built-in include directories for C++ compilation. These should be the exact
     * paths used by the compiler, and are generally relative to the exec root.
     * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
     * We currently use the C++ paths also for C compilation, which is safe as
     * long as there are no name clashes between C++ and C header files.
     * Relative paths are resolved relative to the configuration file directory.
     * If the compiler has --sysroot support, then these paths should use
     * %sysroot% rather than the include path, and specify the sysroot attribute
     * in order to give blaze the information necessary to make the correct
     * replacements.
     * </pre>
     *
     * <code>repeated string cxx_builtin_include_directory = 22;</code>
     */
    com.google.protobuf.ByteString
        getCxxBuiltinIncludeDirectoryBytes(int index);

    /**
     * <pre>
     * The built-in sysroot. If this attribute is not present, blaze does not
     * allow using a different sysroot, i.e. through the --grte_top option. Also
     * see the documentation above.
     * </pre>
     *
     * <code>optional string builtin_sysroot = 24;</code>
     */
    boolean hasBuiltinSysroot();
    /**
     * <pre>
     * The built-in sysroot. If this attribute is not present, blaze does not
     * allow using a different sysroot, i.e. through the --grte_top option. Also
     * see the documentation above.
     * </pre>
     *
     * <code>optional string builtin_sysroot = 24;</code>
     */
    java.lang.String getBuiltinSysroot();
    /**
     * <pre>
     * The built-in sysroot. If this attribute is not present, blaze does not
     * allow using a different sysroot, i.e. through the --grte_top option. Also
     * see the documentation above.
     * </pre>
     *
     * <code>optional string builtin_sysroot = 24;</code>
     */
    com.google.protobuf.ByteString
        getBuiltinSysrootBytes();

    /**
     * <pre>
     * The location and version of the default Python (in absence of
     * --python_top and --python_version, respectively. The default
     * --python_mode is always 'opt'.) For backward compatibility, if these
     * attributes are not set, Blaze will use the crosstool v11-13 default
     * values: "/usr/grte/v1" and "python2.4".
     * </pre>
     *
     * <code>optional string default_python_top = 29;</code>
     */
    boolean hasDefaultPythonTop();
    /**
     * <pre>
     * The location and version of the default Python (in absence of
     * --python_top and --python_version, respectively. The default
     * --python_mode is always 'opt'.) For backward compatibility, if these
     * attributes are not set, Blaze will use the crosstool v11-13 default
     * values: "/usr/grte/v1" and "python2.4".
     * </pre>
     *
     * <code>optional string default_python_top = 29;</code>
     */
    java.lang.String getDefaultPythonTop();
    /**
     * <pre>
     * The location and version of the default Python (in absence of
     * --python_top and --python_version, respectively. The default
     * --python_mode is always 'opt'.) For backward compatibility, if these
     * attributes are not set, Blaze will use the crosstool v11-13 default
     * values: "/usr/grte/v1" and "python2.4".
     * </pre>
     *
     * <code>optional string default_python_top = 29;</code>
     */
    com.google.protobuf.ByteString
        getDefaultPythonTopBytes();

    /**
     * <code>optional string default_python_version = 30;</code>
     */
    boolean hasDefaultPythonVersion();
    /**
     * <code>optional string default_python_version = 30;</code>
     */
    java.lang.String getDefaultPythonVersion();
    /**
     * <code>optional string default_python_version = 30;</code>
     */
    com.google.protobuf.ByteString
        getDefaultPythonVersionBytes();

    /**
     * <pre>
     * Whether to preload swigdeps.so files in py_binaries and PAR files.
     * This overrides the commandline flag.
     * </pre>
     *
     * <code>optional bool python_preload_swigdeps = 42;</code>
     */
    boolean hasPythonPreloadSwigdeps();
    /**
     * <pre>
     * Whether to preload swigdeps.so files in py_binaries and PAR files.
     * This overrides the commandline flag.
     * </pre>
     *
     * <code>optional bool python_preload_swigdeps = 42;</code>
     */
    boolean getPythonPreloadSwigdeps();

    /**
     * <pre>
     * The default GRTE to use. This should be a label, and gets the same
     * treatment from Blaze as the --grte_top option. This setting is only used in
     * the absence of an explicit --grte_top option. If unset, Blaze will not pass
     * -sysroot by default. The local part must be 'everything', i.e.,
     * '//some/label:everything'. There can only be one GRTE library per package,
     * because the compiler expects the directory as a parameter of the -sysroot
     * option.
     * This may only be set to a non-empty value if builtin_sysroot is also set!
     * </pre>
     *
     * <code>optional string default_grte_top = 31;</code>
     */
    boolean hasDefaultGrteTop();
    /**
     * <pre>
     * The default GRTE to use. This should be a label, and gets the same
     * treatment from Blaze as the --grte_top option. This setting is only used in
     * the absence of an explicit --grte_top option. If unset, Blaze will not pass
     * -sysroot by default. The local part must be 'everything', i.e.,
     * '//some/label:everything'. There can only be one GRTE library per package,
     * because the compiler expects the directory as a parameter of the -sysroot
     * option.
     * This may only be set to a non-empty value if builtin_sysroot is also set!
     * </pre>
     *
     * <code>optional string default_grte_top = 31;</code>
     */
    java.lang.String getDefaultGrteTop();
    /**
     * <pre>
     * The default GRTE to use. This should be a label, and gets the same
     * treatment from Blaze as the --grte_top option. This setting is only used in
     * the absence of an explicit --grte_top option. If unset, Blaze will not pass
     * -sysroot by default. The local part must be 'everything', i.e.,
     * '//some/label:everything'. There can only be one GRTE library per package,
     * because the compiler expects the directory as a parameter of the -sysroot
     * option.
     * This may only be set to a non-empty value if builtin_sysroot is also set!
     * </pre>
     *
     * <code>optional string default_grte_top = 31;</code>
     */
    com.google.protobuf.ByteString
        getDefaultGrteTopBytes();

    /**
     * <pre>
     * Additional dependencies for Blaze-built .deb packages. All Debian packages
     * that contain C++ binaries need to have the correct runtime
     * libraries installed, and those depend on the crosstool version, which is
     * why they are recorded here.
     * </pre>
     *
     * <code>repeated string debian_extra_requires = 33;</code>
     */
    java.util.List<java.lang.String>
        getDebianExtraRequiresList();
    /**
     * <pre>
     * Additional dependencies for Blaze-built .deb packages. All Debian packages
     * that contain C++ binaries need to have the correct runtime
     * libraries installed, and those depend on the crosstool version, which is
     * why they are recorded here.
     * </pre>
     *
     * <code>repeated string debian_extra_requires = 33;</code>
     */
    int getDebianExtraRequiresCount();
    /**
     * <pre>
     * Additional dependencies for Blaze-built .deb packages. All Debian packages
     * that contain C++ binaries need to have the correct runtime
     * libraries installed, and those depend on the crosstool version, which is
     * why they are recorded here.
     * </pre>
     *
     * <code>repeated string debian_extra_requires = 33;</code>
     */
    java.lang.String getDebianExtraRequires(int index);
    /**
     * <pre>
     * Additional dependencies for Blaze-built .deb packages. All Debian packages
     * that contain C++ binaries need to have the correct runtime
     * libraries installed, and those depend on the crosstool version, which is
     * why they are recorded here.
     * </pre>
     *
     * <code>repeated string debian_extra_requires = 33;</code>
     */
    com.google.protobuf.ByteString
        getDebianExtraRequiresBytes(int index);

    /**
     * <pre>
     * Unused, for compatibility with things internal to Google.
     * </pre>
     *
     * <code>optional string cc_target_os = 55;</code>
     */
    boolean hasCcTargetOs();
    /**
     * <pre>
     * Unused, for compatibility with things internal to Google.
     * </pre>
     *
     * <code>optional string cc_target_os = 55;</code>
     */
    java.lang.String getCcTargetOs();
    /**
     * <pre>
     * Unused, for compatibility with things internal to Google.
     * </pre>
     *
     * <code>optional string cc_target_os = 55;</code>
     */
    com.google.protobuf.ByteString
        getCcTargetOsBytes();
  }
  /**
   * <pre>
   * A description of a toolchain, which includes all the tools generally expected
   * to be available for building C/C++ targets, based on the GNU C compiler.
   * System and cpu names are two overlapping concepts, which need to be both
   * supported at this time. The cpu name is the blaze command-line name for the
   * target system. The most common values are 'k8' and 'piii'. The system name is
   * a more generic identification of the executable system, based on the names
   * used by the GNU C compiler.
   * Typically, the system name contains an identifier for the cpu (e.g. x86_64 or
   * alpha), an identifier for the machine (e.g. pc, or unknown), and an
   * identifier for the operating system (e.g. cygwin or linux-gnu). Typical
   * examples are 'x86_64-unknown-linux-gnu' and 'i686-unknown-cygwin'.
   * The system name is used to determine if a given machine can execute a given
   * exectuable. In particular, it is used to check if the compilation products of
   * a toolchain can run on the host machine.
   * </pre>
   *
   * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain}
   */
  public  static final class CToolchain extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain)
      CToolchainOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CToolchain.newBuilder() to construct.
    private CToolchain(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CToolchain() {
      feature_ = java.util.Collections.emptyList();
      actionConfig_ = java.util.Collections.emptyList();
      artifactNamePattern_ = java.util.Collections.emptyList();
      toolchainIdentifier_ = "";
      hostSystemName_ = "";
      targetSystemName_ = "";
      targetCpu_ = "";
      targetLibc_ = "";
      compiler_ = "";
      abiVersion_ = "";
      abiLibcVersion_ = "";
      toolPath_ = java.util.Collections.emptyList();
      supportsGoldLinker_ = false;
      supportsThinArchives_ = false;
      supportsStartEndLib_ = false;
      supportsInterfaceSharedObjects_ = false;
      supportsEmbeddedRuntimes_ = false;
      staticRuntimesFilegroup_ = "";
      dynamicRuntimesFilegroup_ = "";
      supportsIncrementalLinker_ = false;
      supportsNormalizingAr_ = false;
      supportsFission_ = false;
      supportsDsym_ = false;
      needsPic_ = false;
      compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      unfilteredCxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      dynamicLibraryLinkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      testOnlyLinkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      objcopyEmbedFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      ldEmbedFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      arFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      arThinArchivesFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      gccPluginCompilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      compilationModeFlags_ = java.util.Collections.emptyList();
      lipoModeFlags_ = java.util.Collections.emptyList();
      linkingModeFlags_ = java.util.Collections.emptyList();
      gccPluginHeaderDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      maoPluginHeaderDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      makeVariable_ = java.util.Collections.emptyList();
      cxxBuiltinIncludeDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      builtinSysroot_ = "";
      defaultPythonTop_ = "";
      defaultPythonVersion_ = "";
      pythonPreloadSwigdeps_ = false;
      defaultGrteTop_ = "";
      debianExtraRequires_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      ccTargetOs_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CToolchain(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      int mutable_bitField0_ = 0;
      int mutable_bitField1_ = 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;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              toolchainIdentifier_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              hostSystemName_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              targetSystemName_ = bs;
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000008;
              targetCpu_ = bs;
              break;
            }
            case 42: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              targetLibc_ = bs;
              break;
            }
            case 50: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              compiler_ = bs;
              break;
            }
            case 58: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000040;
              abiVersion_ = bs;
              break;
            }
            case 66: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000080;
              abiLibcVersion_ = bs;
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                toolPath_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath>();
                mutable_bitField0_ |= 0x00000800;
              }
              toolPath_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.PARSER, extensionRegistry));
              break;
            }
            case 80: {
              bitField0_ |= 0x00000100;
              supportsGoldLinker_ = input.readBool();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000200;
              supportsThinArchives_ = input.readBool();
              break;
            }
            case 96: {
              bitField0_ |= 0x00080000;
              needsPic_ = input.readBool();
              break;
            }
            case 106: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x01000000) == 0x01000000)) {
                compilerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x01000000;
              }
              compilerFlag_.add(bs);
              break;
            }
            case 114: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x02000000) == 0x02000000)) {
                cxxFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x02000000;
              }
              cxxFlag_.add(bs);
              break;
            }
            case 122: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x08000000) == 0x08000000)) {
                linkerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x08000000;
              }
              linkerFlag_.add(bs);
              break;
            }
            case 130: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x40000000) == 0x40000000)) {
                objcopyEmbedFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x40000000;
              }
              objcopyEmbedFlag_.add(bs);
              break;
            }
            case 138: {
              if (!((mutable_bitField1_ & 0x00000008) == 0x00000008)) {
                compilationModeFlags_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags>();
                mutable_bitField1_ |= 0x00000008;
              }
              compilationModeFlags_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.PARSER, extensionRegistry));
              break;
            }
            case 146: {
              if (!((mutable_bitField1_ & 0x00000020) == 0x00000020)) {
                linkingModeFlags_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags>();
                mutable_bitField1_ |= 0x00000020;
              }
              linkingModeFlags_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.PARSER, extensionRegistry));
              break;
            }
            case 154: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField1_ & 0x00000040) == 0x00000040)) {
                gccPluginHeaderDirectory_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField1_ |= 0x00000040;
              }
              gccPluginHeaderDirectory_.add(bs);
              break;
            }
            case 162: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField1_ & 0x00000080) == 0x00000080)) {
                maoPluginHeaderDirectory_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField1_ |= 0x00000080;
              }
              maoPluginHeaderDirectory_.add(bs);
              break;
            }
            case 170: {
              if (!((mutable_bitField1_ & 0x00000100) == 0x00000100)) {
                makeVariable_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable>();
                mutable_bitField1_ |= 0x00000100;
              }
              makeVariable_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.PARSER, extensionRegistry));
              break;
            }
            case 178: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField1_ & 0x00000200) == 0x00000200)) {
                cxxBuiltinIncludeDirectory_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField1_ |= 0x00000200;
              }
              cxxBuiltinIncludeDirectory_.add(bs);
              break;
            }
            case 186: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x80000000) == 0x80000000)) {
                ldEmbedFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x80000000;
              }
              ldEmbedFlag_.add(bs);
              break;
            }
            case 194: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00100000;
              builtinSysroot_ = bs;
              break;
            }
            case 202: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x04000000) == 0x04000000)) {
                unfilteredCxxFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x04000000;
              }
              unfilteredCxxFlag_.add(bs);
              break;
            }
            case 208: {
              bitField0_ |= 0x00010000;
              supportsNormalizingAr_ = input.readBool();
              break;
            }
            case 218: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x10000000) == 0x10000000)) {
                dynamicLibraryLinkerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x10000000;
              }
              dynamicLibraryLinkerFlag_.add(bs);
              break;
            }
            case 224: {
              bitField0_ |= 0x00000400;
              supportsStartEndLib_ = input.readBool();
              break;
            }
            case 234: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00200000;
              defaultPythonTop_ = bs;
              break;
            }
            case 242: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00400000;
              defaultPythonVersion_ = bs;
              break;
            }
            case 250: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x01000000;
              defaultGrteTop_ = bs;
              break;
            }
            case 256: {
              bitField0_ |= 0x00000800;
              supportsInterfaceSharedObjects_ = input.readBool();
              break;
            }
            case 266: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField1_ & 0x00008000) == 0x00008000)) {
                debianExtraRequires_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField1_ |= 0x00008000;
              }
              debianExtraRequires_.add(bs);
              break;
            }
            case 274: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField1_ & 0x00000004) == 0x00000004)) {
                gccPluginCompilerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField1_ |= 0x00000004;
              }
              gccPluginCompilerFlag_.add(bs);
              break;
            }
            case 320: {
              bitField0_ |= 0x00001000;
              supportsEmbeddedRuntimes_ = input.readBool();
              break;
            }
            case 328: {
              bitField0_ |= 0x00008000;
              supportsIncrementalLinker_ = input.readBool();
              break;
            }
            case 336: {
              bitField0_ |= 0x00800000;
              pythonPreloadSwigdeps_ = input.readBool();
              break;
            }
            case 344: {
              bitField0_ |= 0x00020000;
              supportsFission_ = input.readBool();
              break;
            }
            case 354: {
              if (!((mutable_bitField1_ & 0x00000010) == 0x00000010)) {
                lipoModeFlags_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags>();
                mutable_bitField1_ |= 0x00000010;
              }
              lipoModeFlags_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.PARSER, extensionRegistry));
              break;
            }
            case 362: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00002000;
              staticRuntimesFilegroup_ = bs;
              break;
            }
            case 370: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00004000;
              dynamicRuntimesFilegroup_ = bs;
              break;
            }
            case 378: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField1_ & 0x00000001) == 0x00000001)) {
                arFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField1_ |= 0x00000001;
              }
              arFlag_.add(bs);
              break;
            }
            case 386: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField1_ & 0x00000002) == 0x00000002)) {
                arThinArchivesFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField1_ |= 0x00000002;
              }
              arThinArchivesFlag_.add(bs);
              break;
            }
            case 394: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x20000000) == 0x20000000)) {
                testOnlyLinkerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x20000000;
              }
              testOnlyLinkerFlag_.add(bs);
              break;
            }
            case 402: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                feature_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature>();
                mutable_bitField0_ |= 0x00000001;
              }
              feature_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.PARSER, extensionRegistry));
              break;
            }
            case 408: {
              bitField0_ |= 0x00040000;
              supportsDsym_ = input.readBool();
              break;
            }
            case 426: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                actionConfig_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig>();
                mutable_bitField0_ |= 0x00000002;
              }
              actionConfig_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.PARSER, extensionRegistry));
              break;
            }
            case 434: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                artifactNamePattern_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern>();
                mutable_bitField0_ |= 0x00000004;
              }
              artifactNamePattern_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.PARSER, extensionRegistry));
              break;
            }
            case 442: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x02000000;
              ccTargetOs_ = bs;
              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_ & 0x00000800) == 0x00000800)) {
          toolPath_ = java.util.Collections.unmodifiableList(toolPath_);
        }
        if (((mutable_bitField0_ & 0x01000000) == 0x01000000)) {
          compilerFlag_ = compilerFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x02000000) == 0x02000000)) {
          cxxFlag_ = cxxFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x08000000) == 0x08000000)) {
          linkerFlag_ = linkerFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x40000000) == 0x40000000)) {
          objcopyEmbedFlag_ = objcopyEmbedFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField1_ & 0x00000008) == 0x00000008)) {
          compilationModeFlags_ = java.util.Collections.unmodifiableList(compilationModeFlags_);
        }
        if (((mutable_bitField1_ & 0x00000020) == 0x00000020)) {
          linkingModeFlags_ = java.util.Collections.unmodifiableList(linkingModeFlags_);
        }
        if (((mutable_bitField1_ & 0x00000040) == 0x00000040)) {
          gccPluginHeaderDirectory_ = gccPluginHeaderDirectory_.getUnmodifiableView();
        }
        if (((mutable_bitField1_ & 0x00000080) == 0x00000080)) {
          maoPluginHeaderDirectory_ = maoPluginHeaderDirectory_.getUnmodifiableView();
        }
        if (((mutable_bitField1_ & 0x00000100) == 0x00000100)) {
          makeVariable_ = java.util.Collections.unmodifiableList(makeVariable_);
        }
        if (((mutable_bitField1_ & 0x00000200) == 0x00000200)) {
          cxxBuiltinIncludeDirectory_ = cxxBuiltinIncludeDirectory_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x80000000) == 0x80000000)) {
          ldEmbedFlag_ = ldEmbedFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x04000000) == 0x04000000)) {
          unfilteredCxxFlag_ = unfilteredCxxFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x10000000) == 0x10000000)) {
          dynamicLibraryLinkerFlag_ = dynamicLibraryLinkerFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField1_ & 0x00008000) == 0x00008000)) {
          debianExtraRequires_ = debianExtraRequires_.getUnmodifiableView();
        }
        if (((mutable_bitField1_ & 0x00000004) == 0x00000004)) {
          gccPluginCompilerFlag_ = gccPluginCompilerFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField1_ & 0x00000010) == 0x00000010)) {
          lipoModeFlags_ = java.util.Collections.unmodifiableList(lipoModeFlags_);
        }
        if (((mutable_bitField1_ & 0x00000001) == 0x00000001)) {
          arFlag_ = arFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField1_ & 0x00000002) == 0x00000002)) {
          arThinArchivesFlag_ = arThinArchivesFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x20000000) == 0x20000000)) {
          testOnlyLinkerFlag_ = testOnlyLinkerFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          feature_ = java.util.Collections.unmodifiableList(feature_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          actionConfig_ = java.util.Collections.unmodifiableList(actionConfig_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          artifactNamePattern_ = java.util.Collections.unmodifiableList(artifactNamePattern_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder.class);
    }

    public interface FlagGroupOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>repeated string flag = 1;</code>
       */
      java.util.List<java.lang.String>
          getFlagList();
      /**
       * <code>repeated string flag = 1;</code>
       */
      int getFlagCount();
      /**
       * <code>repeated string flag = 1;</code>
       */
      java.lang.String getFlag(int index);
      /**
       * <code>repeated string flag = 1;</code>
       */
      com.google.protobuf.ByteString
          getFlagBytes(int index);

      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> 
          getFlagGroupList();
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getFlagGroup(int index);
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      int getFlagGroupCount();
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> 
          getFlagGroupOrBuilderList();
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder getFlagGroupOrBuilder(
          int index);

      /**
       * <code>optional string iterate_over = 3;</code>
       */
      boolean hasIterateOver();
      /**
       * <code>optional string iterate_over = 3;</code>
       */
      java.lang.String getIterateOver();
      /**
       * <code>optional string iterate_over = 3;</code>
       */
      com.google.protobuf.ByteString
          getIterateOverBytes();

      /**
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      java.util.List<java.lang.String>
          getExpandIfAllAvailableList();
      /**
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      int getExpandIfAllAvailableCount();
      /**
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      java.lang.String getExpandIfAllAvailable(int index);
      /**
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      com.google.protobuf.ByteString
          getExpandIfAllAvailableBytes(int index);

      /**
       * <code>repeated string expand_if_none_available = 5;</code>
       */
      java.util.List<java.lang.String>
          getExpandIfNoneAvailableList();
      /**
       * <code>repeated string expand_if_none_available = 5;</code>
       */
      int getExpandIfNoneAvailableCount();
      /**
       * <code>repeated string expand_if_none_available = 5;</code>
       */
      java.lang.String getExpandIfNoneAvailable(int index);
      /**
       * <code>repeated string expand_if_none_available = 5;</code>
       */
      com.google.protobuf.ByteString
          getExpandIfNoneAvailableBytes(int index);

      /**
       * <code>optional string expand_if_true = 6;</code>
       */
      boolean hasExpandIfTrue();
      /**
       * <code>optional string expand_if_true = 6;</code>
       */
      java.lang.String getExpandIfTrue();
      /**
       * <code>optional string expand_if_true = 6;</code>
       */
      com.google.protobuf.ByteString
          getExpandIfTrueBytes();

      /**
       * <code>optional string expand_if_false = 7;</code>
       */
      boolean hasExpandIfFalse();
      /**
       * <code>optional string expand_if_false = 7;</code>
       */
      java.lang.String getExpandIfFalse();
      /**
       * <code>optional string expand_if_false = 7;</code>
       */
      com.google.protobuf.ByteString
          getExpandIfFalseBytes();

      /**
       * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
       */
      boolean hasExpandIfEqual();
      /**
       * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue getExpandIfEqual();
      /**
       * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValueOrBuilder getExpandIfEqualOrBuilder();
    }
    /**
     * <pre>
     * A group of correlated flags. Supports parametrization via variable
     * expansion.
     * To expand a variable of list type, flag_group has to be annotated with
     * `iterate_over` message. Then all nested flags or flag_groups will be
     * expanded repeatedly for each element of the list.
     * For example:
     * flag_group {
     *   iterate_over: 'include_path'
     *   flag: '-I'
     *   flag: '%{include_path}'
     * }
     * ... will get expanded to -I /to/path1 -I /to/path2 ... for each
     * include_path /to/pathN.
     * To expand a variable of structure type, use dot-notation, e.g.:
     *    flag_group {
     *      iterate_over: "libraries_to_link"
     *      flag_group {
     *        iterate_over: "libraries_to_link.libraries"
     *        flag: "-L%{libraries_to_link.libraries.directory}"
     *      }
     *    }
     * Flag groups can be nested; if they are, the flag group must only contain
     * other flag groups (no flags) so the order is unambiguously specified.
     * In order to expand a variable of nested lists, 'iterate_over' can be used.
     * For example:
     * flag_group {
     *   iterate_over: 'object_files'
     *   flag_group { flag: '--start-lib' }
     *   flag_group {
     *     iterate_over: 'object_files'
     *     flag: '%{object_files}'
     *   }
     *   flag_group { flag: '--end-lib' }
     * }
     * ... will get expanded to
     *   --start-lib a1.o a2.o ... --end-lib --start-lib b1.o b2.o .. --end-lib
     *   with %{object_files} being a variable of nested list type
     *   [['a1.o', 'a2.o', ...], ['b1.o', 'b2.o', ...], ...].
     * TODO(bazel-team): Write more elaborate documentation and add a link to it.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup}
     */
    public  static final class FlagGroup extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup)
        FlagGroupOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use FlagGroup.newBuilder() to construct.
      private FlagGroup(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private FlagGroup() {
        flag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        flagGroup_ = java.util.Collections.emptyList();
        iterateOver_ = "";
        expandIfAllAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        expandIfNoneAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        expandIfTrue_ = "";
        expandIfFalse_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private FlagGroup(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  flag_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000001;
                }
                flag_.add(bs);
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  flagGroup_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup>();
                  mutable_bitField0_ |= 0x00000002;
                }
                flagGroup_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.PARSER, extensionRegistry));
                break;
              }
              case 26: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                iterateOver_ = bs;
                break;
              }
              case 34: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  expandIfAllAvailable_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000008;
                }
                expandIfAllAvailable_.add(bs);
                break;
              }
              case 42: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                  expandIfNoneAvailable_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000010;
                }
                expandIfNoneAvailable_.add(bs);
                break;
              }
              case 50: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000002;
                expandIfTrue_ = bs;
                break;
              }
              case 58: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000004;
                expandIfFalse_ = bs;
                break;
              }
              case 66: {
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.Builder subBuilder = null;
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                  subBuilder = expandIfEqual_.toBuilder();
                }
                expandIfEqual_ = input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(expandIfEqual_);
                  expandIfEqual_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000008;
                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) == 0x00000001)) {
            flag_ = flag_.getUnmodifiableView();
          }
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            flagGroup_ = java.util.Collections.unmodifiableList(flagGroup_);
          }
          if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
            expandIfAllAvailable_ = expandIfAllAvailable_.getUnmodifiableView();
          }
          if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
            expandIfNoneAvailable_ = expandIfNoneAvailable_.getUnmodifiableView();
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder.class);
      }

      private int bitField0_;
      public static final int FLAG_FIELD_NUMBER = 1;
      private com.google.protobuf.LazyStringList flag_;
      /**
       * <code>repeated string flag = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getFlagList() {
        return flag_;
      }
      /**
       * <code>repeated string flag = 1;</code>
       */
      public int getFlagCount() {
        return flag_.size();
      }
      /**
       * <code>repeated string flag = 1;</code>
       */
      public java.lang.String getFlag(int index) {
        return flag_.get(index);
      }
      /**
       * <code>repeated string flag = 1;</code>
       */
      public com.google.protobuf.ByteString
          getFlagBytes(int index) {
        return flag_.getByteString(index);
      }

      public static final int FLAG_GROUP_FIELD_NUMBER = 2;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> flagGroup_;
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> getFlagGroupList() {
        return flagGroup_;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> 
          getFlagGroupOrBuilderList() {
        return flagGroup_;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public int getFlagGroupCount() {
        return flagGroup_.size();
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getFlagGroup(int index) {
        return flagGroup_.get(index);
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder getFlagGroupOrBuilder(
          int index) {
        return flagGroup_.get(index);
      }

      public static final int ITERATE_OVER_FIELD_NUMBER = 3;
      private volatile java.lang.Object iterateOver_;
      /**
       * <code>optional string iterate_over = 3;</code>
       */
      public boolean hasIterateOver() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string iterate_over = 3;</code>
       */
      public java.lang.String getIterateOver() {
        java.lang.Object ref = iterateOver_;
        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 (bs.isValidUtf8()) {
            iterateOver_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string iterate_over = 3;</code>
       */
      public com.google.protobuf.ByteString
          getIterateOverBytes() {
        java.lang.Object ref = iterateOver_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          iterateOver_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int EXPAND_IF_ALL_AVAILABLE_FIELD_NUMBER = 4;
      private com.google.protobuf.LazyStringList expandIfAllAvailable_;
      /**
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getExpandIfAllAvailableList() {
        return expandIfAllAvailable_;
      }
      /**
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      public int getExpandIfAllAvailableCount() {
        return expandIfAllAvailable_.size();
      }
      /**
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      public java.lang.String getExpandIfAllAvailable(int index) {
        return expandIfAllAvailable_.get(index);
      }
      /**
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      public com.google.protobuf.ByteString
          getExpandIfAllAvailableBytes(int index) {
        return expandIfAllAvailable_.getByteString(index);
      }

      public static final int EXPAND_IF_NONE_AVAILABLE_FIELD_NUMBER = 5;
      private com.google.protobuf.LazyStringList expandIfNoneAvailable_;
      /**
       * <code>repeated string expand_if_none_available = 5;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getExpandIfNoneAvailableList() {
        return expandIfNoneAvailable_;
      }
      /**
       * <code>repeated string expand_if_none_available = 5;</code>
       */
      public int getExpandIfNoneAvailableCount() {
        return expandIfNoneAvailable_.size();
      }
      /**
       * <code>repeated string expand_if_none_available = 5;</code>
       */
      public java.lang.String getExpandIfNoneAvailable(int index) {
        return expandIfNoneAvailable_.get(index);
      }
      /**
       * <code>repeated string expand_if_none_available = 5;</code>
       */
      public com.google.protobuf.ByteString
          getExpandIfNoneAvailableBytes(int index) {
        return expandIfNoneAvailable_.getByteString(index);
      }

      public static final int EXPAND_IF_TRUE_FIELD_NUMBER = 6;
      private volatile java.lang.Object expandIfTrue_;
      /**
       * <code>optional string expand_if_true = 6;</code>
       */
      public boolean hasExpandIfTrue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string expand_if_true = 6;</code>
       */
      public java.lang.String getExpandIfTrue() {
        java.lang.Object ref = expandIfTrue_;
        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 (bs.isValidUtf8()) {
            expandIfTrue_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string expand_if_true = 6;</code>
       */
      public com.google.protobuf.ByteString
          getExpandIfTrueBytes() {
        java.lang.Object ref = expandIfTrue_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expandIfTrue_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int EXPAND_IF_FALSE_FIELD_NUMBER = 7;
      private volatile java.lang.Object expandIfFalse_;
      /**
       * <code>optional string expand_if_false = 7;</code>
       */
      public boolean hasExpandIfFalse() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string expand_if_false = 7;</code>
       */
      public java.lang.String getExpandIfFalse() {
        java.lang.Object ref = expandIfFalse_;
        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 (bs.isValidUtf8()) {
            expandIfFalse_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string expand_if_false = 7;</code>
       */
      public com.google.protobuf.ByteString
          getExpandIfFalseBytes() {
        java.lang.Object ref = expandIfFalse_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          expandIfFalse_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int EXPAND_IF_EQUAL_FIELD_NUMBER = 8;
      private com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue expandIfEqual_;
      /**
       * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
       */
      public boolean hasExpandIfEqual() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue getExpandIfEqual() {
        return expandIfEqual_ == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.getDefaultInstance() : expandIfEqual_;
      }
      /**
       * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValueOrBuilder getExpandIfEqualOrBuilder() {
        return expandIfEqual_ == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.getDefaultInstance() : expandIfEqual_;
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        for (int i = 0; i < getFlagGroupCount(); i++) {
          if (!getFlagGroup(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        if (hasExpandIfEqual()) {
          if (!getExpandIfEqual().isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        for (int i = 0; i < flag_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, flag_.getRaw(i));
        }
        for (int i = 0; i < flagGroup_.size(); i++) {
          output.writeMessage(2, flagGroup_.get(i));
        }
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, iterateOver_);
        }
        for (int i = 0; i < expandIfAllAvailable_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 4, expandIfAllAvailable_.getRaw(i));
        }
        for (int i = 0; i < expandIfNoneAvailable_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 5, expandIfNoneAvailable_.getRaw(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 6, expandIfTrue_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 7, expandIfFalse_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeMessage(8, getExpandIfEqual());
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        {
          int dataSize = 0;
          for (int i = 0; i < flag_.size(); i++) {
            dataSize += computeStringSizeNoTag(flag_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getFlagList().size();
        }
        for (int i = 0; i < flagGroup_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, flagGroup_.get(i));
        }
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, iterateOver_);
        }
        {
          int dataSize = 0;
          for (int i = 0; i < expandIfAllAvailable_.size(); i++) {
            dataSize += computeStringSizeNoTag(expandIfAllAvailable_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getExpandIfAllAvailableList().size();
        }
        {
          int dataSize = 0;
          for (int i = 0; i < expandIfNoneAvailable_.size(); i++) {
            dataSize += computeStringSizeNoTag(expandIfNoneAvailable_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getExpandIfNoneAvailableList().size();
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, expandIfTrue_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, expandIfFalse_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(8, getExpandIfEqual());
        }
        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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup) obj;

        boolean result = true;
        result = result && getFlagList()
            .equals(other.getFlagList());
        result = result && getFlagGroupList()
            .equals(other.getFlagGroupList());
        result = result && (hasIterateOver() == other.hasIterateOver());
        if (hasIterateOver()) {
          result = result && getIterateOver()
              .equals(other.getIterateOver());
        }
        result = result && getExpandIfAllAvailableList()
            .equals(other.getExpandIfAllAvailableList());
        result = result && getExpandIfNoneAvailableList()
            .equals(other.getExpandIfNoneAvailableList());
        result = result && (hasExpandIfTrue() == other.hasExpandIfTrue());
        if (hasExpandIfTrue()) {
          result = result && getExpandIfTrue()
              .equals(other.getExpandIfTrue());
        }
        result = result && (hasExpandIfFalse() == other.hasExpandIfFalse());
        if (hasExpandIfFalse()) {
          result = result && getExpandIfFalse()
              .equals(other.getExpandIfFalse());
        }
        result = result && (hasExpandIfEqual() == other.hasExpandIfEqual());
        if (hasExpandIfEqual()) {
          result = result && getExpandIfEqual()
              .equals(other.getExpandIfEqual());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getFlagCount() > 0) {
          hash = (37 * hash) + FLAG_FIELD_NUMBER;
          hash = (53 * hash) + getFlagList().hashCode();
        }
        if (getFlagGroupCount() > 0) {
          hash = (37 * hash) + FLAG_GROUP_FIELD_NUMBER;
          hash = (53 * hash) + getFlagGroupList().hashCode();
        }
        if (hasIterateOver()) {
          hash = (37 * hash) + ITERATE_OVER_FIELD_NUMBER;
          hash = (53 * hash) + getIterateOver().hashCode();
        }
        if (getExpandIfAllAvailableCount() > 0) {
          hash = (37 * hash) + EXPAND_IF_ALL_AVAILABLE_FIELD_NUMBER;
          hash = (53 * hash) + getExpandIfAllAvailableList().hashCode();
        }
        if (getExpandIfNoneAvailableCount() > 0) {
          hash = (37 * hash) + EXPAND_IF_NONE_AVAILABLE_FIELD_NUMBER;
          hash = (53 * hash) + getExpandIfNoneAvailableList().hashCode();
        }
        if (hasExpandIfTrue()) {
          hash = (37 * hash) + EXPAND_IF_TRUE_FIELD_NUMBER;
          hash = (53 * hash) + getExpandIfTrue().hashCode();
        }
        if (hasExpandIfFalse()) {
          hash = (37 * hash) + EXPAND_IF_FALSE_FIELD_NUMBER;
          hash = (53 * hash) + getExpandIfFalse().hashCode();
        }
        if (hasExpandIfEqual()) {
          hash = (37 * hash) + EXPAND_IF_EQUAL_FIELD_NUMBER;
          hash = (53 * hash) + getExpandIfEqual().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * A group of correlated flags. Supports parametrization via variable
       * expansion.
       * To expand a variable of list type, flag_group has to be annotated with
       * `iterate_over` message. Then all nested flags or flag_groups will be
       * expanded repeatedly for each element of the list.
       * For example:
       * flag_group {
       *   iterate_over: 'include_path'
       *   flag: '-I'
       *   flag: '%{include_path}'
       * }
       * ... will get expanded to -I /to/path1 -I /to/path2 ... for each
       * include_path /to/pathN.
       * To expand a variable of structure type, use dot-notation, e.g.:
       *    flag_group {
       *      iterate_over: "libraries_to_link"
       *      flag_group {
       *        iterate_over: "libraries_to_link.libraries"
       *        flag: "-L%{libraries_to_link.libraries.directory}"
       *      }
       *    }
       * Flag groups can be nested; if they are, the flag group must only contain
       * other flag groups (no flags) so the order is unambiguously specified.
       * In order to expand a variable of nested lists, 'iterate_over' can be used.
       * For example:
       * flag_group {
       *   iterate_over: 'object_files'
       *   flag_group { flag: '--start-lib' }
       *   flag_group {
       *     iterate_over: 'object_files'
       *     flag: '%{object_files}'
       *   }
       *   flag_group { flag: '--end-lib' }
       * }
       * ... will get expanded to
       *   --start-lib a1.o a2.o ... --end-lib --start-lib b1.o b2.o .. --end-lib
       *   with %{object_files} being a variable of nested list type
       *   [['a1.o', 'a2.o', ...], ['b1.o', 'b2.o', ...], ...].
       * TODO(bazel-team): Write more elaborate documentation and add a link to it.
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getFlagGroupFieldBuilder();
            getExpandIfEqualFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          flag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          if (flagGroupBuilder_ == null) {
            flagGroup_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            flagGroupBuilder_.clear();
          }
          iterateOver_ = "";
          bitField0_ = (bitField0_ & ~0x00000004);
          expandIfAllAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000008);
          expandIfNoneAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000010);
          expandIfTrue_ = "";
          bitField0_ = (bitField0_ & ~0x00000020);
          expandIfFalse_ = "";
          bitField0_ = (bitField0_ & ~0x00000040);
          if (expandIfEqualBuilder_ == null) {
            expandIfEqual_ = null;
          } else {
            expandIfEqualBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000080);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            flag_ = flag_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.flag_ = flag_;
          if (flagGroupBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              flagGroup_ = java.util.Collections.unmodifiableList(flagGroup_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.flagGroup_ = flagGroup_;
          } else {
            result.flagGroup_ = flagGroupBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000001;
          }
          result.iterateOver_ = iterateOver_;
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            expandIfAllAvailable_ = expandIfAllAvailable_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.expandIfAllAvailable_ = expandIfAllAvailable_;
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            expandIfNoneAvailable_ = expandIfNoneAvailable_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.expandIfNoneAvailable_ = expandIfNoneAvailable_;
          if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
            to_bitField0_ |= 0x00000002;
          }
          result.expandIfTrue_ = expandIfTrue_;
          if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
            to_bitField0_ |= 0x00000004;
          }
          result.expandIfFalse_ = expandIfFalse_;
          if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
            to_bitField0_ |= 0x00000008;
          }
          if (expandIfEqualBuilder_ == null) {
            result.expandIfEqual_ = expandIfEqual_;
          } else {
            result.expandIfEqual_ = expandIfEqualBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.getDefaultInstance()) return this;
          if (!other.flag_.isEmpty()) {
            if (flag_.isEmpty()) {
              flag_ = other.flag_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureFlagIsMutable();
              flag_.addAll(other.flag_);
            }
            onChanged();
          }
          if (flagGroupBuilder_ == null) {
            if (!other.flagGroup_.isEmpty()) {
              if (flagGroup_.isEmpty()) {
                flagGroup_ = other.flagGroup_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureFlagGroupIsMutable();
                flagGroup_.addAll(other.flagGroup_);
              }
              onChanged();
            }
          } else {
            if (!other.flagGroup_.isEmpty()) {
              if (flagGroupBuilder_.isEmpty()) {
                flagGroupBuilder_.dispose();
                flagGroupBuilder_ = null;
                flagGroup_ = other.flagGroup_;
                bitField0_ = (bitField0_ & ~0x00000002);
                flagGroupBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getFlagGroupFieldBuilder() : null;
              } else {
                flagGroupBuilder_.addAllMessages(other.flagGroup_);
              }
            }
          }
          if (other.hasIterateOver()) {
            bitField0_ |= 0x00000004;
            iterateOver_ = other.iterateOver_;
            onChanged();
          }
          if (!other.expandIfAllAvailable_.isEmpty()) {
            if (expandIfAllAvailable_.isEmpty()) {
              expandIfAllAvailable_ = other.expandIfAllAvailable_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureExpandIfAllAvailableIsMutable();
              expandIfAllAvailable_.addAll(other.expandIfAllAvailable_);
            }
            onChanged();
          }
          if (!other.expandIfNoneAvailable_.isEmpty()) {
            if (expandIfNoneAvailable_.isEmpty()) {
              expandIfNoneAvailable_ = other.expandIfNoneAvailable_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureExpandIfNoneAvailableIsMutable();
              expandIfNoneAvailable_.addAll(other.expandIfNoneAvailable_);
            }
            onChanged();
          }
          if (other.hasExpandIfTrue()) {
            bitField0_ |= 0x00000020;
            expandIfTrue_ = other.expandIfTrue_;
            onChanged();
          }
          if (other.hasExpandIfFalse()) {
            bitField0_ |= 0x00000040;
            expandIfFalse_ = other.expandIfFalse_;
            onChanged();
          }
          if (other.hasExpandIfEqual()) {
            mergeExpandIfEqual(other.getExpandIfEqual());
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          for (int i = 0; i < getFlagGroupCount(); i++) {
            if (!getFlagGroup(i).isInitialized()) {
              return false;
            }
          }
          if (hasExpandIfEqual()) {
            if (!getExpandIfEqual().isInitialized()) {
              return false;
            }
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private com.google.protobuf.LazyStringList flag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureFlagIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            flag_ = new com.google.protobuf.LazyStringArrayList(flag_);
            bitField0_ |= 0x00000001;
           }
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getFlagList() {
          return flag_.getUnmodifiableView();
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public int getFlagCount() {
          return flag_.size();
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public java.lang.String getFlag(int index) {
          return flag_.get(index);
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public com.google.protobuf.ByteString
            getFlagBytes(int index) {
          return flag_.getByteString(index);
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public Builder setFlag(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFlagIsMutable();
          flag_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public Builder addFlag(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFlagIsMutable();
          flag_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public Builder addAllFlag(
            java.lang.Iterable<java.lang.String> values) {
          ensureFlagIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, flag_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public Builder clearFlag() {
          flag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string flag = 1;</code>
         */
        public Builder addFlagBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFlagIsMutable();
          flag_.add(value);
          onChanged();
          return this;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> flagGroup_ =
          java.util.Collections.emptyList();
        private void ensureFlagGroupIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            flagGroup_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup>(flagGroup_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> flagGroupBuilder_;

        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> getFlagGroupList() {
          if (flagGroupBuilder_ == null) {
            return java.util.Collections.unmodifiableList(flagGroup_);
          } else {
            return flagGroupBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public int getFlagGroupCount() {
          if (flagGroupBuilder_ == null) {
            return flagGroup_.size();
          } else {
            return flagGroupBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getFlagGroup(int index) {
          if (flagGroupBuilder_ == null) {
            return flagGroup_.get(index);
          } else {
            return flagGroupBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder setFlagGroup(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup value) {
          if (flagGroupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagGroupIsMutable();
            flagGroup_.set(index, value);
            onChanged();
          } else {
            flagGroupBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder setFlagGroup(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder builderForValue) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            flagGroup_.set(index, builderForValue.build());
            onChanged();
          } else {
            flagGroupBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addFlagGroup(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup value) {
          if (flagGroupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagGroupIsMutable();
            flagGroup_.add(value);
            onChanged();
          } else {
            flagGroupBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addFlagGroup(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup value) {
          if (flagGroupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagGroupIsMutable();
            flagGroup_.add(index, value);
            onChanged();
          } else {
            flagGroupBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addFlagGroup(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder builderForValue) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            flagGroup_.add(builderForValue.build());
            onChanged();
          } else {
            flagGroupBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addFlagGroup(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder builderForValue) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            flagGroup_.add(index, builderForValue.build());
            onChanged();
          } else {
            flagGroupBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addAllFlagGroup(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> values) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, flagGroup_);
            onChanged();
          } else {
            flagGroupBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder clearFlagGroup() {
          if (flagGroupBuilder_ == null) {
            flagGroup_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            flagGroupBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder removeFlagGroup(int index) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            flagGroup_.remove(index);
            onChanged();
          } else {
            flagGroupBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder getFlagGroupBuilder(
            int index) {
          return getFlagGroupFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder getFlagGroupOrBuilder(
            int index) {
          if (flagGroupBuilder_ == null) {
            return flagGroup_.get(index);  } else {
            return flagGroupBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> 
             getFlagGroupOrBuilderList() {
          if (flagGroupBuilder_ != null) {
            return flagGroupBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(flagGroup_);
          }
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder addFlagGroupBuilder() {
          return getFlagGroupFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.getDefaultInstance());
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder addFlagGroupBuilder(
            int index) {
          return getFlagGroupFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.getDefaultInstance());
        }
        /**
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder> 
             getFlagGroupBuilderList() {
          return getFlagGroupFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> 
            getFlagGroupFieldBuilder() {
          if (flagGroupBuilder_ == null) {
            flagGroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder>(
                    flagGroup_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            flagGroup_ = null;
          }
          return flagGroupBuilder_;
        }

        private java.lang.Object iterateOver_ = "";
        /**
         * <code>optional string iterate_over = 3;</code>
         */
        public boolean hasIterateOver() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string iterate_over = 3;</code>
         */
        public java.lang.String getIterateOver() {
          java.lang.Object ref = iterateOver_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              iterateOver_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string iterate_over = 3;</code>
         */
        public com.google.protobuf.ByteString
            getIterateOverBytes() {
          java.lang.Object ref = iterateOver_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            iterateOver_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string iterate_over = 3;</code>
         */
        public Builder setIterateOver(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          iterateOver_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string iterate_over = 3;</code>
         */
        public Builder clearIterateOver() {
          bitField0_ = (bitField0_ & ~0x00000004);
          iterateOver_ = getDefaultInstance().getIterateOver();
          onChanged();
          return this;
        }
        /**
         * <code>optional string iterate_over = 3;</code>
         */
        public Builder setIterateOverBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
          iterateOver_ = value;
          onChanged();
          return this;
        }

        private com.google.protobuf.LazyStringList expandIfAllAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureExpandIfAllAvailableIsMutable() {
          if (!((bitField0_ & 0x00000008) == 0x00000008)) {
            expandIfAllAvailable_ = new com.google.protobuf.LazyStringArrayList(expandIfAllAvailable_);
            bitField0_ |= 0x00000008;
           }
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getExpandIfAllAvailableList() {
          return expandIfAllAvailable_.getUnmodifiableView();
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public int getExpandIfAllAvailableCount() {
          return expandIfAllAvailable_.size();
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public java.lang.String getExpandIfAllAvailable(int index) {
          return expandIfAllAvailable_.get(index);
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public com.google.protobuf.ByteString
            getExpandIfAllAvailableBytes(int index) {
          return expandIfAllAvailable_.getByteString(index);
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder setExpandIfAllAvailable(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfAllAvailableIsMutable();
          expandIfAllAvailable_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder addExpandIfAllAvailable(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfAllAvailableIsMutable();
          expandIfAllAvailable_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder addAllExpandIfAllAvailable(
            java.lang.Iterable<java.lang.String> values) {
          ensureExpandIfAllAvailableIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, expandIfAllAvailable_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder clearExpandIfAllAvailable() {
          expandIfAllAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder addExpandIfAllAvailableBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfAllAvailableIsMutable();
          expandIfAllAvailable_.add(value);
          onChanged();
          return this;
        }

        private com.google.protobuf.LazyStringList expandIfNoneAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureExpandIfNoneAvailableIsMutable() {
          if (!((bitField0_ & 0x00000010) == 0x00000010)) {
            expandIfNoneAvailable_ = new com.google.protobuf.LazyStringArrayList(expandIfNoneAvailable_);
            bitField0_ |= 0x00000010;
           }
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getExpandIfNoneAvailableList() {
          return expandIfNoneAvailable_.getUnmodifiableView();
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public int getExpandIfNoneAvailableCount() {
          return expandIfNoneAvailable_.size();
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public java.lang.String getExpandIfNoneAvailable(int index) {
          return expandIfNoneAvailable_.get(index);
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public com.google.protobuf.ByteString
            getExpandIfNoneAvailableBytes(int index) {
          return expandIfNoneAvailable_.getByteString(index);
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public Builder setExpandIfNoneAvailable(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfNoneAvailableIsMutable();
          expandIfNoneAvailable_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public Builder addExpandIfNoneAvailable(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfNoneAvailableIsMutable();
          expandIfNoneAvailable_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public Builder addAllExpandIfNoneAvailable(
            java.lang.Iterable<java.lang.String> values) {
          ensureExpandIfNoneAvailableIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, expandIfNoneAvailable_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public Builder clearExpandIfNoneAvailable() {
          expandIfNoneAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string expand_if_none_available = 5;</code>
         */
        public Builder addExpandIfNoneAvailableBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfNoneAvailableIsMutable();
          expandIfNoneAvailable_.add(value);
          onChanged();
          return this;
        }

        private java.lang.Object expandIfTrue_ = "";
        /**
         * <code>optional string expand_if_true = 6;</code>
         */
        public boolean hasExpandIfTrue() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional string expand_if_true = 6;</code>
         */
        public java.lang.String getExpandIfTrue() {
          java.lang.Object ref = expandIfTrue_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              expandIfTrue_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string expand_if_true = 6;</code>
         */
        public com.google.protobuf.ByteString
            getExpandIfTrueBytes() {
          java.lang.Object ref = expandIfTrue_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            expandIfTrue_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string expand_if_true = 6;</code>
         */
        public Builder setExpandIfTrue(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
          expandIfTrue_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string expand_if_true = 6;</code>
         */
        public Builder clearExpandIfTrue() {
          bitField0_ = (bitField0_ & ~0x00000020);
          expandIfTrue_ = getDefaultInstance().getExpandIfTrue();
          onChanged();
          return this;
        }
        /**
         * <code>optional string expand_if_true = 6;</code>
         */
        public Builder setExpandIfTrueBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
          expandIfTrue_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object expandIfFalse_ = "";
        /**
         * <code>optional string expand_if_false = 7;</code>
         */
        public boolean hasExpandIfFalse() {
          return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional string expand_if_false = 7;</code>
         */
        public java.lang.String getExpandIfFalse() {
          java.lang.Object ref = expandIfFalse_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              expandIfFalse_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string expand_if_false = 7;</code>
         */
        public com.google.protobuf.ByteString
            getExpandIfFalseBytes() {
          java.lang.Object ref = expandIfFalse_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            expandIfFalse_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string expand_if_false = 7;</code>
         */
        public Builder setExpandIfFalse(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
          expandIfFalse_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string expand_if_false = 7;</code>
         */
        public Builder clearExpandIfFalse() {
          bitField0_ = (bitField0_ & ~0x00000040);
          expandIfFalse_ = getDefaultInstance().getExpandIfFalse();
          onChanged();
          return this;
        }
        /**
         * <code>optional string expand_if_false = 7;</code>
         */
        public Builder setExpandIfFalseBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
          expandIfFalse_ = value;
          onChanged();
          return this;
        }

        private com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue expandIfEqual_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValueOrBuilder> expandIfEqualBuilder_;
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        public boolean hasExpandIfEqual() {
          return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue getExpandIfEqual() {
          if (expandIfEqualBuilder_ == null) {
            return expandIfEqual_ == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.getDefaultInstance() : expandIfEqual_;
          } else {
            return expandIfEqualBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        public Builder setExpandIfEqual(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue value) {
          if (expandIfEqualBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            expandIfEqual_ = value;
            onChanged();
          } else {
            expandIfEqualBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000080;
          return this;
        }
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        public Builder setExpandIfEqual(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.Builder builderForValue) {
          if (expandIfEqualBuilder_ == null) {
            expandIfEqual_ = builderForValue.build();
            onChanged();
          } else {
            expandIfEqualBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000080;
          return this;
        }
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        public Builder mergeExpandIfEqual(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue value) {
          if (expandIfEqualBuilder_ == null) {
            if (((bitField0_ & 0x00000080) == 0x00000080) &&
                expandIfEqual_ != null &&
                expandIfEqual_ != com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.getDefaultInstance()) {
              expandIfEqual_ =
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.newBuilder(expandIfEqual_).mergeFrom(value).buildPartial();
            } else {
              expandIfEqual_ = value;
            }
            onChanged();
          } else {
            expandIfEqualBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000080;
          return this;
        }
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        public Builder clearExpandIfEqual() {
          if (expandIfEqualBuilder_ == null) {
            expandIfEqual_ = null;
            onChanged();
          } else {
            expandIfEqualBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000080);
          return this;
        }
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.Builder getExpandIfEqualBuilder() {
          bitField0_ |= 0x00000080;
          onChanged();
          return getExpandIfEqualFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValueOrBuilder getExpandIfEqualOrBuilder() {
          if (expandIfEqualBuilder_ != null) {
            return expandIfEqualBuilder_.getMessageOrBuilder();
          } else {
            return expandIfEqual_ == null ?
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.getDefaultInstance() : expandIfEqual_;
          }
        }
        /**
         * <code>optional .com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue expand_if_equal = 8;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValueOrBuilder> 
            getExpandIfEqualFieldBuilder() {
          if (expandIfEqualBuilder_ == null) {
            expandIfEqualBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValueOrBuilder>(
                    getExpandIfEqual(),
                    getParentForChildren(),
                    isClean());
            expandIfEqual_ = null;
          }
          return expandIfEqualBuilder_;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface VariableWithValueOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>required string variable = 1;</code>
       */
      boolean hasVariable();
      /**
       * <code>required string variable = 1;</code>
       */
      java.lang.String getVariable();
      /**
       * <code>required string variable = 1;</code>
       */
      com.google.protobuf.ByteString
          getVariableBytes();

      /**
       * <code>required string value = 2;</code>
       */
      boolean hasValue();
      /**
       * <code>required string value = 2;</code>
       */
      java.lang.String getValue();
      /**
       * <code>required string value = 2;</code>
       */
      com.google.protobuf.ByteString
          getValueBytes();
    }
    /**
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue}
     */
    public  static final class VariableWithValue extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue)
        VariableWithValueOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use VariableWithValue.newBuilder() to construct.
      private VariableWithValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private VariableWithValue() {
        variable_ = "";
        value_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private VariableWithValue(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                variable_ = bs;
                break;
              }
              case 18: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000002;
                value_ = bs;
                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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.Builder.class);
      }

      private int bitField0_;
      public static final int VARIABLE_FIELD_NUMBER = 1;
      private volatile java.lang.Object variable_;
      /**
       * <code>required string variable = 1;</code>
       */
      public boolean hasVariable() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string variable = 1;</code>
       */
      public java.lang.String getVariable() {
        java.lang.Object ref = variable_;
        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 (bs.isValidUtf8()) {
            variable_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string variable = 1;</code>
       */
      public com.google.protobuf.ByteString
          getVariableBytes() {
        java.lang.Object ref = variable_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          variable_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int VALUE_FIELD_NUMBER = 2;
      private volatile java.lang.Object value_;
      /**
       * <code>required string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            value_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        if (!hasVariable()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasValue()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, variable_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, variable_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue) obj;

        boolean result = true;
        result = result && (hasVariable() == other.hasVariable());
        if (hasVariable()) {
          result = result && getVariable()
              .equals(other.getVariable());
        }
        result = result && (hasValue() == other.hasValue());
        if (hasValue()) {
          result = result && getValue()
              .equals(other.getValue());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasVariable()) {
          hash = (37 * hash) + VARIABLE_FIELD_NUMBER;
          hash = (53 * hash) + getVariable().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      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 com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValueOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        public Builder clear() {
          super.clear();
          variable_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          value_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.variable_ = variable_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.value_ = value_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue.getDefaultInstance()) return this;
          if (other.hasVariable()) {
            bitField0_ |= 0x00000001;
            variable_ = other.variable_;
            onChanged();
          }
          if (other.hasValue()) {
            bitField0_ |= 0x00000002;
            value_ = other.value_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          if (!hasVariable()) {
            return false;
          }
          if (!hasValue()) {
            return false;
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.lang.Object variable_ = "";
        /**
         * <code>required string variable = 1;</code>
         */
        public boolean hasVariable() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>required string variable = 1;</code>
         */
        public java.lang.String getVariable() {
          java.lang.Object ref = variable_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              variable_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>required string variable = 1;</code>
         */
        public com.google.protobuf.ByteString
            getVariableBytes() {
          java.lang.Object ref = variable_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            variable_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>required string variable = 1;</code>
         */
        public Builder setVariable(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          variable_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>required string variable = 1;</code>
         */
        public Builder clearVariable() {
          bitField0_ = (bitField0_ & ~0x00000001);
          variable_ = getDefaultInstance().getVariable();
          onChanged();
          return this;
        }
        /**
         * <code>required string variable = 1;</code>
         */
        public Builder setVariableBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          variable_ = value;
          onChanged();
          return this;
        }

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

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.VariableWithValue)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.VariableWithValue getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface EnvEntryOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry)
        com.google.protobuf.MessageOrBuilder {

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

      /**
       * <code>required string value = 2;</code>
       */
      boolean hasValue();
      /**
       * <code>required string value = 2;</code>
       */
      java.lang.String getValue();
      /**
       * <code>required string value = 2;</code>
       */
      com.google.protobuf.ByteString
          getValueBytes();
    }
    /**
     * <pre>
     * A key/value pair to be added as an environment variable. The value of
     * this pair is expanded in the same way as is described in FlagGroup.
     * The key remains an unexpanded string literal.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry}
     */
    public  static final class EnvEntry extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry)
        EnvEntryOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use EnvEntry.newBuilder() to construct.
      private EnvEntry(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private EnvEntry() {
        key_ = "";
        value_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private EnvEntry(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                key_ = bs;
                break;
              }
              case 18: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000002;
                value_ = bs;
                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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder.class);
      }

      private int bitField0_;
      public static final int KEY_FIELD_NUMBER = 1;
      private volatile java.lang.Object key_;
      /**
       * <code>required string key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string key = 1;</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            key_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int VALUE_FIELD_NUMBER = 2;
      private volatile java.lang.Object value_;
      /**
       * <code>required string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            value_ = s;
          }
          return s;
        }
      }
      /**
       * <code>required string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        if (!hasKey()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasValue()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
        }
        size += unknownFields.getSerializedSize();
        memoizedSize = size;
        return size;
      }

      @java.lang.Override
      public boolean equals(final java.lang.Object obj) {
        if (obj == this) {
         return true;
        }
        if (!(obj instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry) obj;

        boolean result = true;
        result = result && (hasKey() == other.hasKey());
        if (hasKey()) {
          result = result && getKey()
              .equals(other.getKey());
        }
        result = result && (hasValue() == other.hasValue());
        if (hasValue()) {
          result = result && getValue()
              .equals(other.getValue());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasKey()) {
          hash = (37 * hash) + KEY_FIELD_NUMBER;
          hash = (53 * hash) + getKey().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * A key/value pair to be added as an environment variable. The value of
       * this pair is expanded in the same way as is described in FlagGroup.
       * The key remains an unexpanded string literal.
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        public Builder clear() {
          super.clear();
          key_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          value_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.key_ = key_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.value_ = value_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.getDefaultInstance()) return this;
          if (other.hasKey()) {
            bitField0_ |= 0x00000001;
            key_ = other.key_;
            onChanged();
          }
          if (other.hasValue()) {
            bitField0_ |= 0x00000002;
            value_ = other.value_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          if (!hasKey()) {
            return false;
          }
          if (!hasValue()) {
            return false;
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

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

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

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface FeatureSetOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>repeated string feature = 1;</code>
       */
      java.util.List<java.lang.String>
          getFeatureList();
      /**
       * <code>repeated string feature = 1;</code>
       */
      int getFeatureCount();
      /**
       * <code>repeated string feature = 1;</code>
       */
      java.lang.String getFeature(int index);
      /**
       * <code>repeated string feature = 1;</code>
       */
      com.google.protobuf.ByteString
          getFeatureBytes(int index);
    }
    /**
     * <pre>
     * A set of features; used to support logical 'and' when specifying feature
     * requirements in Feature.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet}
     */
    public  static final class FeatureSet extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet)
        FeatureSetOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use FeatureSet.newBuilder() to construct.
      private FeatureSet(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private FeatureSet() {
        feature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private FeatureSet(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  feature_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000001;
                }
                feature_.add(bs);
                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) == 0x00000001)) {
            feature_ = feature_.getUnmodifiableView();
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder.class);
      }

      public static final int FEATURE_FIELD_NUMBER = 1;
      private com.google.protobuf.LazyStringList feature_;
      /**
       * <code>repeated string feature = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getFeatureList() {
        return feature_;
      }
      /**
       * <code>repeated string feature = 1;</code>
       */
      public int getFeatureCount() {
        return feature_.size();
      }
      /**
       * <code>repeated string feature = 1;</code>
       */
      public java.lang.String getFeature(int index) {
        return feature_.get(index);
      }
      /**
       * <code>repeated string feature = 1;</code>
       */
      public com.google.protobuf.ByteString
          getFeatureBytes(int index) {
        return feature_.getByteString(index);
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        for (int i = 0; i < feature_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, feature_.getRaw(i));
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        {
          int dataSize = 0;
          for (int i = 0; i < feature_.size(); i++) {
            dataSize += computeStringSizeNoTag(feature_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getFeatureList().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet) obj;

        boolean result = true;
        result = result && getFeatureList()
            .equals(other.getFeatureList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getFeatureCount() > 0) {
          hash = (37 * hash) + FEATURE_FIELD_NUMBER;
          hash = (53 * hash) + getFeatureList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * A set of features; used to support logical 'and' when specifying feature
       * requirements in Feature.
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        public Builder clear() {
          super.clear();
          feature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet(this);
          int from_bitField0_ = bitField0_;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            feature_ = feature_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.feature_ = feature_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.getDefaultInstance()) return this;
          if (!other.feature_.isEmpty()) {
            if (feature_.isEmpty()) {
              feature_ = other.feature_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureFeatureIsMutable();
              feature_.addAll(other.feature_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private com.google.protobuf.LazyStringList feature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureFeatureIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            feature_ = new com.google.protobuf.LazyStringArrayList(feature_);
            bitField0_ |= 0x00000001;
           }
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getFeatureList() {
          return feature_.getUnmodifiableView();
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public int getFeatureCount() {
          return feature_.size();
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public java.lang.String getFeature(int index) {
          return feature_.get(index);
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public com.google.protobuf.ByteString
            getFeatureBytes(int index) {
          return feature_.getByteString(index);
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder setFeature(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFeatureIsMutable();
          feature_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder addFeature(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFeatureIsMutable();
          feature_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder addAllFeature(
            java.lang.Iterable<java.lang.String> values) {
          ensureFeatureIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, feature_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder clearFeature() {
          feature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder addFeatureBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFeatureIsMutable();
          feature_.add(value);
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface WithFeatureSetOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <code>repeated string feature = 1;</code>
       */
      java.util.List<java.lang.String>
          getFeatureList();
      /**
       * <code>repeated string feature = 1;</code>
       */
      int getFeatureCount();
      /**
       * <code>repeated string feature = 1;</code>
       */
      java.lang.String getFeature(int index);
      /**
       * <code>repeated string feature = 1;</code>
       */
      com.google.protobuf.ByteString
          getFeatureBytes(int index);

      /**
       * <code>repeated string not_feature = 2;</code>
       */
      java.util.List<java.lang.String>
          getNotFeatureList();
      /**
       * <code>repeated string not_feature = 2;</code>
       */
      int getNotFeatureCount();
      /**
       * <code>repeated string not_feature = 2;</code>
       */
      java.lang.String getNotFeature(int index);
      /**
       * <code>repeated string not_feature = 2;</code>
       */
      com.google.protobuf.ByteString
          getNotFeatureBytes(int index);
    }
    /**
     * <pre>
     * A set of positive and negative features. This stanza will
     * evaluate to true when every 'feature' is enabled, and every
     * 'not_feature' is not enabled.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet}
     */
    public  static final class WithFeatureSet extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet)
        WithFeatureSetOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use WithFeatureSet.newBuilder() to construct.
      private WithFeatureSet(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private WithFeatureSet() {
        feature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        notFeature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private WithFeatureSet(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  feature_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000001;
                }
                feature_.add(bs);
                break;
              }
              case 18: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  notFeature_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000002;
                }
                notFeature_.add(bs);
                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) == 0x00000001)) {
            feature_ = feature_.getUnmodifiableView();
          }
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            notFeature_ = notFeature_.getUnmodifiableView();
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder.class);
      }

      public static final int FEATURE_FIELD_NUMBER = 1;
      private com.google.protobuf.LazyStringList feature_;
      /**
       * <code>repeated string feature = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getFeatureList() {
        return feature_;
      }
      /**
       * <code>repeated string feature = 1;</code>
       */
      public int getFeatureCount() {
        return feature_.size();
      }
      /**
       * <code>repeated string feature = 1;</code>
       */
      public java.lang.String getFeature(int index) {
        return feature_.get(index);
      }
      /**
       * <code>repeated string feature = 1;</code>
       */
      public com.google.protobuf.ByteString
          getFeatureBytes(int index) {
        return feature_.getByteString(index);
      }

      public static final int NOT_FEATURE_FIELD_NUMBER = 2;
      private com.google.protobuf.LazyStringList notFeature_;
      /**
       * <code>repeated string not_feature = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getNotFeatureList() {
        return notFeature_;
      }
      /**
       * <code>repeated string not_feature = 2;</code>
       */
      public int getNotFeatureCount() {
        return notFeature_.size();
      }
      /**
       * <code>repeated string not_feature = 2;</code>
       */
      public java.lang.String getNotFeature(int index) {
        return notFeature_.get(index);
      }
      /**
       * <code>repeated string not_feature = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNotFeatureBytes(int index) {
        return notFeature_.getByteString(index);
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        for (int i = 0; i < feature_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, feature_.getRaw(i));
        }
        for (int i = 0; i < notFeature_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, notFeature_.getRaw(i));
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        {
          int dataSize = 0;
          for (int i = 0; i < feature_.size(); i++) {
            dataSize += computeStringSizeNoTag(feature_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getFeatureList().size();
        }
        {
          int dataSize = 0;
          for (int i = 0; i < notFeature_.size(); i++) {
            dataSize += computeStringSizeNoTag(notFeature_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getNotFeatureList().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet) obj;

        boolean result = true;
        result = result && getFeatureList()
            .equals(other.getFeatureList());
        result = result && getNotFeatureList()
            .equals(other.getNotFeatureList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getFeatureCount() > 0) {
          hash = (37 * hash) + FEATURE_FIELD_NUMBER;
          hash = (53 * hash) + getFeatureList().hashCode();
        }
        if (getNotFeatureCount() > 0) {
          hash = (37 * hash) + NOT_FEATURE_FIELD_NUMBER;
          hash = (53 * hash) + getNotFeatureList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * A set of positive and negative features. This stanza will
       * evaluate to true when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        public Builder clear() {
          super.clear();
          feature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          notFeature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet(this);
          int from_bitField0_ = bitField0_;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            feature_ = feature_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.feature_ = feature_;
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            notFeature_ = notFeature_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.notFeature_ = notFeature_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.getDefaultInstance()) return this;
          if (!other.feature_.isEmpty()) {
            if (feature_.isEmpty()) {
              feature_ = other.feature_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureFeatureIsMutable();
              feature_.addAll(other.feature_);
            }
            onChanged();
          }
          if (!other.notFeature_.isEmpty()) {
            if (notFeature_.isEmpty()) {
              notFeature_ = other.notFeature_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureNotFeatureIsMutable();
              notFeature_.addAll(other.notFeature_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private com.google.protobuf.LazyStringList feature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureFeatureIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            feature_ = new com.google.protobuf.LazyStringArrayList(feature_);
            bitField0_ |= 0x00000001;
           }
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getFeatureList() {
          return feature_.getUnmodifiableView();
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public int getFeatureCount() {
          return feature_.size();
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public java.lang.String getFeature(int index) {
          return feature_.get(index);
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public com.google.protobuf.ByteString
            getFeatureBytes(int index) {
          return feature_.getByteString(index);
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder setFeature(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFeatureIsMutable();
          feature_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder addFeature(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFeatureIsMutable();
          feature_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder addAllFeature(
            java.lang.Iterable<java.lang.String> values) {
          ensureFeatureIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, feature_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder clearFeature() {
          feature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string feature = 1;</code>
         */
        public Builder addFeatureBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFeatureIsMutable();
          feature_.add(value);
          onChanged();
          return this;
        }

        private com.google.protobuf.LazyStringList notFeature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureNotFeatureIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            notFeature_ = new com.google.protobuf.LazyStringArrayList(notFeature_);
            bitField0_ |= 0x00000002;
           }
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getNotFeatureList() {
          return notFeature_.getUnmodifiableView();
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public int getNotFeatureCount() {
          return notFeature_.size();
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public java.lang.String getNotFeature(int index) {
          return notFeature_.get(index);
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public com.google.protobuf.ByteString
            getNotFeatureBytes(int index) {
          return notFeature_.getByteString(index);
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public Builder setNotFeature(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureNotFeatureIsMutable();
          notFeature_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public Builder addNotFeature(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureNotFeatureIsMutable();
          notFeature_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public Builder addAllNotFeature(
            java.lang.Iterable<java.lang.String> values) {
          ensureNotFeatureIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, notFeature_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public Builder clearNotFeature() {
          notFeature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string not_feature = 2;</code>
         */
        public Builder addNotFeatureBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureNotFeatureIsMutable();
          notFeature_.add(value);
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface FlagSetOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * The actions this flag set applies to; each flag set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      java.util.List<java.lang.String>
          getActionList();
      /**
       * <pre>
       * The actions this flag set applies to; each flag set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      int getActionCount();
      /**
       * <pre>
       * The actions this flag set applies to; each flag set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      java.lang.String getAction(int index);
      /**
       * <pre>
       * The actions this flag set applies to; each flag set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      com.google.protobuf.ByteString
          getActionBytes(int index);

      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> 
          getFlagGroupList();
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getFlagGroup(int index);
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      int getFlagGroupCount();
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> 
          getFlagGroupOrBuilderList();
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder getFlagGroupOrBuilder(
          int index);

      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> 
          getWithFeatureList();
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index);
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      int getWithFeatureCount();
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
          getWithFeatureOrBuilderList();
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
          int index);

      /**
       * <pre>
       * A list of build variables that this feature set needs, but which are
       * allowed to not be set. If any of the build variables listed is not
       * set, the feature set will not be expanded.
       * NOTE: Consider alternatives before using this; usually tools should
       * consistently create the same set of files, even if empty; use this
       * only for backwards compatibility with already existing behavior in tools
       * that are currently not worth changing.
       * </pre>
       *
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      java.util.List<java.lang.String>
          getExpandIfAllAvailableList();
      /**
       * <pre>
       * A list of build variables that this feature set needs, but which are
       * allowed to not be set. If any of the build variables listed is not
       * set, the feature set will not be expanded.
       * NOTE: Consider alternatives before using this; usually tools should
       * consistently create the same set of files, even if empty; use this
       * only for backwards compatibility with already existing behavior in tools
       * that are currently not worth changing.
       * </pre>
       *
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      int getExpandIfAllAvailableCount();
      /**
       * <pre>
       * A list of build variables that this feature set needs, but which are
       * allowed to not be set. If any of the build variables listed is not
       * set, the feature set will not be expanded.
       * NOTE: Consider alternatives before using this; usually tools should
       * consistently create the same set of files, even if empty; use this
       * only for backwards compatibility with already existing behavior in tools
       * that are currently not worth changing.
       * </pre>
       *
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      java.lang.String getExpandIfAllAvailable(int index);
      /**
       * <pre>
       * A list of build variables that this feature set needs, but which are
       * allowed to not be set. If any of the build variables listed is not
       * set, the feature set will not be expanded.
       * NOTE: Consider alternatives before using this; usually tools should
       * consistently create the same set of files, even if empty; use this
       * only for backwards compatibility with already existing behavior in tools
       * that are currently not worth changing.
       * </pre>
       *
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      com.google.protobuf.ByteString
          getExpandIfAllAvailableBytes(int index);
    }
    /**
     * <pre>
     * A set of flags that are expanded in the command line for specific actions.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet}
     */
    public  static final class FlagSet extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet)
        FlagSetOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use FlagSet.newBuilder() to construct.
      private FlagSet(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private FlagSet() {
        action_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        flagGroup_ = java.util.Collections.emptyList();
        withFeature_ = java.util.Collections.emptyList();
        expandIfAllAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private FlagSet(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  action_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000001;
                }
                action_.add(bs);
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  flagGroup_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup>();
                  mutable_bitField0_ |= 0x00000002;
                }
                flagGroup_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.PARSER, extensionRegistry));
                break;
              }
              case 26: {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  withFeature_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet>();
                  mutable_bitField0_ |= 0x00000004;
                }
                withFeature_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.PARSER, extensionRegistry));
                break;
              }
              case 34: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  expandIfAllAvailable_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000008;
                }
                expandIfAllAvailable_.add(bs);
                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) == 0x00000001)) {
            action_ = action_.getUnmodifiableView();
          }
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            flagGroup_ = java.util.Collections.unmodifiableList(flagGroup_);
          }
          if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
            withFeature_ = java.util.Collections.unmodifiableList(withFeature_);
          }
          if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
            expandIfAllAvailable_ = expandIfAllAvailable_.getUnmodifiableView();
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder.class);
      }

      public static final int ACTION_FIELD_NUMBER = 1;
      private com.google.protobuf.LazyStringList action_;
      /**
       * <pre>
       * The actions this flag set applies to; each flag set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getActionList() {
        return action_;
      }
      /**
       * <pre>
       * The actions this flag set applies to; each flag set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      public int getActionCount() {
        return action_.size();
      }
      /**
       * <pre>
       * The actions this flag set applies to; each flag set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      public java.lang.String getAction(int index) {
        return action_.get(index);
      }
      /**
       * <pre>
       * The actions this flag set applies to; each flag set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      public com.google.protobuf.ByteString
          getActionBytes(int index) {
        return action_.getByteString(index);
      }

      public static final int FLAG_GROUP_FIELD_NUMBER = 2;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> flagGroup_;
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> getFlagGroupList() {
        return flagGroup_;
      }
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> 
          getFlagGroupOrBuilderList() {
        return flagGroup_;
      }
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public int getFlagGroupCount() {
        return flagGroup_.size();
      }
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getFlagGroup(int index) {
        return flagGroup_.get(index);
      }
      /**
       * <pre>
       * The flags applied via this flag set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder getFlagGroupOrBuilder(
          int index) {
        return flagGroup_.get(index);
      }

      public static final int WITH_FEATURE_FIELD_NUMBER = 3;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> withFeature_;
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> getWithFeatureList() {
        return withFeature_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
          getWithFeatureOrBuilderList() {
        return withFeature_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public int getWithFeatureCount() {
        return withFeature_.size();
      }
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index) {
        return withFeature_.get(index);
      }
      /**
       * <pre>
       * A list of feature sets defining when this flag set gets applied.  The
       * flag set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the flag set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
          int index) {
        return withFeature_.get(index);
      }

      public static final int EXPAND_IF_ALL_AVAILABLE_FIELD_NUMBER = 4;
      private com.google.protobuf.LazyStringList expandIfAllAvailable_;
      /**
       * <pre>
       * A list of build variables that this feature set needs, but which are
       * allowed to not be set. If any of the build variables listed is not
       * set, the feature set will not be expanded.
       * NOTE: Consider alternatives before using this; usually tools should
       * consistently create the same set of files, even if empty; use this
       * only for backwards compatibility with already existing behavior in tools
       * that are currently not worth changing.
       * </pre>
       *
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getExpandIfAllAvailableList() {
        return expandIfAllAvailable_;
      }
      /**
       * <pre>
       * A list of build variables that this feature set needs, but which are
       * allowed to not be set. If any of the build variables listed is not
       * set, the feature set will not be expanded.
       * NOTE: Consider alternatives before using this; usually tools should
       * consistently create the same set of files, even if empty; use this
       * only for backwards compatibility with already existing behavior in tools
       * that are currently not worth changing.
       * </pre>
       *
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      public int getExpandIfAllAvailableCount() {
        return expandIfAllAvailable_.size();
      }
      /**
       * <pre>
       * A list of build variables that this feature set needs, but which are
       * allowed to not be set. If any of the build variables listed is not
       * set, the feature set will not be expanded.
       * NOTE: Consider alternatives before using this; usually tools should
       * consistently create the same set of files, even if empty; use this
       * only for backwards compatibility with already existing behavior in tools
       * that are currently not worth changing.
       * </pre>
       *
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      public java.lang.String getExpandIfAllAvailable(int index) {
        return expandIfAllAvailable_.get(index);
      }
      /**
       * <pre>
       * A list of build variables that this feature set needs, but which are
       * allowed to not be set. If any of the build variables listed is not
       * set, the feature set will not be expanded.
       * NOTE: Consider alternatives before using this; usually tools should
       * consistently create the same set of files, even if empty; use this
       * only for backwards compatibility with already existing behavior in tools
       * that are currently not worth changing.
       * </pre>
       *
       * <code>repeated string expand_if_all_available = 4;</code>
       */
      public com.google.protobuf.ByteString
          getExpandIfAllAvailableBytes(int index) {
        return expandIfAllAvailable_.getByteString(index);
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        for (int i = 0; i < getFlagGroupCount(); i++) {
          if (!getFlagGroup(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        for (int i = 0; i < action_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, action_.getRaw(i));
        }
        for (int i = 0; i < flagGroup_.size(); i++) {
          output.writeMessage(2, flagGroup_.get(i));
        }
        for (int i = 0; i < withFeature_.size(); i++) {
          output.writeMessage(3, withFeature_.get(i));
        }
        for (int i = 0; i < expandIfAllAvailable_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 4, expandIfAllAvailable_.getRaw(i));
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        {
          int dataSize = 0;
          for (int i = 0; i < action_.size(); i++) {
            dataSize += computeStringSizeNoTag(action_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getActionList().size();
        }
        for (int i = 0; i < flagGroup_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, flagGroup_.get(i));
        }
        for (int i = 0; i < withFeature_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, withFeature_.get(i));
        }
        {
          int dataSize = 0;
          for (int i = 0; i < expandIfAllAvailable_.size(); i++) {
            dataSize += computeStringSizeNoTag(expandIfAllAvailable_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getExpandIfAllAvailableList().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet) obj;

        boolean result = true;
        result = result && getActionList()
            .equals(other.getActionList());
        result = result && getFlagGroupList()
            .equals(other.getFlagGroupList());
        result = result && getWithFeatureList()
            .equals(other.getWithFeatureList());
        result = result && getExpandIfAllAvailableList()
            .equals(other.getExpandIfAllAvailableList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getActionCount() > 0) {
          hash = (37 * hash) + ACTION_FIELD_NUMBER;
          hash = (53 * hash) + getActionList().hashCode();
        }
        if (getFlagGroupCount() > 0) {
          hash = (37 * hash) + FLAG_GROUP_FIELD_NUMBER;
          hash = (53 * hash) + getFlagGroupList().hashCode();
        }
        if (getWithFeatureCount() > 0) {
          hash = (37 * hash) + WITH_FEATURE_FIELD_NUMBER;
          hash = (53 * hash) + getWithFeatureList().hashCode();
        }
        if (getExpandIfAllAvailableCount() > 0) {
          hash = (37 * hash) + EXPAND_IF_ALL_AVAILABLE_FIELD_NUMBER;
          hash = (53 * hash) + getExpandIfAllAvailableList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * A set of flags that are expanded in the command line for specific actions.
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getFlagGroupFieldBuilder();
            getWithFeatureFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          action_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          if (flagGroupBuilder_ == null) {
            flagGroup_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            flagGroupBuilder_.clear();
          }
          if (withFeatureBuilder_ == null) {
            withFeature_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            withFeatureBuilder_.clear();
          }
          expandIfAllAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet(this);
          int from_bitField0_ = bitField0_;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            action_ = action_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.action_ = action_;
          if (flagGroupBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              flagGroup_ = java.util.Collections.unmodifiableList(flagGroup_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.flagGroup_ = flagGroup_;
          } else {
            result.flagGroup_ = flagGroupBuilder_.build();
          }
          if (withFeatureBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              withFeature_ = java.util.Collections.unmodifiableList(withFeature_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.withFeature_ = withFeature_;
          } else {
            result.withFeature_ = withFeatureBuilder_.build();
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            expandIfAllAvailable_ = expandIfAllAvailable_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.expandIfAllAvailable_ = expandIfAllAvailable_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.getDefaultInstance()) return this;
          if (!other.action_.isEmpty()) {
            if (action_.isEmpty()) {
              action_ = other.action_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureActionIsMutable();
              action_.addAll(other.action_);
            }
            onChanged();
          }
          if (flagGroupBuilder_ == null) {
            if (!other.flagGroup_.isEmpty()) {
              if (flagGroup_.isEmpty()) {
                flagGroup_ = other.flagGroup_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureFlagGroupIsMutable();
                flagGroup_.addAll(other.flagGroup_);
              }
              onChanged();
            }
          } else {
            if (!other.flagGroup_.isEmpty()) {
              if (flagGroupBuilder_.isEmpty()) {
                flagGroupBuilder_.dispose();
                flagGroupBuilder_ = null;
                flagGroup_ = other.flagGroup_;
                bitField0_ = (bitField0_ & ~0x00000002);
                flagGroupBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getFlagGroupFieldBuilder() : null;
              } else {
                flagGroupBuilder_.addAllMessages(other.flagGroup_);
              }
            }
          }
          if (withFeatureBuilder_ == null) {
            if (!other.withFeature_.isEmpty()) {
              if (withFeature_.isEmpty()) {
                withFeature_ = other.withFeature_;
                bitField0_ = (bitField0_ & ~0x00000004);
              } else {
                ensureWithFeatureIsMutable();
                withFeature_.addAll(other.withFeature_);
              }
              onChanged();
            }
          } else {
            if (!other.withFeature_.isEmpty()) {
              if (withFeatureBuilder_.isEmpty()) {
                withFeatureBuilder_.dispose();
                withFeatureBuilder_ = null;
                withFeature_ = other.withFeature_;
                bitField0_ = (bitField0_ & ~0x00000004);
                withFeatureBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getWithFeatureFieldBuilder() : null;
              } else {
                withFeatureBuilder_.addAllMessages(other.withFeature_);
              }
            }
          }
          if (!other.expandIfAllAvailable_.isEmpty()) {
            if (expandIfAllAvailable_.isEmpty()) {
              expandIfAllAvailable_ = other.expandIfAllAvailable_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureExpandIfAllAvailableIsMutable();
              expandIfAllAvailable_.addAll(other.expandIfAllAvailable_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          for (int i = 0; i < getFlagGroupCount(); i++) {
            if (!getFlagGroup(i).isInitialized()) {
              return false;
            }
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private com.google.protobuf.LazyStringList action_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureActionIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            action_ = new com.google.protobuf.LazyStringArrayList(action_);
            bitField0_ |= 0x00000001;
           }
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getActionList() {
          return action_.getUnmodifiableView();
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public int getActionCount() {
          return action_.size();
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public java.lang.String getAction(int index) {
          return action_.get(index);
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public com.google.protobuf.ByteString
            getActionBytes(int index) {
          return action_.getByteString(index);
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder setAction(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureActionIsMutable();
          action_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder addAction(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureActionIsMutable();
          action_.add(value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder addAllAction(
            java.lang.Iterable<java.lang.String> values) {
          ensureActionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, action_);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder clearAction() {
          action_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The actions this flag set applies to; each flag set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder addActionBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureActionIsMutable();
          action_.add(value);
          onChanged();
          return this;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> flagGroup_ =
          java.util.Collections.emptyList();
        private void ensureFlagGroupIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            flagGroup_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup>(flagGroup_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> flagGroupBuilder_;

        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> getFlagGroupList() {
          if (flagGroupBuilder_ == null) {
            return java.util.Collections.unmodifiableList(flagGroup_);
          } else {
            return flagGroupBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public int getFlagGroupCount() {
          if (flagGroupBuilder_ == null) {
            return flagGroup_.size();
          } else {
            return flagGroupBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup getFlagGroup(int index) {
          if (flagGroupBuilder_ == null) {
            return flagGroup_.get(index);
          } else {
            return flagGroupBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder setFlagGroup(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup value) {
          if (flagGroupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagGroupIsMutable();
            flagGroup_.set(index, value);
            onChanged();
          } else {
            flagGroupBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder setFlagGroup(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder builderForValue) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            flagGroup_.set(index, builderForValue.build());
            onChanged();
          } else {
            flagGroupBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addFlagGroup(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup value) {
          if (flagGroupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagGroupIsMutable();
            flagGroup_.add(value);
            onChanged();
          } else {
            flagGroupBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addFlagGroup(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup value) {
          if (flagGroupBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagGroupIsMutable();
            flagGroup_.add(index, value);
            onChanged();
          } else {
            flagGroupBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addFlagGroup(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder builderForValue) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            flagGroup_.add(builderForValue.build());
            onChanged();
          } else {
            flagGroupBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addFlagGroup(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder builderForValue) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            flagGroup_.add(index, builderForValue.build());
            onChanged();
          } else {
            flagGroupBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder addAllFlagGroup(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup> values) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, flagGroup_);
            onChanged();
          } else {
            flagGroupBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder clearFlagGroup() {
          if (flagGroupBuilder_ == null) {
            flagGroup_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            flagGroupBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public Builder removeFlagGroup(int index) {
          if (flagGroupBuilder_ == null) {
            ensureFlagGroupIsMutable();
            flagGroup_.remove(index);
            onChanged();
          } else {
            flagGroupBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder getFlagGroupBuilder(
            int index) {
          return getFlagGroupFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder getFlagGroupOrBuilder(
            int index) {
          if (flagGroupBuilder_ == null) {
            return flagGroup_.get(index);  } else {
            return flagGroupBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> 
             getFlagGroupOrBuilderList() {
          if (flagGroupBuilder_ != null) {
            return flagGroupBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(flagGroup_);
          }
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder addFlagGroupBuilder() {
          return getFlagGroupFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.getDefaultInstance());
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder addFlagGroupBuilder(
            int index) {
          return getFlagGroupFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.getDefaultInstance());
        }
        /**
         * <pre>
         * The flags applied via this flag set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagGroup flag_group = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder> 
             getFlagGroupBuilderList() {
          return getFlagGroupFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder> 
            getFlagGroupFieldBuilder() {
          if (flagGroupBuilder_ == null) {
            flagGroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroup.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagGroupOrBuilder>(
                    flagGroup_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            flagGroup_ = null;
          }
          return flagGroupBuilder_;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> withFeature_ =
          java.util.Collections.emptyList();
        private void ensureWithFeatureIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            withFeature_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet>(withFeature_);
            bitField0_ |= 0x00000004;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> withFeatureBuilder_;

        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> getWithFeatureList() {
          if (withFeatureBuilder_ == null) {
            return java.util.Collections.unmodifiableList(withFeature_);
          } else {
            return withFeatureBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public int getWithFeatureCount() {
          if (withFeatureBuilder_ == null) {
            return withFeature_.size();
          } else {
            return withFeatureBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index) {
          if (withFeatureBuilder_ == null) {
            return withFeature_.get(index);
          } else {
            return withFeatureBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder setWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.set(index, value);
            onChanged();
          } else {
            withFeatureBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder setWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.set(index, builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addWithFeature(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.add(value);
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.add(index, value);
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addWithFeature(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.add(builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.add(index, builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addAllWithFeature(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> values) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, withFeature_);
            onChanged();
          } else {
            withFeatureBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder clearWithFeature() {
          if (withFeatureBuilder_ == null) {
            withFeature_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            withFeatureBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder removeWithFeature(int index) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.remove(index);
            onChanged();
          } else {
            withFeatureBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder getWithFeatureBuilder(
            int index) {
          return getWithFeatureFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
            int index) {
          if (withFeatureBuilder_ == null) {
            return withFeature_.get(index);  } else {
            return withFeatureBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
             getWithFeatureOrBuilderList() {
          if (withFeatureBuilder_ != null) {
            return withFeatureBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(withFeature_);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder addWithFeatureBuilder() {
          return getWithFeatureFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder addWithFeatureBuilder(
            int index) {
          return getWithFeatureFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this flag set gets applied.  The
         * flag set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the flag set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder> 
             getWithFeatureBuilderList() {
          return getWithFeatureFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
            getWithFeatureFieldBuilder() {
          if (withFeatureBuilder_ == null) {
            withFeatureBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder>(
                    withFeature_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            withFeature_ = null;
          }
          return withFeatureBuilder_;
        }

        private com.google.protobuf.LazyStringList expandIfAllAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureExpandIfAllAvailableIsMutable() {
          if (!((bitField0_ & 0x00000008) == 0x00000008)) {
            expandIfAllAvailable_ = new com.google.protobuf.LazyStringArrayList(expandIfAllAvailable_);
            bitField0_ |= 0x00000008;
           }
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getExpandIfAllAvailableList() {
          return expandIfAllAvailable_.getUnmodifiableView();
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public int getExpandIfAllAvailableCount() {
          return expandIfAllAvailable_.size();
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public java.lang.String getExpandIfAllAvailable(int index) {
          return expandIfAllAvailable_.get(index);
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public com.google.protobuf.ByteString
            getExpandIfAllAvailableBytes(int index) {
          return expandIfAllAvailable_.getByteString(index);
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder setExpandIfAllAvailable(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfAllAvailableIsMutable();
          expandIfAllAvailable_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder addExpandIfAllAvailable(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfAllAvailableIsMutable();
          expandIfAllAvailable_.add(value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder addAllExpandIfAllAvailable(
            java.lang.Iterable<java.lang.String> values) {
          ensureExpandIfAllAvailableIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, expandIfAllAvailable_);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder clearExpandIfAllAvailable() {
          expandIfAllAvailable_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of build variables that this feature set needs, but which are
         * allowed to not be set. If any of the build variables listed is not
         * set, the feature set will not be expanded.
         * NOTE: Consider alternatives before using this; usually tools should
         * consistently create the same set of files, even if empty; use this
         * only for backwards compatibility with already existing behavior in tools
         * that are currently not worth changing.
         * </pre>
         *
         * <code>repeated string expand_if_all_available = 4;</code>
         */
        public Builder addExpandIfAllAvailableBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExpandIfAllAvailableIsMutable();
          expandIfAllAvailable_.add(value);
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface EnvSetOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * The actions this env set applies to; each env set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      java.util.List<java.lang.String>
          getActionList();
      /**
       * <pre>
       * The actions this env set applies to; each env set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      int getActionCount();
      /**
       * <pre>
       * The actions this env set applies to; each env set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      java.lang.String getAction(int index);
      /**
       * <pre>
       * The actions this env set applies to; each env set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      com.google.protobuf.ByteString
          getActionBytes(int index);

      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry> 
          getEnvEntryList();
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry getEnvEntry(int index);
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      int getEnvEntryCount();
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder> 
          getEnvEntryOrBuilderList();
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder getEnvEntryOrBuilder(
          int index);

      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> 
          getWithFeatureList();
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index);
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      int getWithFeatureCount();
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
          getWithFeatureOrBuilderList();
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
          int index);
    }
    /**
     * <pre>
     * A set of environment variables that are expanded in the command line for
     * specific actions.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet}
     */
    public  static final class EnvSet extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet)
        EnvSetOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use EnvSet.newBuilder() to construct.
      private EnvSet(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private EnvSet() {
        action_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        envEntry_ = java.util.Collections.emptyList();
        withFeature_ = java.util.Collections.emptyList();
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private EnvSet(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                  action_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000001;
                }
                action_.add(bs);
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  envEntry_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry>();
                  mutable_bitField0_ |= 0x00000002;
                }
                envEntry_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.PARSER, extensionRegistry));
                break;
              }
              case 26: {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  withFeature_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet>();
                  mutable_bitField0_ |= 0x00000004;
                }
                withFeature_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.PARSER, extensionRegistry));
                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) == 0x00000001)) {
            action_ = action_.getUnmodifiableView();
          }
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            envEntry_ = java.util.Collections.unmodifiableList(envEntry_);
          }
          if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
            withFeature_ = java.util.Collections.unmodifiableList(withFeature_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder.class);
      }

      public static final int ACTION_FIELD_NUMBER = 1;
      private com.google.protobuf.LazyStringList action_;
      /**
       * <pre>
       * The actions this env set applies to; each env set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getActionList() {
        return action_;
      }
      /**
       * <pre>
       * The actions this env set applies to; each env set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      public int getActionCount() {
        return action_.size();
      }
      /**
       * <pre>
       * The actions this env set applies to; each env set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      public java.lang.String getAction(int index) {
        return action_.get(index);
      }
      /**
       * <pre>
       * The actions this env set applies to; each env set must specify at
       * least one action.
       * </pre>
       *
       * <code>repeated string action = 1;</code>
       */
      public com.google.protobuf.ByteString
          getActionBytes(int index) {
        return action_.getByteString(index);
      }

      public static final int ENV_ENTRY_FIELD_NUMBER = 2;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry> envEntry_;
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry> getEnvEntryList() {
        return envEntry_;
      }
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder> 
          getEnvEntryOrBuilderList() {
        return envEntry_;
      }
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      public int getEnvEntryCount() {
        return envEntry_.size();
      }
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry getEnvEntry(int index) {
        return envEntry_.get(index);
      }
      /**
       * <pre>
       * The environment variables applied via this env set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder getEnvEntryOrBuilder(
          int index) {
        return envEntry_.get(index);
      }

      public static final int WITH_FEATURE_FIELD_NUMBER = 3;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> withFeature_;
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> getWithFeatureList() {
        return withFeature_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
          getWithFeatureOrBuilderList() {
        return withFeature_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public int getWithFeatureCount() {
        return withFeature_.size();
      }
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index) {
        return withFeature_.get(index);
      }
      /**
       * <pre>
       * A list of feature sets defining when this env set gets applied.  The
       * env set will be applied when any one of the feature sets evaluate to
       * true. (That is, when when every 'feature' is enabled, and every
       * 'not_feature' is not enabled.)
       * If 'with_feature' is omitted, the env set will be applied
       * unconditionally for every action specified.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
          int index) {
        return withFeature_.get(index);
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        for (int i = 0; i < getEnvEntryCount(); i++) {
          if (!getEnvEntry(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        for (int i = 0; i < action_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, action_.getRaw(i));
        }
        for (int i = 0; i < envEntry_.size(); i++) {
          output.writeMessage(2, envEntry_.get(i));
        }
        for (int i = 0; i < withFeature_.size(); i++) {
          output.writeMessage(3, withFeature_.get(i));
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        {
          int dataSize = 0;
          for (int i = 0; i < action_.size(); i++) {
            dataSize += computeStringSizeNoTag(action_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getActionList().size();
        }
        for (int i = 0; i < envEntry_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, envEntry_.get(i));
        }
        for (int i = 0; i < withFeature_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, withFeature_.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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet) obj;

        boolean result = true;
        result = result && getActionList()
            .equals(other.getActionList());
        result = result && getEnvEntryList()
            .equals(other.getEnvEntryList());
        result = result && getWithFeatureList()
            .equals(other.getWithFeatureList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getActionCount() > 0) {
          hash = (37 * hash) + ACTION_FIELD_NUMBER;
          hash = (53 * hash) + getActionList().hashCode();
        }
        if (getEnvEntryCount() > 0) {
          hash = (37 * hash) + ENV_ENTRY_FIELD_NUMBER;
          hash = (53 * hash) + getEnvEntryList().hashCode();
        }
        if (getWithFeatureCount() > 0) {
          hash = (37 * hash) + WITH_FEATURE_FIELD_NUMBER;
          hash = (53 * hash) + getWithFeatureList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * A set of environment variables that are expanded in the command line for
       * specific actions.
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getEnvEntryFieldBuilder();
            getWithFeatureFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          action_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          if (envEntryBuilder_ == null) {
            envEntry_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            envEntryBuilder_.clear();
          }
          if (withFeatureBuilder_ == null) {
            withFeature_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            withFeatureBuilder_.clear();
          }
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet(this);
          int from_bitField0_ = bitField0_;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            action_ = action_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.action_ = action_;
          if (envEntryBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              envEntry_ = java.util.Collections.unmodifiableList(envEntry_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.envEntry_ = envEntry_;
          } else {
            result.envEntry_ = envEntryBuilder_.build();
          }
          if (withFeatureBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              withFeature_ = java.util.Collections.unmodifiableList(withFeature_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.withFeature_ = withFeature_;
          } else {
            result.withFeature_ = withFeatureBuilder_.build();
          }
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.getDefaultInstance()) return this;
          if (!other.action_.isEmpty()) {
            if (action_.isEmpty()) {
              action_ = other.action_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureActionIsMutable();
              action_.addAll(other.action_);
            }
            onChanged();
          }
          if (envEntryBuilder_ == null) {
            if (!other.envEntry_.isEmpty()) {
              if (envEntry_.isEmpty()) {
                envEntry_ = other.envEntry_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureEnvEntryIsMutable();
                envEntry_.addAll(other.envEntry_);
              }
              onChanged();
            }
          } else {
            if (!other.envEntry_.isEmpty()) {
              if (envEntryBuilder_.isEmpty()) {
                envEntryBuilder_.dispose();
                envEntryBuilder_ = null;
                envEntry_ = other.envEntry_;
                bitField0_ = (bitField0_ & ~0x00000002);
                envEntryBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getEnvEntryFieldBuilder() : null;
              } else {
                envEntryBuilder_.addAllMessages(other.envEntry_);
              }
            }
          }
          if (withFeatureBuilder_ == null) {
            if (!other.withFeature_.isEmpty()) {
              if (withFeature_.isEmpty()) {
                withFeature_ = other.withFeature_;
                bitField0_ = (bitField0_ & ~0x00000004);
              } else {
                ensureWithFeatureIsMutable();
                withFeature_.addAll(other.withFeature_);
              }
              onChanged();
            }
          } else {
            if (!other.withFeature_.isEmpty()) {
              if (withFeatureBuilder_.isEmpty()) {
                withFeatureBuilder_.dispose();
                withFeatureBuilder_ = null;
                withFeature_ = other.withFeature_;
                bitField0_ = (bitField0_ & ~0x00000004);
                withFeatureBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getWithFeatureFieldBuilder() : null;
              } else {
                withFeatureBuilder_.addAllMessages(other.withFeature_);
              }
            }
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          for (int i = 0; i < getEnvEntryCount(); i++) {
            if (!getEnvEntry(i).isInitialized()) {
              return false;
            }
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private com.google.protobuf.LazyStringList action_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureActionIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            action_ = new com.google.protobuf.LazyStringArrayList(action_);
            bitField0_ |= 0x00000001;
           }
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getActionList() {
          return action_.getUnmodifiableView();
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public int getActionCount() {
          return action_.size();
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public java.lang.String getAction(int index) {
          return action_.get(index);
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public com.google.protobuf.ByteString
            getActionBytes(int index) {
          return action_.getByteString(index);
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder setAction(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureActionIsMutable();
          action_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder addAction(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureActionIsMutable();
          action_.add(value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder addAllAction(
            java.lang.Iterable<java.lang.String> values) {
          ensureActionIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, action_);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder clearAction() {
          action_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The actions this env set applies to; each env set must specify at
         * least one action.
         * </pre>
         *
         * <code>repeated string action = 1;</code>
         */
        public Builder addActionBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureActionIsMutable();
          action_.add(value);
          onChanged();
          return this;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry> envEntry_ =
          java.util.Collections.emptyList();
        private void ensureEnvEntryIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            envEntry_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry>(envEntry_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder> envEntryBuilder_;

        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry> getEnvEntryList() {
          if (envEntryBuilder_ == null) {
            return java.util.Collections.unmodifiableList(envEntry_);
          } else {
            return envEntryBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public int getEnvEntryCount() {
          if (envEntryBuilder_ == null) {
            return envEntry_.size();
          } else {
            return envEntryBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry getEnvEntry(int index) {
          if (envEntryBuilder_ == null) {
            return envEntry_.get(index);
          } else {
            return envEntryBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder setEnvEntry(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry value) {
          if (envEntryBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvEntryIsMutable();
            envEntry_.set(index, value);
            onChanged();
          } else {
            envEntryBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder setEnvEntry(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder builderForValue) {
          if (envEntryBuilder_ == null) {
            ensureEnvEntryIsMutable();
            envEntry_.set(index, builderForValue.build());
            onChanged();
          } else {
            envEntryBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder addEnvEntry(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry value) {
          if (envEntryBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvEntryIsMutable();
            envEntry_.add(value);
            onChanged();
          } else {
            envEntryBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder addEnvEntry(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry value) {
          if (envEntryBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvEntryIsMutable();
            envEntry_.add(index, value);
            onChanged();
          } else {
            envEntryBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder addEnvEntry(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder builderForValue) {
          if (envEntryBuilder_ == null) {
            ensureEnvEntryIsMutable();
            envEntry_.add(builderForValue.build());
            onChanged();
          } else {
            envEntryBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder addEnvEntry(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder builderForValue) {
          if (envEntryBuilder_ == null) {
            ensureEnvEntryIsMutable();
            envEntry_.add(index, builderForValue.build());
            onChanged();
          } else {
            envEntryBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder addAllEnvEntry(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry> values) {
          if (envEntryBuilder_ == null) {
            ensureEnvEntryIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, envEntry_);
            onChanged();
          } else {
            envEntryBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder clearEnvEntry() {
          if (envEntryBuilder_ == null) {
            envEntry_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            envEntryBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public Builder removeEnvEntry(int index) {
          if (envEntryBuilder_ == null) {
            ensureEnvEntryIsMutable();
            envEntry_.remove(index);
            onChanged();
          } else {
            envEntryBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder getEnvEntryBuilder(
            int index) {
          return getEnvEntryFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder getEnvEntryOrBuilder(
            int index) {
          if (envEntryBuilder_ == null) {
            return envEntry_.get(index);  } else {
            return envEntryBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder> 
             getEnvEntryOrBuilderList() {
          if (envEntryBuilder_ != null) {
            return envEntryBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(envEntry_);
          }
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder addEnvEntryBuilder() {
          return getEnvEntryFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.getDefaultInstance());
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder addEnvEntryBuilder(
            int index) {
          return getEnvEntryFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.getDefaultInstance());
        }
        /**
         * <pre>
         * The environment variables applied via this env set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvEntry env_entry = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder> 
             getEnvEntryBuilderList() {
          return getEnvEntryFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder> 
            getEnvEntryFieldBuilder() {
          if (envEntryBuilder_ == null) {
            envEntryBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntry.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvEntryOrBuilder>(
                    envEntry_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            envEntry_ = null;
          }
          return envEntryBuilder_;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> withFeature_ =
          java.util.Collections.emptyList();
        private void ensureWithFeatureIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            withFeature_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet>(withFeature_);
            bitField0_ |= 0x00000004;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> withFeatureBuilder_;

        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> getWithFeatureList() {
          if (withFeatureBuilder_ == null) {
            return java.util.Collections.unmodifiableList(withFeature_);
          } else {
            return withFeatureBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public int getWithFeatureCount() {
          if (withFeatureBuilder_ == null) {
            return withFeature_.size();
          } else {
            return withFeatureBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index) {
          if (withFeatureBuilder_ == null) {
            return withFeature_.get(index);
          } else {
            return withFeatureBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder setWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.set(index, value);
            onChanged();
          } else {
            withFeatureBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder setWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.set(index, builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addWithFeature(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.add(value);
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.add(index, value);
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addWithFeature(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.add(builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.add(index, builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder addAllWithFeature(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> values) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, withFeature_);
            onChanged();
          } else {
            withFeatureBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder clearWithFeature() {
          if (withFeatureBuilder_ == null) {
            withFeature_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            withFeatureBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public Builder removeWithFeature(int index) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.remove(index);
            onChanged();
          } else {
            withFeatureBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder getWithFeatureBuilder(
            int index) {
          return getWithFeatureFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
            int index) {
          if (withFeatureBuilder_ == null) {
            return withFeature_.get(index);  } else {
            return withFeatureBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
             getWithFeatureOrBuilderList() {
          if (withFeatureBuilder_ != null) {
            return withFeatureBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(withFeature_);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder addWithFeatureBuilder() {
          return getWithFeatureFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder addWithFeatureBuilder(
            int index) {
          return getWithFeatureFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this env set gets applied.  The
         * env set will be applied when any one of the feature sets evaluate to
         * true. (That is, when when every 'feature' is enabled, and every
         * 'not_feature' is not enabled.)
         * If 'with_feature' is omitted, the env set will be applied
         * unconditionally for every action specified.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 3;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder> 
             getWithFeatureBuilderList() {
          return getWithFeatureFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
            getWithFeatureFieldBuilder() {
          if (withFeatureBuilder_ == null) {
            withFeatureBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder>(
                    withFeature_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            withFeature_ = null;
          }
          return withFeatureBuilder_;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface FeatureOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * The feature's name. Feature names are generally defined by Bazel; it is
       * possible to introduce a feature without a change to Bazel by adding a
       * 'feature' section to the toolchain and adding the corresponding string as
       * feature in the BUILD file.
       * </pre>
       *
       * <code>optional string name = 1;</code>
       */
      boolean hasName();
      /**
       * <pre>
       * The feature's name. Feature names are generally defined by Bazel; it is
       * possible to introduce a feature without a change to Bazel by adding a
       * 'feature' section to the toolchain and adding the corresponding string as
       * feature in the BUILD file.
       * </pre>
       *
       * <code>optional string name = 1;</code>
       */
      java.lang.String getName();
      /**
       * <pre>
       * The feature's name. Feature names are generally defined by Bazel; it is
       * possible to introduce a feature without a change to Bazel by adding a
       * 'feature' section to the toolchain and adding the corresponding string as
       * feature in the BUILD file.
       * </pre>
       *
       * <code>optional string name = 1;</code>
       */
      com.google.protobuf.ByteString
          getNameBytes();

      /**
       * <pre>
       * If 'true', this feature is enabled unless a rule type explicitly marks it
       * as unsupported. Such features cannot be turned off from within a BUILD
       * file or the command line.
       * </pre>
       *
       * <code>optional bool enabled = 7;</code>
       */
      boolean hasEnabled();
      /**
       * <pre>
       * If 'true', this feature is enabled unless a rule type explicitly marks it
       * as unsupported. Such features cannot be turned off from within a BUILD
       * file or the command line.
       * </pre>
       *
       * <code>optional bool enabled = 7;</code>
       */
      boolean getEnabled();

      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> 
          getFlagSetList();
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getFlagSet(int index);
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      int getFlagSetCount();
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> 
          getFlagSetOrBuilderList();
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder getFlagSetOrBuilder(
          int index);

      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> 
          getEnvSetList();
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getEnvSet(int index);
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      int getEnvSetCount();
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> 
          getEnvSetOrBuilderList();
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder getEnvSetOrBuilder(
          int index);

      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> 
          getRequiresList();
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getRequires(int index);
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      int getRequiresCount();
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> 
          getRequiresOrBuilderList();
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder getRequiresOrBuilder(
          int index);

      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this feature is enabled. If any of the implied features or action configs
       * cannot be enabled, this feature will (silently) not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 4;</code>
       */
      java.util.List<java.lang.String>
          getImpliesList();
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this feature is enabled. If any of the implied features or action configs
       * cannot be enabled, this feature will (silently) not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 4;</code>
       */
      int getImpliesCount();
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this feature is enabled. If any of the implied features or action configs
       * cannot be enabled, this feature will (silently) not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 4;</code>
       */
      java.lang.String getImplies(int index);
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this feature is enabled. If any of the implied features or action configs
       * cannot be enabled, this feature will (silently) not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 4;</code>
       */
      com.google.protobuf.ByteString
          getImpliesBytes(int index);

      /**
       * <pre>
       * A list of names this feature conflicts with.
       * A feature cannot be enabled if:
       * - 'provides' contains the name of a different feature or action config
       *  that we want to enable.
       * - 'provides' contains the same value as a 'provides' in a different
       *   feature or action config that we want to enable.
       * Use this in order to ensure that incompatible features cannot be
       * accidentally activated at the same time, leading to hard to diagnose
       * compiler errors.
       * </pre>
       *
       * <code>repeated string provides = 5;</code>
       */
      java.util.List<java.lang.String>
          getProvidesList();
      /**
       * <pre>
       * A list of names this feature conflicts with.
       * A feature cannot be enabled if:
       * - 'provides' contains the name of a different feature or action config
       *  that we want to enable.
       * - 'provides' contains the same value as a 'provides' in a different
       *   feature or action config that we want to enable.
       * Use this in order to ensure that incompatible features cannot be
       * accidentally activated at the same time, leading to hard to diagnose
       * compiler errors.
       * </pre>
       *
       * <code>repeated string provides = 5;</code>
       */
      int getProvidesCount();
      /**
       * <pre>
       * A list of names this feature conflicts with.
       * A feature cannot be enabled if:
       * - 'provides' contains the name of a different feature or action config
       *  that we want to enable.
       * - 'provides' contains the same value as a 'provides' in a different
       *   feature or action config that we want to enable.
       * Use this in order to ensure that incompatible features cannot be
       * accidentally activated at the same time, leading to hard to diagnose
       * compiler errors.
       * </pre>
       *
       * <code>repeated string provides = 5;</code>
       */
      java.lang.String getProvides(int index);
      /**
       * <pre>
       * A list of names this feature conflicts with.
       * A feature cannot be enabled if:
       * - 'provides' contains the name of a different feature or action config
       *  that we want to enable.
       * - 'provides' contains the same value as a 'provides' in a different
       *   feature or action config that we want to enable.
       * Use this in order to ensure that incompatible features cannot be
       * accidentally activated at the same time, leading to hard to diagnose
       * compiler errors.
       * </pre>
       *
       * <code>repeated string provides = 5;</code>
       */
      com.google.protobuf.ByteString
          getProvidesBytes(int index);
    }
    /**
     * <pre>
     * Contains all flag specifications for one feature.
     * Next ID: 8
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature}
     */
    public  static final class Feature extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature)
        FeatureOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Feature.newBuilder() to construct.
      private Feature(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Feature() {
        name_ = "";
        enabled_ = false;
        flagSet_ = java.util.Collections.emptyList();
        envSet_ = java.util.Collections.emptyList();
        requires_ = java.util.Collections.emptyList();
        implies_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        provides_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private Feature(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                name_ = bs;
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  flagSet_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet>();
                  mutable_bitField0_ |= 0x00000004;
                }
                flagSet_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.PARSER, extensionRegistry));
                break;
              }
              case 26: {
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                  requires_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet>();
                  mutable_bitField0_ |= 0x00000010;
                }
                requires_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.PARSER, extensionRegistry));
                break;
              }
              case 34: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                  implies_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000020;
                }
                implies_.add(bs);
                break;
              }
              case 42: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                  provides_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000040;
                }
                provides_.add(bs);
                break;
              }
              case 50: {
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  envSet_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet>();
                  mutable_bitField0_ |= 0x00000008;
                }
                envSet_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.PARSER, extensionRegistry));
                break;
              }
              case 56: {
                bitField0_ |= 0x00000002;
                enabled_ = input.readBool();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
            flagSet_ = java.util.Collections.unmodifiableList(flagSet_);
          }
          if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
            requires_ = java.util.Collections.unmodifiableList(requires_);
          }
          if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
            implies_ = implies_.getUnmodifiableView();
          }
          if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
            provides_ = provides_.getUnmodifiableView();
          }
          if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
            envSet_ = java.util.Collections.unmodifiableList(envSet_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder.class);
      }

      private int bitField0_;
      public static final int NAME_FIELD_NUMBER = 1;
      private volatile java.lang.Object name_;
      /**
       * <pre>
       * The feature's name. Feature names are generally defined by Bazel; it is
       * possible to introduce a feature without a change to Bazel by adding a
       * 'feature' section to the toolchain and adding the corresponding string as
       * feature in the BUILD file.
       * </pre>
       *
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The feature's name. Feature names are generally defined by Bazel; it is
       * possible to introduce a feature without a change to Bazel by adding a
       * 'feature' section to the toolchain and adding the corresponding string as
       * feature in the BUILD file.
       * </pre>
       *
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        }
      }
      /**
       * <pre>
       * The feature's name. Feature names are generally defined by Bazel; it is
       * possible to introduce a feature without a change to Bazel by adding a
       * 'feature' section to the toolchain and adding the corresponding string as
       * feature in the BUILD file.
       * </pre>
       *
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int ENABLED_FIELD_NUMBER = 7;
      private boolean enabled_;
      /**
       * <pre>
       * If 'true', this feature is enabled unless a rule type explicitly marks it
       * as unsupported. Such features cannot be turned off from within a BUILD
       * file or the command line.
       * </pre>
       *
       * <code>optional bool enabled = 7;</code>
       */
      public boolean hasEnabled() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * If 'true', this feature is enabled unless a rule type explicitly marks it
       * as unsupported. Such features cannot be turned off from within a BUILD
       * file or the command line.
       * </pre>
       *
       * <code>optional bool enabled = 7;</code>
       */
      public boolean getEnabled() {
        return enabled_;
      }

      public static final int FLAG_SET_FIELD_NUMBER = 2;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> flagSet_;
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> getFlagSetList() {
        return flagSet_;
      }
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> 
          getFlagSetOrBuilderList() {
        return flagSet_;
      }
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      public int getFlagSetCount() {
        return flagSet_.size();
      }
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getFlagSet(int index) {
        return flagSet_.get(index);
      }
      /**
       * <pre>
       * If the given feature is enabled, the flag sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder getFlagSetOrBuilder(
          int index) {
        return flagSet_.get(index);
      }

      public static final int ENV_SET_FIELD_NUMBER = 6;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> envSet_;
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> getEnvSetList() {
        return envSet_;
      }
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> 
          getEnvSetOrBuilderList() {
        return envSet_;
      }
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      public int getEnvSetCount() {
        return envSet_.size();
      }
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getEnvSet(int index) {
        return envSet_.get(index);
      }
      /**
       * <pre>
       * If the given feature is enabled, the env sets will be applied for the
       * actions in the modes that they are specified for.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder getEnvSetOrBuilder(
          int index) {
        return envSet_.get(index);
      }

      public static final int REQUIRES_FIELD_NUMBER = 3;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> requires_;
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> getRequiresList() {
        return requires_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> 
          getRequiresOrBuilderList() {
        return requires_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      public int getRequiresCount() {
        return requires_.size();
      }
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getRequires(int index) {
        return requires_.get(index);
      }
      /**
       * <pre>
       * A list of feature sets defining when this feature is supported by the
       * toolchain. The feature is supported if any of the feature sets fully
       * apply, that is, when all features of a feature set are enabled.
       * If 'requires' is omitted, the feature is supported independently of which
       * other features are enabled.
       * Use this for example to filter flags depending on the build mode
       * enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder getRequiresOrBuilder(
          int index) {
        return requires_.get(index);
      }

      public static final int IMPLIES_FIELD_NUMBER = 4;
      private com.google.protobuf.LazyStringList implies_;
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this feature is enabled. If any of the implied features or action configs
       * cannot be enabled, this feature will (silently) not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getImpliesList() {
        return implies_;
      }
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this feature is enabled. If any of the implied features or action configs
       * cannot be enabled, this feature will (silently) not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 4;</code>
       */
      public int getImpliesCount() {
        return implies_.size();
      }
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this feature is enabled. If any of the implied features or action configs
       * cannot be enabled, this feature will (silently) not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 4;</code>
       */
      public java.lang.String getImplies(int index) {
        return implies_.get(index);
      }
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this feature is enabled. If any of the implied features or action configs
       * cannot be enabled, this feature will (silently) not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 4;</code>
       */
      public com.google.protobuf.ByteString
          getImpliesBytes(int index) {
        return implies_.getByteString(index);
      }

      public static final int PROVIDES_FIELD_NUMBER = 5;
      private com.google.protobuf.LazyStringList provides_;
      /**
       * <pre>
       * A list of names this feature conflicts with.
       * A feature cannot be enabled if:
       * - 'provides' contains the name of a different feature or action config
       *  that we want to enable.
       * - 'provides' contains the same value as a 'provides' in a different
       *   feature or action config that we want to enable.
       * Use this in order to ensure that incompatible features cannot be
       * accidentally activated at the same time, leading to hard to diagnose
       * compiler errors.
       * </pre>
       *
       * <code>repeated string provides = 5;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getProvidesList() {
        return provides_;
      }
      /**
       * <pre>
       * A list of names this feature conflicts with.
       * A feature cannot be enabled if:
       * - 'provides' contains the name of a different feature or action config
       *  that we want to enable.
       * - 'provides' contains the same value as a 'provides' in a different
       *   feature or action config that we want to enable.
       * Use this in order to ensure that incompatible features cannot be
       * accidentally activated at the same time, leading to hard to diagnose
       * compiler errors.
       * </pre>
       *
       * <code>repeated string provides = 5;</code>
       */
      public int getProvidesCount() {
        return provides_.size();
      }
      /**
       * <pre>
       * A list of names this feature conflicts with.
       * A feature cannot be enabled if:
       * - 'provides' contains the name of a different feature or action config
       *  that we want to enable.
       * - 'provides' contains the same value as a 'provides' in a different
       *   feature or action config that we want to enable.
       * Use this in order to ensure that incompatible features cannot be
       * accidentally activated at the same time, leading to hard to diagnose
       * compiler errors.
       * </pre>
       *
       * <code>repeated string provides = 5;</code>
       */
      public java.lang.String getProvides(int index) {
        return provides_.get(index);
      }
      /**
       * <pre>
       * A list of names this feature conflicts with.
       * A feature cannot be enabled if:
       * - 'provides' contains the name of a different feature or action config
       *  that we want to enable.
       * - 'provides' contains the same value as a 'provides' in a different
       *   feature or action config that we want to enable.
       * Use this in order to ensure that incompatible features cannot be
       * accidentally activated at the same time, leading to hard to diagnose
       * compiler errors.
       * </pre>
       *
       * <code>repeated string provides = 5;</code>
       */
      public com.google.protobuf.ByteString
          getProvidesBytes(int index) {
        return provides_.getByteString(index);
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        for (int i = 0; i < getFlagSetCount(); i++) {
          if (!getFlagSet(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        for (int i = 0; i < getEnvSetCount(); i++) {
          if (!getEnvSet(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
        }
        for (int i = 0; i < flagSet_.size(); i++) {
          output.writeMessage(2, flagSet_.get(i));
        }
        for (int i = 0; i < requires_.size(); i++) {
          output.writeMessage(3, requires_.get(i));
        }
        for (int i = 0; i < implies_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 4, implies_.getRaw(i));
        }
        for (int i = 0; i < provides_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 5, provides_.getRaw(i));
        }
        for (int i = 0; i < envSet_.size(); i++) {
          output.writeMessage(6, envSet_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBool(7, enabled_);
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
        }
        for (int i = 0; i < flagSet_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, flagSet_.get(i));
        }
        for (int i = 0; i < requires_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, requires_.get(i));
        }
        {
          int dataSize = 0;
          for (int i = 0; i < implies_.size(); i++) {
            dataSize += computeStringSizeNoTag(implies_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getImpliesList().size();
        }
        {
          int dataSize = 0;
          for (int i = 0; i < provides_.size(); i++) {
            dataSize += computeStringSizeNoTag(provides_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getProvidesList().size();
        }
        for (int i = 0; i < envSet_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(6, envSet_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(7, enabled_);
        }
        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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature) obj;

        boolean result = true;
        result = result && (hasName() == other.hasName());
        if (hasName()) {
          result = result && getName()
              .equals(other.getName());
        }
        result = result && (hasEnabled() == other.hasEnabled());
        if (hasEnabled()) {
          result = result && (getEnabled()
              == other.getEnabled());
        }
        result = result && getFlagSetList()
            .equals(other.getFlagSetList());
        result = result && getEnvSetList()
            .equals(other.getEnvSetList());
        result = result && getRequiresList()
            .equals(other.getRequiresList());
        result = result && getImpliesList()
            .equals(other.getImpliesList());
        result = result && getProvidesList()
            .equals(other.getProvidesList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasName()) {
          hash = (37 * hash) + NAME_FIELD_NUMBER;
          hash = (53 * hash) + getName().hashCode();
        }
        if (hasEnabled()) {
          hash = (37 * hash) + ENABLED_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
              getEnabled());
        }
        if (getFlagSetCount() > 0) {
          hash = (37 * hash) + FLAG_SET_FIELD_NUMBER;
          hash = (53 * hash) + getFlagSetList().hashCode();
        }
        if (getEnvSetCount() > 0) {
          hash = (37 * hash) + ENV_SET_FIELD_NUMBER;
          hash = (53 * hash) + getEnvSetList().hashCode();
        }
        if (getRequiresCount() > 0) {
          hash = (37 * hash) + REQUIRES_FIELD_NUMBER;
          hash = (53 * hash) + getRequiresList().hashCode();
        }
        if (getImpliesCount() > 0) {
          hash = (37 * hash) + IMPLIES_FIELD_NUMBER;
          hash = (53 * hash) + getImpliesList().hashCode();
        }
        if (getProvidesCount() > 0) {
          hash = (37 * hash) + PROVIDES_FIELD_NUMBER;
          hash = (53 * hash) + getProvidesList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * Contains all flag specifications for one feature.
       * Next ID: 8
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getFlagSetFieldBuilder();
            getEnvSetFieldBuilder();
            getRequiresFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          name_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          enabled_ = false;
          bitField0_ = (bitField0_ & ~0x00000002);
          if (flagSetBuilder_ == null) {
            flagSet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            flagSetBuilder_.clear();
          }
          if (envSetBuilder_ == null) {
            envSet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            envSetBuilder_.clear();
          }
          if (requiresBuilder_ == null) {
            requires_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            requiresBuilder_.clear();
          }
          implies_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000020);
          provides_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000040);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.name_ = name_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.enabled_ = enabled_;
          if (flagSetBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              flagSet_ = java.util.Collections.unmodifiableList(flagSet_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.flagSet_ = flagSet_;
          } else {
            result.flagSet_ = flagSetBuilder_.build();
          }
          if (envSetBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
              envSet_ = java.util.Collections.unmodifiableList(envSet_);
              bitField0_ = (bitField0_ & ~0x00000008);
            }
            result.envSet_ = envSet_;
          } else {
            result.envSet_ = envSetBuilder_.build();
          }
          if (requiresBuilder_ == null) {
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
              requires_ = java.util.Collections.unmodifiableList(requires_);
              bitField0_ = (bitField0_ & ~0x00000010);
            }
            result.requires_ = requires_;
          } else {
            result.requires_ = requiresBuilder_.build();
          }
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            implies_ = implies_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.implies_ = implies_;
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            provides_ = provides_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.provides_ = provides_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.getDefaultInstance()) return this;
          if (other.hasName()) {
            bitField0_ |= 0x00000001;
            name_ = other.name_;
            onChanged();
          }
          if (other.hasEnabled()) {
            setEnabled(other.getEnabled());
          }
          if (flagSetBuilder_ == null) {
            if (!other.flagSet_.isEmpty()) {
              if (flagSet_.isEmpty()) {
                flagSet_ = other.flagSet_;
                bitField0_ = (bitField0_ & ~0x00000004);
              } else {
                ensureFlagSetIsMutable();
                flagSet_.addAll(other.flagSet_);
              }
              onChanged();
            }
          } else {
            if (!other.flagSet_.isEmpty()) {
              if (flagSetBuilder_.isEmpty()) {
                flagSetBuilder_.dispose();
                flagSetBuilder_ = null;
                flagSet_ = other.flagSet_;
                bitField0_ = (bitField0_ & ~0x00000004);
                flagSetBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getFlagSetFieldBuilder() : null;
              } else {
                flagSetBuilder_.addAllMessages(other.flagSet_);
              }
            }
          }
          if (envSetBuilder_ == null) {
            if (!other.envSet_.isEmpty()) {
              if (envSet_.isEmpty()) {
                envSet_ = other.envSet_;
                bitField0_ = (bitField0_ & ~0x00000008);
              } else {
                ensureEnvSetIsMutable();
                envSet_.addAll(other.envSet_);
              }
              onChanged();
            }
          } else {
            if (!other.envSet_.isEmpty()) {
              if (envSetBuilder_.isEmpty()) {
                envSetBuilder_.dispose();
                envSetBuilder_ = null;
                envSet_ = other.envSet_;
                bitField0_ = (bitField0_ & ~0x00000008);
                envSetBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getEnvSetFieldBuilder() : null;
              } else {
                envSetBuilder_.addAllMessages(other.envSet_);
              }
            }
          }
          if (requiresBuilder_ == null) {
            if (!other.requires_.isEmpty()) {
              if (requires_.isEmpty()) {
                requires_ = other.requires_;
                bitField0_ = (bitField0_ & ~0x00000010);
              } else {
                ensureRequiresIsMutable();
                requires_.addAll(other.requires_);
              }
              onChanged();
            }
          } else {
            if (!other.requires_.isEmpty()) {
              if (requiresBuilder_.isEmpty()) {
                requiresBuilder_.dispose();
                requiresBuilder_ = null;
                requires_ = other.requires_;
                bitField0_ = (bitField0_ & ~0x00000010);
                requiresBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getRequiresFieldBuilder() : null;
              } else {
                requiresBuilder_.addAllMessages(other.requires_);
              }
            }
          }
          if (!other.implies_.isEmpty()) {
            if (implies_.isEmpty()) {
              implies_ = other.implies_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureImpliesIsMutable();
              implies_.addAll(other.implies_);
            }
            onChanged();
          }
          if (!other.provides_.isEmpty()) {
            if (provides_.isEmpty()) {
              provides_ = other.provides_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureProvidesIsMutable();
              provides_.addAll(other.provides_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          for (int i = 0; i < getFlagSetCount(); i++) {
            if (!getFlagSet(i).isInitialized()) {
              return false;
            }
          }
          for (int i = 0; i < getEnvSetCount(); i++) {
            if (!getEnvSet(i).isInitialized()) {
              return false;
            }
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.lang.Object name_ = "";
        /**
         * <pre>
         * The feature's name. Feature names are generally defined by Bazel; it is
         * possible to introduce a feature without a change to Bazel by adding a
         * 'feature' section to the toolchain and adding the corresponding string as
         * feature in the BUILD file.
         * </pre>
         *
         * <code>optional string name = 1;</code>
         */
        public boolean hasName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * The feature's name. Feature names are generally defined by Bazel; it is
         * possible to introduce a feature without a change to Bazel by adding a
         * 'feature' section to the toolchain and adding the corresponding string as
         * feature in the BUILD file.
         * </pre>
         *
         * <code>optional string name = 1;</code>
         */
        public java.lang.String getName() {
          java.lang.Object ref = name_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              name_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * The feature's name. Feature names are generally defined by Bazel; it is
         * possible to introduce a feature without a change to Bazel by adding a
         * 'feature' section to the toolchain and adding the corresponding string as
         * feature in the BUILD file.
         * </pre>
         *
         * <code>optional string name = 1;</code>
         */
        public com.google.protobuf.ByteString
            getNameBytes() {
          java.lang.Object ref = name_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            name_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * The feature's name. Feature names are generally defined by Bazel; it is
         * possible to introduce a feature without a change to Bazel by adding a
         * 'feature' section to the toolchain and adding the corresponding string as
         * feature in the BUILD file.
         * </pre>
         *
         * <code>optional string name = 1;</code>
         */
        public Builder setName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The feature's name. Feature names are generally defined by Bazel; it is
         * possible to introduce a feature without a change to Bazel by adding a
         * 'feature' section to the toolchain and adding the corresponding string as
         * feature in the BUILD file.
         * </pre>
         *
         * <code>optional string name = 1;</code>
         */
        public Builder clearName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The feature's name. Feature names are generally defined by Bazel; it is
         * possible to introduce a feature without a change to Bazel by adding a
         * 'feature' section to the toolchain and adding the corresponding string as
         * feature in the BUILD file.
         * </pre>
         *
         * <code>optional string name = 1;</code>
         */
        public Builder setNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }

        private boolean enabled_ ;
        /**
         * <pre>
         * If 'true', this feature is enabled unless a rule type explicitly marks it
         * as unsupported. Such features cannot be turned off from within a BUILD
         * file or the command line.
         * </pre>
         *
         * <code>optional bool enabled = 7;</code>
         */
        public boolean hasEnabled() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <pre>
         * If 'true', this feature is enabled unless a rule type explicitly marks it
         * as unsupported. Such features cannot be turned off from within a BUILD
         * file or the command line.
         * </pre>
         *
         * <code>optional bool enabled = 7;</code>
         */
        public boolean getEnabled() {
          return enabled_;
        }
        /**
         * <pre>
         * If 'true', this feature is enabled unless a rule type explicitly marks it
         * as unsupported. Such features cannot be turned off from within a BUILD
         * file or the command line.
         * </pre>
         *
         * <code>optional bool enabled = 7;</code>
         */
        public Builder setEnabled(boolean value) {
          bitField0_ |= 0x00000002;
          enabled_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * If 'true', this feature is enabled unless a rule type explicitly marks it
         * as unsupported. Such features cannot be turned off from within a BUILD
         * file or the command line.
         * </pre>
         *
         * <code>optional bool enabled = 7;</code>
         */
        public Builder clearEnabled() {
          bitField0_ = (bitField0_ & ~0x00000002);
          enabled_ = false;
          onChanged();
          return this;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> flagSet_ =
          java.util.Collections.emptyList();
        private void ensureFlagSetIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            flagSet_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet>(flagSet_);
            bitField0_ |= 0x00000004;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> flagSetBuilder_;

        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> getFlagSetList() {
          if (flagSetBuilder_ == null) {
            return java.util.Collections.unmodifiableList(flagSet_);
          } else {
            return flagSetBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public int getFlagSetCount() {
          if (flagSetBuilder_ == null) {
            return flagSet_.size();
          } else {
            return flagSetBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getFlagSet(int index) {
          if (flagSetBuilder_ == null) {
            return flagSet_.get(index);
          } else {
            return flagSetBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder setFlagSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet value) {
          if (flagSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagSetIsMutable();
            flagSet_.set(index, value);
            onChanged();
          } else {
            flagSetBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder setFlagSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder builderForValue) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            flagSet_.set(index, builderForValue.build());
            onChanged();
          } else {
            flagSetBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder addFlagSet(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet value) {
          if (flagSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagSetIsMutable();
            flagSet_.add(value);
            onChanged();
          } else {
            flagSetBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder addFlagSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet value) {
          if (flagSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagSetIsMutable();
            flagSet_.add(index, value);
            onChanged();
          } else {
            flagSetBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder addFlagSet(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder builderForValue) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            flagSet_.add(builderForValue.build());
            onChanged();
          } else {
            flagSetBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder addFlagSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder builderForValue) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            flagSet_.add(index, builderForValue.build());
            onChanged();
          } else {
            flagSetBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder addAllFlagSet(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> values) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, flagSet_);
            onChanged();
          } else {
            flagSetBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder clearFlagSet() {
          if (flagSetBuilder_ == null) {
            flagSet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            flagSetBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public Builder removeFlagSet(int index) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            flagSet_.remove(index);
            onChanged();
          } else {
            flagSetBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder getFlagSetBuilder(
            int index) {
          return getFlagSetFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder getFlagSetOrBuilder(
            int index) {
          if (flagSetBuilder_ == null) {
            return flagSet_.get(index);  } else {
            return flagSetBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> 
             getFlagSetOrBuilderList() {
          if (flagSetBuilder_ != null) {
            return flagSetBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(flagSet_);
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder addFlagSetBuilder() {
          return getFlagSetFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.getDefaultInstance());
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder addFlagSetBuilder(
            int index) {
          return getFlagSetFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.getDefaultInstance());
        }
        /**
         * <pre>
         * If the given feature is enabled, the flag sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder> 
             getFlagSetBuilderList() {
          return getFlagSetFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> 
            getFlagSetFieldBuilder() {
          if (flagSetBuilder_ == null) {
            flagSetBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder>(
                    flagSet_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            flagSet_ = null;
          }
          return flagSetBuilder_;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> envSet_ =
          java.util.Collections.emptyList();
        private void ensureEnvSetIsMutable() {
          if (!((bitField0_ & 0x00000008) == 0x00000008)) {
            envSet_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet>(envSet_);
            bitField0_ |= 0x00000008;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> envSetBuilder_;

        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> getEnvSetList() {
          if (envSetBuilder_ == null) {
            return java.util.Collections.unmodifiableList(envSet_);
          } else {
            return envSetBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public int getEnvSetCount() {
          if (envSetBuilder_ == null) {
            return envSet_.size();
          } else {
            return envSetBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getEnvSet(int index) {
          if (envSetBuilder_ == null) {
            return envSet_.get(index);
          } else {
            return envSetBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder setEnvSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet value) {
          if (envSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvSetIsMutable();
            envSet_.set(index, value);
            onChanged();
          } else {
            envSetBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder setEnvSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder builderForValue) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            envSet_.set(index, builderForValue.build());
            onChanged();
          } else {
            envSetBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder addEnvSet(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet value) {
          if (envSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvSetIsMutable();
            envSet_.add(value);
            onChanged();
          } else {
            envSetBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder addEnvSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet value) {
          if (envSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvSetIsMutable();
            envSet_.add(index, value);
            onChanged();
          } else {
            envSetBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder addEnvSet(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder builderForValue) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            envSet_.add(builderForValue.build());
            onChanged();
          } else {
            envSetBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder addEnvSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder builderForValue) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            envSet_.add(index, builderForValue.build());
            onChanged();
          } else {
            envSetBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder addAllEnvSet(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> values) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, envSet_);
            onChanged();
          } else {
            envSetBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder clearEnvSet() {
          if (envSetBuilder_ == null) {
            envSet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000008);
            onChanged();
          } else {
            envSetBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public Builder removeEnvSet(int index) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            envSet_.remove(index);
            onChanged();
          } else {
            envSetBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder getEnvSetBuilder(
            int index) {
          return getEnvSetFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder getEnvSetOrBuilder(
            int index) {
          if (envSetBuilder_ == null) {
            return envSet_.get(index);  } else {
            return envSetBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> 
             getEnvSetOrBuilderList() {
          if (envSetBuilder_ != null) {
            return envSetBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(envSet_);
          }
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder addEnvSetBuilder() {
          return getEnvSetFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.getDefaultInstance());
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder addEnvSetBuilder(
            int index) {
          return getEnvSetFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.getDefaultInstance());
        }
        /**
         * <pre>
         * If the given feature is enabled, the env sets will be applied for the
         * actions in the modes that they are specified for.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 6;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder> 
             getEnvSetBuilderList() {
          return getEnvSetFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> 
            getEnvSetFieldBuilder() {
          if (envSetBuilder_ == null) {
            envSetBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder>(
                    envSet_,
                    ((bitField0_ & 0x00000008) == 0x00000008),
                    getParentForChildren(),
                    isClean());
            envSet_ = null;
          }
          return envSetBuilder_;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> requires_ =
          java.util.Collections.emptyList();
        private void ensureRequiresIsMutable() {
          if (!((bitField0_ & 0x00000010) == 0x00000010)) {
            requires_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet>(requires_);
            bitField0_ |= 0x00000010;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> requiresBuilder_;

        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> getRequiresList() {
          if (requiresBuilder_ == null) {
            return java.util.Collections.unmodifiableList(requires_);
          } else {
            return requiresBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public int getRequiresCount() {
          if (requiresBuilder_ == null) {
            return requires_.size();
          } else {
            return requiresBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getRequires(int index) {
          if (requiresBuilder_ == null) {
            return requires_.get(index);
          } else {
            return requiresBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder setRequires(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet value) {
          if (requiresBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRequiresIsMutable();
            requires_.set(index, value);
            onChanged();
          } else {
            requiresBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder setRequires(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder builderForValue) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            requires_.set(index, builderForValue.build());
            onChanged();
          } else {
            requiresBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder addRequires(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet value) {
          if (requiresBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRequiresIsMutable();
            requires_.add(value);
            onChanged();
          } else {
            requiresBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder addRequires(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet value) {
          if (requiresBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRequiresIsMutable();
            requires_.add(index, value);
            onChanged();
          } else {
            requiresBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder addRequires(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder builderForValue) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            requires_.add(builderForValue.build());
            onChanged();
          } else {
            requiresBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder addRequires(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder builderForValue) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            requires_.add(index, builderForValue.build());
            onChanged();
          } else {
            requiresBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder addAllRequires(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> values) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, requires_);
            onChanged();
          } else {
            requiresBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder clearRequires() {
          if (requiresBuilder_ == null) {
            requires_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000010);
            onChanged();
          } else {
            requiresBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public Builder removeRequires(int index) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            requires_.remove(index);
            onChanged();
          } else {
            requiresBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder getRequiresBuilder(
            int index) {
          return getRequiresFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder getRequiresOrBuilder(
            int index) {
          if (requiresBuilder_ == null) {
            return requires_.get(index);  } else {
            return requiresBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> 
             getRequiresOrBuilderList() {
          if (requiresBuilder_ != null) {
            return requiresBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(requires_);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder addRequiresBuilder() {
          return getRequiresFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder addRequiresBuilder(
            int index) {
          return getRequiresFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this feature is supported by the
         * toolchain. The feature is supported if any of the feature sets fully
         * apply, that is, when all features of a feature set are enabled.
         * If 'requires' is omitted, the feature is supported independently of which
         * other features are enabled.
         * Use this for example to filter flags depending on the build mode
         * enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 3;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder> 
             getRequiresBuilderList() {
          return getRequiresFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> 
            getRequiresFieldBuilder() {
          if (requiresBuilder_ == null) {
            requiresBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder>(
                    requires_,
                    ((bitField0_ & 0x00000010) == 0x00000010),
                    getParentForChildren(),
                    isClean());
            requires_ = null;
          }
          return requiresBuilder_;
        }

        private com.google.protobuf.LazyStringList implies_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureImpliesIsMutable() {
          if (!((bitField0_ & 0x00000020) == 0x00000020)) {
            implies_ = new com.google.protobuf.LazyStringArrayList(implies_);
            bitField0_ |= 0x00000020;
           }
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getImpliesList() {
          return implies_.getUnmodifiableView();
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public int getImpliesCount() {
          return implies_.size();
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public java.lang.String getImplies(int index) {
          return implies_.get(index);
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public com.google.protobuf.ByteString
            getImpliesBytes(int index) {
          return implies_.getByteString(index);
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public Builder setImplies(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureImpliesIsMutable();
          implies_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public Builder addImplies(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureImpliesIsMutable();
          implies_.add(value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public Builder addAllImplies(
            java.lang.Iterable<java.lang.String> values) {
          ensureImpliesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, implies_);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public Builder clearImplies() {
          implies_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this feature is enabled. If any of the implied features or action configs
         * cannot be enabled, this feature will (silently) not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 4;</code>
         */
        public Builder addImpliesBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureImpliesIsMutable();
          implies_.add(value);
          onChanged();
          return this;
        }

        private com.google.protobuf.LazyStringList provides_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureProvidesIsMutable() {
          if (!((bitField0_ & 0x00000040) == 0x00000040)) {
            provides_ = new com.google.protobuf.LazyStringArrayList(provides_);
            bitField0_ |= 0x00000040;
           }
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getProvidesList() {
          return provides_.getUnmodifiableView();
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public int getProvidesCount() {
          return provides_.size();
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public java.lang.String getProvides(int index) {
          return provides_.get(index);
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public com.google.protobuf.ByteString
            getProvidesBytes(int index) {
          return provides_.getByteString(index);
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public Builder setProvides(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureProvidesIsMutable();
          provides_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public Builder addProvides(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureProvidesIsMutable();
          provides_.add(value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public Builder addAllProvides(
            java.lang.Iterable<java.lang.String> values) {
          ensureProvidesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, provides_);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public Builder clearProvides() {
          provides_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of names this feature conflicts with.
         * A feature cannot be enabled if:
         * - 'provides' contains the name of a different feature or action config
         *  that we want to enable.
         * - 'provides' contains the same value as a 'provides' in a different
         *   feature or action config that we want to enable.
         * Use this in order to ensure that incompatible features cannot be
         * accidentally activated at the same time, leading to hard to diagnose
         * compiler errors.
         * </pre>
         *
         * <code>repeated string provides = 5;</code>
         */
        public Builder addProvidesBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureProvidesIsMutable();
          provides_.add(value);
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface ToolOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Path to the tool, relative to the location of the crosstool.
       * </pre>
       *
       * <code>required string tool_path = 1;</code>
       */
      boolean hasToolPath();
      /**
       * <pre>
       * Path to the tool, relative to the location of the crosstool.
       * </pre>
       *
       * <code>required string tool_path = 1;</code>
       */
      java.lang.String getToolPath();
      /**
       * <pre>
       * Path to the tool, relative to the location of the crosstool.
       * </pre>
       *
       * <code>required string tool_path = 1;</code>
       */
      com.google.protobuf.ByteString
          getToolPathBytes();

      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> 
          getWithFeatureList();
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index);
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      int getWithFeatureCount();
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
          getWithFeatureOrBuilderList();
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
          int index);

      /**
       * <pre>
       * Requirements on the execution environment for the execution of this tool,
       * to be passed as out-of-band "hints" to the execution backend.
       * Ex. "requires-darwin"
       * </pre>
       *
       * <code>repeated string execution_requirement = 3;</code>
       */
      java.util.List<java.lang.String>
          getExecutionRequirementList();
      /**
       * <pre>
       * Requirements on the execution environment for the execution of this tool,
       * to be passed as out-of-band "hints" to the execution backend.
       * Ex. "requires-darwin"
       * </pre>
       *
       * <code>repeated string execution_requirement = 3;</code>
       */
      int getExecutionRequirementCount();
      /**
       * <pre>
       * Requirements on the execution environment for the execution of this tool,
       * to be passed as out-of-band "hints" to the execution backend.
       * Ex. "requires-darwin"
       * </pre>
       *
       * <code>repeated string execution_requirement = 3;</code>
       */
      java.lang.String getExecutionRequirement(int index);
      /**
       * <pre>
       * Requirements on the execution environment for the execution of this tool,
       * to be passed as out-of-band "hints" to the execution backend.
       * Ex. "requires-darwin"
       * </pre>
       *
       * <code>repeated string execution_requirement = 3;</code>
       */
      com.google.protobuf.ByteString
          getExecutionRequirementBytes(int index);
    }
    /**
     * <pre>
     * Describes a tool associated with a crosstool action config.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool}
     */
    public  static final class Tool extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool)
        ToolOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use Tool.newBuilder() to construct.
      private Tool(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private Tool() {
        toolPath_ = "";
        withFeature_ = java.util.Collections.emptyList();
        executionRequirement_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private Tool(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                toolPath_ = bs;
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  withFeature_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet>();
                  mutable_bitField0_ |= 0x00000002;
                }
                withFeature_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.PARSER, extensionRegistry));
                break;
              }
              case 26: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  executionRequirement_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000004;
                }
                executionRequirement_.add(bs);
                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_ & 0x00000002) == 0x00000002)) {
            withFeature_ = java.util.Collections.unmodifiableList(withFeature_);
          }
          if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
            executionRequirement_ = executionRequirement_.getUnmodifiableView();
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder.class);
      }

      private int bitField0_;
      public static final int TOOL_PATH_FIELD_NUMBER = 1;
      private volatile java.lang.Object toolPath_;
      /**
       * <pre>
       * Path to the tool, relative to the location of the crosstool.
       * </pre>
       *
       * <code>required string tool_path = 1;</code>
       */
      public boolean hasToolPath() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Path to the tool, relative to the location of the crosstool.
       * </pre>
       *
       * <code>required string tool_path = 1;</code>
       */
      public java.lang.String getToolPath() {
        java.lang.Object ref = toolPath_;
        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 (bs.isValidUtf8()) {
            toolPath_ = s;
          }
          return s;
        }
      }
      /**
       * <pre>
       * Path to the tool, relative to the location of the crosstool.
       * </pre>
       *
       * <code>required string tool_path = 1;</code>
       */
      public com.google.protobuf.ByteString
          getToolPathBytes() {
        java.lang.Object ref = toolPath_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          toolPath_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int WITH_FEATURE_FIELD_NUMBER = 2;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> withFeature_;
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> getWithFeatureList() {
        return withFeature_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
          getWithFeatureOrBuilderList() {
        return withFeature_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      public int getWithFeatureCount() {
        return withFeature_.size();
      }
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index) {
        return withFeature_.get(index);
      }
      /**
       * <pre>
       * A list of feature sets defining when this tool is applicable.  The tool
       * will used when any one of the feature sets evaluate to true. (That is,
       * when when every 'feature' is enabled, and every 'not_feature' is not
       * enabled.)
       * If 'with_feature' is omitted, the tool will apply for any feature
       * configuration.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
          int index) {
        return withFeature_.get(index);
      }

      public static final int EXECUTION_REQUIREMENT_FIELD_NUMBER = 3;
      private com.google.protobuf.LazyStringList executionRequirement_;
      /**
       * <pre>
       * Requirements on the execution environment for the execution of this tool,
       * to be passed as out-of-band "hints" to the execution backend.
       * Ex. "requires-darwin"
       * </pre>
       *
       * <code>repeated string execution_requirement = 3;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getExecutionRequirementList() {
        return executionRequirement_;
      }
      /**
       * <pre>
       * Requirements on the execution environment for the execution of this tool,
       * to be passed as out-of-band "hints" to the execution backend.
       * Ex. "requires-darwin"
       * </pre>
       *
       * <code>repeated string execution_requirement = 3;</code>
       */
      public int getExecutionRequirementCount() {
        return executionRequirement_.size();
      }
      /**
       * <pre>
       * Requirements on the execution environment for the execution of this tool,
       * to be passed as out-of-band "hints" to the execution backend.
       * Ex. "requires-darwin"
       * </pre>
       *
       * <code>repeated string execution_requirement = 3;</code>
       */
      public java.lang.String getExecutionRequirement(int index) {
        return executionRequirement_.get(index);
      }
      /**
       * <pre>
       * Requirements on the execution environment for the execution of this tool,
       * to be passed as out-of-band "hints" to the execution backend.
       * Ex. "requires-darwin"
       * </pre>
       *
       * <code>repeated string execution_requirement = 3;</code>
       */
      public com.google.protobuf.ByteString
          getExecutionRequirementBytes(int index) {
        return executionRequirement_.getByteString(index);
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        if (!hasToolPath()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, toolPath_);
        }
        for (int i = 0; i < withFeature_.size(); i++) {
          output.writeMessage(2, withFeature_.get(i));
        }
        for (int i = 0; i < executionRequirement_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 3, executionRequirement_.getRaw(i));
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, toolPath_);
        }
        for (int i = 0; i < withFeature_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, withFeature_.get(i));
        }
        {
          int dataSize = 0;
          for (int i = 0; i < executionRequirement_.size(); i++) {
            dataSize += computeStringSizeNoTag(executionRequirement_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getExecutionRequirementList().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool) obj;

        boolean result = true;
        result = result && (hasToolPath() == other.hasToolPath());
        if (hasToolPath()) {
          result = result && getToolPath()
              .equals(other.getToolPath());
        }
        result = result && getWithFeatureList()
            .equals(other.getWithFeatureList());
        result = result && getExecutionRequirementList()
            .equals(other.getExecutionRequirementList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasToolPath()) {
          hash = (37 * hash) + TOOL_PATH_FIELD_NUMBER;
          hash = (53 * hash) + getToolPath().hashCode();
        }
        if (getWithFeatureCount() > 0) {
          hash = (37 * hash) + WITH_FEATURE_FIELD_NUMBER;
          hash = (53 * hash) + getWithFeatureList().hashCode();
        }
        if (getExecutionRequirementCount() > 0) {
          hash = (37 * hash) + EXECUTION_REQUIREMENT_FIELD_NUMBER;
          hash = (53 * hash) + getExecutionRequirementList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * Describes a tool associated with a crosstool action config.
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getWithFeatureFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          toolPath_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          if (withFeatureBuilder_ == null) {
            withFeature_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            withFeatureBuilder_.clear();
          }
          executionRequirement_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000004);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.toolPath_ = toolPath_;
          if (withFeatureBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              withFeature_ = java.util.Collections.unmodifiableList(withFeature_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.withFeature_ = withFeature_;
          } else {
            result.withFeature_ = withFeatureBuilder_.build();
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            executionRequirement_ = executionRequirement_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.executionRequirement_ = executionRequirement_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.getDefaultInstance()) return this;
          if (other.hasToolPath()) {
            bitField0_ |= 0x00000001;
            toolPath_ = other.toolPath_;
            onChanged();
          }
          if (withFeatureBuilder_ == null) {
            if (!other.withFeature_.isEmpty()) {
              if (withFeature_.isEmpty()) {
                withFeature_ = other.withFeature_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureWithFeatureIsMutable();
                withFeature_.addAll(other.withFeature_);
              }
              onChanged();
            }
          } else {
            if (!other.withFeature_.isEmpty()) {
              if (withFeatureBuilder_.isEmpty()) {
                withFeatureBuilder_.dispose();
                withFeatureBuilder_ = null;
                withFeature_ = other.withFeature_;
                bitField0_ = (bitField0_ & ~0x00000002);
                withFeatureBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getWithFeatureFieldBuilder() : null;
              } else {
                withFeatureBuilder_.addAllMessages(other.withFeature_);
              }
            }
          }
          if (!other.executionRequirement_.isEmpty()) {
            if (executionRequirement_.isEmpty()) {
              executionRequirement_ = other.executionRequirement_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureExecutionRequirementIsMutable();
              executionRequirement_.addAll(other.executionRequirement_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          if (!hasToolPath()) {
            return false;
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.lang.Object toolPath_ = "";
        /**
         * <pre>
         * Path to the tool, relative to the location of the crosstool.
         * </pre>
         *
         * <code>required string tool_path = 1;</code>
         */
        public boolean hasToolPath() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * Path to the tool, relative to the location of the crosstool.
         * </pre>
         *
         * <code>required string tool_path = 1;</code>
         */
        public java.lang.String getToolPath() {
          java.lang.Object ref = toolPath_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              toolPath_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Path to the tool, relative to the location of the crosstool.
         * </pre>
         *
         * <code>required string tool_path = 1;</code>
         */
        public com.google.protobuf.ByteString
            getToolPathBytes() {
          java.lang.Object ref = toolPath_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            toolPath_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Path to the tool, relative to the location of the crosstool.
         * </pre>
         *
         * <code>required string tool_path = 1;</code>
         */
        public Builder setToolPath(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          toolPath_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Path to the tool, relative to the location of the crosstool.
         * </pre>
         *
         * <code>required string tool_path = 1;</code>
         */
        public Builder clearToolPath() {
          bitField0_ = (bitField0_ & ~0x00000001);
          toolPath_ = getDefaultInstance().getToolPath();
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Path to the tool, relative to the location of the crosstool.
         * </pre>
         *
         * <code>required string tool_path = 1;</code>
         */
        public Builder setToolPathBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          toolPath_ = value;
          onChanged();
          return this;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> withFeature_ =
          java.util.Collections.emptyList();
        private void ensureWithFeatureIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            withFeature_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet>(withFeature_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> withFeatureBuilder_;

        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> getWithFeatureList() {
          if (withFeatureBuilder_ == null) {
            return java.util.Collections.unmodifiableList(withFeature_);
          } else {
            return withFeatureBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public int getWithFeatureCount() {
          if (withFeatureBuilder_ == null) {
            return withFeature_.size();
          } else {
            return withFeatureBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet getWithFeature(int index) {
          if (withFeatureBuilder_ == null) {
            return withFeature_.get(index);
          } else {
            return withFeatureBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder setWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.set(index, value);
            onChanged();
          } else {
            withFeatureBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder setWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.set(index, builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder addWithFeature(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.add(value);
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder addWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet value) {
          if (withFeatureBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureWithFeatureIsMutable();
            withFeature_.add(index, value);
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder addWithFeature(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.add(builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder addWithFeature(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder builderForValue) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.add(index, builderForValue.build());
            onChanged();
          } else {
            withFeatureBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder addAllWithFeature(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet> values) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, withFeature_);
            onChanged();
          } else {
            withFeatureBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder clearWithFeature() {
          if (withFeatureBuilder_ == null) {
            withFeature_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            withFeatureBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public Builder removeWithFeature(int index) {
          if (withFeatureBuilder_ == null) {
            ensureWithFeatureIsMutable();
            withFeature_.remove(index);
            onChanged();
          } else {
            withFeatureBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder getWithFeatureBuilder(
            int index) {
          return getWithFeatureFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder getWithFeatureOrBuilder(
            int index) {
          if (withFeatureBuilder_ == null) {
            return withFeature_.get(index);  } else {
            return withFeatureBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
             getWithFeatureOrBuilderList() {
          if (withFeatureBuilder_ != null) {
            return withFeatureBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(withFeature_);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder addWithFeatureBuilder() {
          return getWithFeatureFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder addWithFeatureBuilder(
            int index) {
          return getWithFeatureFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this tool is applicable.  The tool
         * will used when any one of the feature sets evaluate to true. (That is,
         * when when every 'feature' is enabled, and every 'not_feature' is not
         * enabled.)
         * If 'with_feature' is omitted, the tool will apply for any feature
         * configuration.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.WithFeatureSet with_feature = 2;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder> 
             getWithFeatureBuilderList() {
          return getWithFeatureFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder> 
            getWithFeatureFieldBuilder() {
          if (withFeatureBuilder_ == null) {
            withFeatureBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.WithFeatureSetOrBuilder>(
                    withFeature_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            withFeature_ = null;
          }
          return withFeatureBuilder_;
        }

        private com.google.protobuf.LazyStringList executionRequirement_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureExecutionRequirementIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            executionRequirement_ = new com.google.protobuf.LazyStringArrayList(executionRequirement_);
            bitField0_ |= 0x00000004;
           }
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getExecutionRequirementList() {
          return executionRequirement_.getUnmodifiableView();
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public int getExecutionRequirementCount() {
          return executionRequirement_.size();
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public java.lang.String getExecutionRequirement(int index) {
          return executionRequirement_.get(index);
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public com.google.protobuf.ByteString
            getExecutionRequirementBytes(int index) {
          return executionRequirement_.getByteString(index);
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public Builder setExecutionRequirement(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExecutionRequirementIsMutable();
          executionRequirement_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public Builder addExecutionRequirement(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExecutionRequirementIsMutable();
          executionRequirement_.add(value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public Builder addAllExecutionRequirement(
            java.lang.Iterable<java.lang.String> values) {
          ensureExecutionRequirementIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, executionRequirement_);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public Builder clearExecutionRequirement() {
          executionRequirement_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Requirements on the execution environment for the execution of this tool,
         * to be passed as out-of-band "hints" to the execution backend.
         * Ex. "requires-darwin"
         * </pre>
         *
         * <code>repeated string execution_requirement = 3;</code>
         */
        public Builder addExecutionRequirementBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureExecutionRequirementIsMutable();
          executionRequirement_.add(value);
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface ArtifactNamePatternOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * The category of artifacts that this selection applies to.  This field
       * is compared against a list of categories defined in bazel. Example
       * categories include "linked_output" or "debug_symbols". An error is thrown
       * if no category is matched.
       * </pre>
       *
       * <code>required string category_name = 1;</code>
       */
      boolean hasCategoryName();
      /**
       * <pre>
       * The category of artifacts that this selection applies to.  This field
       * is compared against a list of categories defined in bazel. Example
       * categories include "linked_output" or "debug_symbols". An error is thrown
       * if no category is matched.
       * </pre>
       *
       * <code>required string category_name = 1;</code>
       */
      java.lang.String getCategoryName();
      /**
       * <pre>
       * The category of artifacts that this selection applies to.  This field
       * is compared against a list of categories defined in bazel. Example
       * categories include "linked_output" or "debug_symbols". An error is thrown
       * if no category is matched.
       * </pre>
       *
       * <code>required string category_name = 1;</code>
       */
      com.google.protobuf.ByteString
          getCategoryNameBytes();

      /**
       * <pre>
       * The pattern for creating the artifact for this selection.  The given
       * pattern is templated by bazel and then used to create an artifact in
       * a target-specific directory in bazel-bin.
       * </pre>
       *
       * <code>required string pattern = 2;</code>
       */
      boolean hasPattern();
      /**
       * <pre>
       * The pattern for creating the artifact for this selection.  The given
       * pattern is templated by bazel and then used to create an artifact in
       * a target-specific directory in bazel-bin.
       * </pre>
       *
       * <code>required string pattern = 2;</code>
       */
      java.lang.String getPattern();
      /**
       * <pre>
       * The pattern for creating the artifact for this selection.  The given
       * pattern is templated by bazel and then used to create an artifact in
       * a target-specific directory in bazel-bin.
       * </pre>
       *
       * <code>required string pattern = 2;</code>
       */
      com.google.protobuf.ByteString
          getPatternBytes();
    }
    /**
     * <pre>
     * The name for an artifact of a given category of input or output artifacts
     * to an action.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern}
     */
    public  static final class ArtifactNamePattern extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern)
        ArtifactNamePatternOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use ArtifactNamePattern.newBuilder() to construct.
      private ArtifactNamePattern(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private ArtifactNamePattern() {
        categoryName_ = "";
        pattern_ = "";
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private ArtifactNamePattern(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                categoryName_ = bs;
                break;
              }
              case 18: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000002;
                pattern_ = bs;
                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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder.class);
      }

      private int bitField0_;
      public static final int CATEGORY_NAME_FIELD_NUMBER = 1;
      private volatile java.lang.Object categoryName_;
      /**
       * <pre>
       * The category of artifacts that this selection applies to.  This field
       * is compared against a list of categories defined in bazel. Example
       * categories include "linked_output" or "debug_symbols". An error is thrown
       * if no category is matched.
       * </pre>
       *
       * <code>required string category_name = 1;</code>
       */
      public boolean hasCategoryName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The category of artifacts that this selection applies to.  This field
       * is compared against a list of categories defined in bazel. Example
       * categories include "linked_output" or "debug_symbols". An error is thrown
       * if no category is matched.
       * </pre>
       *
       * <code>required string category_name = 1;</code>
       */
      public java.lang.String getCategoryName() {
        java.lang.Object ref = categoryName_;
        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 (bs.isValidUtf8()) {
            categoryName_ = s;
          }
          return s;
        }
      }
      /**
       * <pre>
       * The category of artifacts that this selection applies to.  This field
       * is compared against a list of categories defined in bazel. Example
       * categories include "linked_output" or "debug_symbols". An error is thrown
       * if no category is matched.
       * </pre>
       *
       * <code>required string category_name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getCategoryNameBytes() {
        java.lang.Object ref = categoryName_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          categoryName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int PATTERN_FIELD_NUMBER = 2;
      private volatile java.lang.Object pattern_;
      /**
       * <pre>
       * The pattern for creating the artifact for this selection.  The given
       * pattern is templated by bazel and then used to create an artifact in
       * a target-specific directory in bazel-bin.
       * </pre>
       *
       * <code>required string pattern = 2;</code>
       */
      public boolean hasPattern() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The pattern for creating the artifact for this selection.  The given
       * pattern is templated by bazel and then used to create an artifact in
       * a target-specific directory in bazel-bin.
       * </pre>
       *
       * <code>required string pattern = 2;</code>
       */
      public java.lang.String getPattern() {
        java.lang.Object ref = pattern_;
        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 (bs.isValidUtf8()) {
            pattern_ = s;
          }
          return s;
        }
      }
      /**
       * <pre>
       * The pattern for creating the artifact for this selection.  The given
       * pattern is templated by bazel and then used to create an artifact in
       * a target-specific directory in bazel-bin.
       * </pre>
       *
       * <code>required string pattern = 2;</code>
       */
      public com.google.protobuf.ByteString
          getPatternBytes() {
        java.lang.Object ref = pattern_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          pattern_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        if (!hasCategoryName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasPattern()) {
          memoizedIsInitialized = 0;
          return false;
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, categoryName_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, pattern_);
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, categoryName_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, pattern_);
        }
        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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern) obj;

        boolean result = true;
        result = result && (hasCategoryName() == other.hasCategoryName());
        if (hasCategoryName()) {
          result = result && getCategoryName()
              .equals(other.getCategoryName());
        }
        result = result && (hasPattern() == other.hasPattern());
        if (hasPattern()) {
          result = result && getPattern()
              .equals(other.getPattern());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasCategoryName()) {
          hash = (37 * hash) + CATEGORY_NAME_FIELD_NUMBER;
          hash = (53 * hash) + getCategoryName().hashCode();
        }
        if (hasPattern()) {
          hash = (37 * hash) + PATTERN_FIELD_NUMBER;
          hash = (53 * hash) + getPattern().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * The name for an artifact of a given category of input or output artifacts
       * to an action.
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
          }
        }
        public Builder clear() {
          super.clear();
          categoryName_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          pattern_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.categoryName_ = categoryName_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.pattern_ = pattern_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.getDefaultInstance()) return this;
          if (other.hasCategoryName()) {
            bitField0_ |= 0x00000001;
            categoryName_ = other.categoryName_;
            onChanged();
          }
          if (other.hasPattern()) {
            bitField0_ |= 0x00000002;
            pattern_ = other.pattern_;
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          if (!hasCategoryName()) {
            return false;
          }
          if (!hasPattern()) {
            return false;
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.lang.Object categoryName_ = "";
        /**
         * <pre>
         * The category of artifacts that this selection applies to.  This field
         * is compared against a list of categories defined in bazel. Example
         * categories include "linked_output" or "debug_symbols". An error is thrown
         * if no category is matched.
         * </pre>
         *
         * <code>required string category_name = 1;</code>
         */
        public boolean hasCategoryName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * The category of artifacts that this selection applies to.  This field
         * is compared against a list of categories defined in bazel. Example
         * categories include "linked_output" or "debug_symbols". An error is thrown
         * if no category is matched.
         * </pre>
         *
         * <code>required string category_name = 1;</code>
         */
        public java.lang.String getCategoryName() {
          java.lang.Object ref = categoryName_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              categoryName_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * The category of artifacts that this selection applies to.  This field
         * is compared against a list of categories defined in bazel. Example
         * categories include "linked_output" or "debug_symbols". An error is thrown
         * if no category is matched.
         * </pre>
         *
         * <code>required string category_name = 1;</code>
         */
        public com.google.protobuf.ByteString
            getCategoryNameBytes() {
          java.lang.Object ref = categoryName_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            categoryName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * The category of artifacts that this selection applies to.  This field
         * is compared against a list of categories defined in bazel. Example
         * categories include "linked_output" or "debug_symbols". An error is thrown
         * if no category is matched.
         * </pre>
         *
         * <code>required string category_name = 1;</code>
         */
        public Builder setCategoryName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          categoryName_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The category of artifacts that this selection applies to.  This field
         * is compared against a list of categories defined in bazel. Example
         * categories include "linked_output" or "debug_symbols". An error is thrown
         * if no category is matched.
         * </pre>
         *
         * <code>required string category_name = 1;</code>
         */
        public Builder clearCategoryName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          categoryName_ = getDefaultInstance().getCategoryName();
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The category of artifacts that this selection applies to.  This field
         * is compared against a list of categories defined in bazel. Example
         * categories include "linked_output" or "debug_symbols". An error is thrown
         * if no category is matched.
         * </pre>
         *
         * <code>required string category_name = 1;</code>
         */
        public Builder setCategoryNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          categoryName_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object pattern_ = "";
        /**
         * <pre>
         * The pattern for creating the artifact for this selection.  The given
         * pattern is templated by bazel and then used to create an artifact in
         * a target-specific directory in bazel-bin.
         * </pre>
         *
         * <code>required string pattern = 2;</code>
         */
        public boolean hasPattern() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <pre>
         * The pattern for creating the artifact for this selection.  The given
         * pattern is templated by bazel and then used to create an artifact in
         * a target-specific directory in bazel-bin.
         * </pre>
         *
         * <code>required string pattern = 2;</code>
         */
        public java.lang.String getPattern() {
          java.lang.Object ref = pattern_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              pattern_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * The pattern for creating the artifact for this selection.  The given
         * pattern is templated by bazel and then used to create an artifact in
         * a target-specific directory in bazel-bin.
         * </pre>
         *
         * <code>required string pattern = 2;</code>
         */
        public com.google.protobuf.ByteString
            getPatternBytes() {
          java.lang.Object ref = pattern_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            pattern_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * The pattern for creating the artifact for this selection.  The given
         * pattern is templated by bazel and then used to create an artifact in
         * a target-specific directory in bazel-bin.
         * </pre>
         *
         * <code>required string pattern = 2;</code>
         */
        public Builder setPattern(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          pattern_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The pattern for creating the artifact for this selection.  The given
         * pattern is templated by bazel and then used to create an artifact in
         * a target-specific directory in bazel-bin.
         * </pre>
         *
         * <code>required string pattern = 2;</code>
         */
        public Builder clearPattern() {
          bitField0_ = (bitField0_ & ~0x00000002);
          pattern_ = getDefaultInstance().getPattern();
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The pattern for creating the artifact for this selection.  The given
         * pattern is templated by bazel and then used to create an artifact in
         * a target-specific directory in bazel-bin.
         * </pre>
         *
         * <code>required string pattern = 2;</code>
         */
        public Builder setPatternBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          pattern_ = value;
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    public interface ActionConfigOrBuilder extends
        // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * The name other features will use to activate this action config.  Can
       * be the same as action_name.
       * </pre>
       *
       * <code>required string config_name = 1;</code>
       */
      boolean hasConfigName();
      /**
       * <pre>
       * The name other features will use to activate this action config.  Can
       * be the same as action_name.
       * </pre>
       *
       * <code>required string config_name = 1;</code>
       */
      java.lang.String getConfigName();
      /**
       * <pre>
       * The name other features will use to activate this action config.  Can
       * be the same as action_name.
       * </pre>
       *
       * <code>required string config_name = 1;</code>
       */
      com.google.protobuf.ByteString
          getConfigNameBytes();

      /**
       * <pre>
       * The name of the blaze action that this config applies to, ex. 'c-compile'
       * or 'c-module-compile'.
       * </pre>
       *
       * <code>required string action_name = 2;</code>
       */
      boolean hasActionName();
      /**
       * <pre>
       * The name of the blaze action that this config applies to, ex. 'c-compile'
       * or 'c-module-compile'.
       * </pre>
       *
       * <code>required string action_name = 2;</code>
       */
      java.lang.String getActionName();
      /**
       * <pre>
       * The name of the blaze action that this config applies to, ex. 'c-compile'
       * or 'c-module-compile'.
       * </pre>
       *
       * <code>required string action_name = 2;</code>
       */
      com.google.protobuf.ByteString
          getActionNameBytes();

      /**
       * <pre>
       * If 'true', this feature is enabled unless a rule type explicitly marks it
       * as unsupported.  Such action_configs cannot be turned off from within a
       * BUILD file or the command line.
       * </pre>
       *
       * <code>optional bool enabled = 8;</code>
       */
      boolean hasEnabled();
      /**
       * <pre>
       * If 'true', this feature is enabled unless a rule type explicitly marks it
       * as unsupported.  Such action_configs cannot be turned off from within a
       * BUILD file or the command line.
       * </pre>
       *
       * <code>optional bool enabled = 8;</code>
       */
      boolean getEnabled();

      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool> 
          getToolList();
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool getTool(int index);
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      int getToolCount();
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder> 
          getToolOrBuilderList();
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder getToolOrBuilder(
          int index);

      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> 
          getFlagSetList();
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getFlagSet(int index);
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      int getFlagSetCount();
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> 
          getFlagSetOrBuilderList();
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder getFlagSetOrBuilder(
          int index);

      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> 
          getEnvSetList();
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getEnvSet(int index);
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      int getEnvSetCount();
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> 
          getEnvSetOrBuilderList();
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder getEnvSetOrBuilder(
          int index);

      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> 
          getRequiresList();
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getRequires(int index);
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      int getRequiresCount();
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> 
          getRequiresOrBuilderList();
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder getRequiresOrBuilder(
          int index);

      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this action config is enabled. If any of the implied features or action
       * configs cannot be enabled, this action config will (silently)
       * not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 7;</code>
       */
      java.util.List<java.lang.String>
          getImpliesList();
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this action config is enabled. If any of the implied features or action
       * configs cannot be enabled, this action config will (silently)
       * not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 7;</code>
       */
      int getImpliesCount();
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this action config is enabled. If any of the implied features or action
       * configs cannot be enabled, this action config will (silently)
       * not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 7;</code>
       */
      java.lang.String getImplies(int index);
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this action config is enabled. If any of the implied features or action
       * configs cannot be enabled, this action config will (silently)
       * not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 7;</code>
       */
      com.google.protobuf.ByteString
          getImpliesBytes(int index);
    }
    /**
     * <pre>
     * An action config corresponds to a blaze action, and allows selection of
     * a tool based on activated features.  Action configs come in two varieties:
     * automatic (the blaze action will exist whether or not the action config
     * is activated) and attachable (the blaze action will be added to the
     * action graph only if the action config is activated).
     * Action config activation occurs by the same semantics as features: a
     * feature can 'require' or 'imply' an action config in the same way that it
     * would another feature.
     * Next ID: 9
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig}
     */
    public  static final class ActionConfig extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig)
        ActionConfigOrBuilder {
    private static final long serialVersionUID = 0L;
      // Use ActionConfig.newBuilder() to construct.
      private ActionConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
        super(builder);
      }
      private ActionConfig() {
        configName_ = "";
        actionName_ = "";
        enabled_ = false;
        tool_ = java.util.Collections.emptyList();
        flagSet_ = java.util.Collections.emptyList();
        envSet_ = java.util.Collections.emptyList();
        requires_ = java.util.Collections.emptyList();
        implies_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      }

      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
      getUnknownFields() {
        return this.unknownFields;
      }
      private ActionConfig(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        this();
        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;
              default: {
                if (!parseUnknownField(
                    input, unknownFields, extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 10: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                configName_ = bs;
                break;
              }
              case 18: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000002;
                actionName_ = bs;
                break;
              }
              case 26: {
                if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                  tool_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool>();
                  mutable_bitField0_ |= 0x00000008;
                }
                tool_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.PARSER, extensionRegistry));
                break;
              }
              case 34: {
                if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                  flagSet_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet>();
                  mutable_bitField0_ |= 0x00000010;
                }
                flagSet_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.PARSER, extensionRegistry));
                break;
              }
              case 42: {
                if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                  envSet_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet>();
                  mutable_bitField0_ |= 0x00000020;
                }
                envSet_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.PARSER, extensionRegistry));
                break;
              }
              case 50: {
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                  requires_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet>();
                  mutable_bitField0_ |= 0x00000040;
                }
                requires_.add(
                    input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.PARSER, extensionRegistry));
                break;
              }
              case 58: {
                com.google.protobuf.ByteString bs = input.readBytes();
                if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                  implies_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000080;
                }
                implies_.add(bs);
                break;
              }
              case 64: {
                bitField0_ |= 0x00000004;
                enabled_ = input.readBool();
                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_ & 0x00000008) == 0x00000008)) {
            tool_ = java.util.Collections.unmodifiableList(tool_);
          }
          if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
            flagSet_ = java.util.Collections.unmodifiableList(flagSet_);
          }
          if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
            envSet_ = java.util.Collections.unmodifiableList(envSet_);
          }
          if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
            requires_ = java.util.Collections.unmodifiableList(requires_);
          }
          if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
            implies_ = implies_.getUnmodifiableView();
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder.class);
      }

      private int bitField0_;
      public static final int CONFIG_NAME_FIELD_NUMBER = 1;
      private volatile java.lang.Object configName_;
      /**
       * <pre>
       * The name other features will use to activate this action config.  Can
       * be the same as action_name.
       * </pre>
       *
       * <code>required string config_name = 1;</code>
       */
      public boolean hasConfigName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The name other features will use to activate this action config.  Can
       * be the same as action_name.
       * </pre>
       *
       * <code>required string config_name = 1;</code>
       */
      public java.lang.String getConfigName() {
        java.lang.Object ref = configName_;
        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 (bs.isValidUtf8()) {
            configName_ = s;
          }
          return s;
        }
      }
      /**
       * <pre>
       * The name other features will use to activate this action config.  Can
       * be the same as action_name.
       * </pre>
       *
       * <code>required string config_name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getConfigNameBytes() {
        java.lang.Object ref = configName_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          configName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int ACTION_NAME_FIELD_NUMBER = 2;
      private volatile java.lang.Object actionName_;
      /**
       * <pre>
       * The name of the blaze action that this config applies to, ex. 'c-compile'
       * or 'c-module-compile'.
       * </pre>
       *
       * <code>required string action_name = 2;</code>
       */
      public boolean hasActionName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The name of the blaze action that this config applies to, ex. 'c-compile'
       * or 'c-module-compile'.
       * </pre>
       *
       * <code>required string action_name = 2;</code>
       */
      public java.lang.String getActionName() {
        java.lang.Object ref = actionName_;
        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 (bs.isValidUtf8()) {
            actionName_ = s;
          }
          return s;
        }
      }
      /**
       * <pre>
       * The name of the blaze action that this config applies to, ex. 'c-compile'
       * or 'c-module-compile'.
       * </pre>
       *
       * <code>required string action_name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getActionNameBytes() {
        java.lang.Object ref = actionName_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          actionName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int ENABLED_FIELD_NUMBER = 8;
      private boolean enabled_;
      /**
       * <pre>
       * If 'true', this feature is enabled unless a rule type explicitly marks it
       * as unsupported.  Such action_configs cannot be turned off from within a
       * BUILD file or the command line.
       * </pre>
       *
       * <code>optional bool enabled = 8;</code>
       */
      public boolean hasEnabled() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * If 'true', this feature is enabled unless a rule type explicitly marks it
       * as unsupported.  Such action_configs cannot be turned off from within a
       * BUILD file or the command line.
       * </pre>
       *
       * <code>optional bool enabled = 8;</code>
       */
      public boolean getEnabled() {
        return enabled_;
      }

      public static final int TOOL_FIELD_NUMBER = 3;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool> tool_;
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool> getToolList() {
        return tool_;
      }
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder> 
          getToolOrBuilderList() {
        return tool_;
      }
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      public int getToolCount() {
        return tool_.size();
      }
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool getTool(int index) {
        return tool_.get(index);
      }
      /**
       * <pre>
       * The tool applied to the action will be the first Tool with a feature
       * set that matches the feature configuration.  An error will be thrown
       * if no tool matches a provided feature configuration - for that reason,
       * it's a good idea to provide a default tool with an empty feature set.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder getToolOrBuilder(
          int index) {
        return tool_.get(index);
      }

      public static final int FLAG_SET_FIELD_NUMBER = 4;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> flagSet_;
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> getFlagSetList() {
        return flagSet_;
      }
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> 
          getFlagSetOrBuilderList() {
        return flagSet_;
      }
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      public int getFlagSetCount() {
        return flagSet_.size();
      }
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getFlagSet(int index) {
        return flagSet_.get(index);
      }
      /**
       * <pre>
       * If the given action config is enabled, the flag sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder getFlagSetOrBuilder(
          int index) {
        return flagSet_.get(index);
      }

      public static final int ENV_SET_FIELD_NUMBER = 5;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> envSet_;
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> getEnvSetList() {
        return envSet_;
      }
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> 
          getEnvSetOrBuilderList() {
        return envSet_;
      }
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      public int getEnvSetCount() {
        return envSet_.size();
      }
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getEnvSet(int index) {
        return envSet_.get(index);
      }
      /**
       * <pre>
       * If the given action config is enabled, the env sets will be applied
       * to the corresponding action.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder getEnvSetOrBuilder(
          int index) {
        return envSet_.get(index);
      }

      public static final int REQUIRES_FIELD_NUMBER = 6;
      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> requires_;
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> getRequiresList() {
        return requires_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> 
          getRequiresOrBuilderList() {
        return requires_;
      }
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      public int getRequiresCount() {
        return requires_.size();
      }
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getRequires(int index) {
        return requires_.get(index);
      }
      /**
       * <pre>
       * A list of feature sets defining when this action config
       * is supported by the toolchain. The action config is supported if any of
       * the feature sets fully apply, that is, when all features of a
       * feature set are enabled.
       * If 'requires' is omitted, the action config is supported independently
       * of which other features are enabled.
       * Use this for example to filter actions depending on the build
       * mode enabled (opt / fastbuild / dbg).
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder getRequiresOrBuilder(
          int index) {
        return requires_.get(index);
      }

      public static final int IMPLIES_FIELD_NUMBER = 7;
      private com.google.protobuf.LazyStringList implies_;
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this action config is enabled. If any of the implied features or action
       * configs cannot be enabled, this action config will (silently)
       * not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 7;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getImpliesList() {
        return implies_;
      }
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this action config is enabled. If any of the implied features or action
       * configs cannot be enabled, this action config will (silently)
       * not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 7;</code>
       */
      public int getImpliesCount() {
        return implies_.size();
      }
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this action config is enabled. If any of the implied features or action
       * configs cannot be enabled, this action config will (silently)
       * not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 7;</code>
       */
      public java.lang.String getImplies(int index) {
        return implies_.get(index);
      }
      /**
       * <pre>
       * A list of features or action configs that are automatically enabled when
       * this action config is enabled. If any of the implied features or action
       * configs cannot be enabled, this action config will (silently)
       * not be enabled either.
       * </pre>
       *
       * <code>repeated string implies = 7;</code>
       */
      public com.google.protobuf.ByteString
          getImpliesBytes(int index) {
        return implies_.getByteString(index);
      }

      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized == 1) return true;
        if (isInitialized == 0) return false;

        if (!hasConfigName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        if (!hasActionName()) {
          memoizedIsInitialized = 0;
          return false;
        }
        for (int i = 0; i < getToolCount(); i++) {
          if (!getTool(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        for (int i = 0; i < getFlagSetCount(); i++) {
          if (!getFlagSet(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        for (int i = 0; i < getEnvSetCount(); i++) {
          if (!getEnvSet(i).isInitialized()) {
            memoizedIsInitialized = 0;
            return false;
          }
        }
        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, configName_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 2, actionName_);
        }
        for (int i = 0; i < tool_.size(); i++) {
          output.writeMessage(3, tool_.get(i));
        }
        for (int i = 0; i < flagSet_.size(); i++) {
          output.writeMessage(4, flagSet_.get(i));
        }
        for (int i = 0; i < envSet_.size(); i++) {
          output.writeMessage(5, envSet_.get(i));
        }
        for (int i = 0; i < requires_.size(); i++) {
          output.writeMessage(6, requires_.get(i));
        }
        for (int i = 0; i < implies_.size(); i++) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 7, implies_.getRaw(i));
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBool(8, enabled_);
        }
        unknownFields.writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, configName_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, actionName_);
        }
        for (int i = 0; i < tool_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, tool_.get(i));
        }
        for (int i = 0; i < flagSet_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, flagSet_.get(i));
        }
        for (int i = 0; i < envSet_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(5, envSet_.get(i));
        }
        for (int i = 0; i < requires_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(6, requires_.get(i));
        }
        {
          int dataSize = 0;
          for (int i = 0; i < implies_.size(); i++) {
            dataSize += computeStringSizeNoTag(implies_.getRaw(i));
          }
          size += dataSize;
          size += 1 * getImpliesList().size();
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBoolSize(8, enabled_);
        }
        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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig)) {
          return super.equals(obj);
        }
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig) obj;

        boolean result = true;
        result = result && (hasConfigName() == other.hasConfigName());
        if (hasConfigName()) {
          result = result && getConfigName()
              .equals(other.getConfigName());
        }
        result = result && (hasActionName() == other.hasActionName());
        if (hasActionName()) {
          result = result && getActionName()
              .equals(other.getActionName());
        }
        result = result && (hasEnabled() == other.hasEnabled());
        if (hasEnabled()) {
          result = result && (getEnabled()
              == other.getEnabled());
        }
        result = result && getToolList()
            .equals(other.getToolList());
        result = result && getFlagSetList()
            .equals(other.getFlagSetList());
        result = result && getEnvSetList()
            .equals(other.getEnvSetList());
        result = result && getRequiresList()
            .equals(other.getRequiresList());
        result = result && getImpliesList()
            .equals(other.getImpliesList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasConfigName()) {
          hash = (37 * hash) + CONFIG_NAME_FIELD_NUMBER;
          hash = (53 * hash) + getConfigName().hashCode();
        }
        if (hasActionName()) {
          hash = (37 * hash) + ACTION_NAME_FIELD_NUMBER;
          hash = (53 * hash) + getActionName().hashCode();
        }
        if (hasEnabled()) {
          hash = (37 * hash) + ENABLED_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
              getEnabled());
        }
        if (getToolCount() > 0) {
          hash = (37 * hash) + TOOL_FIELD_NUMBER;
          hash = (53 * hash) + getToolList().hashCode();
        }
        if (getFlagSetCount() > 0) {
          hash = (37 * hash) + FLAG_SET_FIELD_NUMBER;
          hash = (53 * hash) + getFlagSetList().hashCode();
        }
        if (getEnvSetCount() > 0) {
          hash = (37 * hash) + ENV_SET_FIELD_NUMBER;
          hash = (53 * hash) + getEnvSetList().hashCode();
        }
        if (getRequiresCount() > 0) {
          hash = (37 * hash) + REQUIRES_FIELD_NUMBER;
          hash = (53 * hash) + getRequiresList().hashCode();
        }
        if (getImpliesCount() > 0) {
          hash = (37 * hash) + IMPLIES_FIELD_NUMBER;
          hash = (53 * hash) + getImpliesList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(
          java.nio.ByteBuffer data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseDelimitedWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input);
      }
      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return com.google.protobuf.GeneratedMessageV3
            .parseWithIOException(PARSER, input, extensionRegistry);
      }

      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder() {
        return DEFAULT_INSTANCE.toBuilder();
      }
      public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig prototype) {
        return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() {
        return this == DEFAULT_INSTANCE
            ? new Builder() : new Builder().mergeFrom(this);
      }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * <pre>
       * An action config corresponds to a blaze action, and allows selection of
       * a tool based on activated features.  Action configs come in two varieties:
       * automatic (the blaze action will exist whether or not the action config
       * is activated) and attachable (the blaze action will be added to the
       * action graph only if the action config is activated).
       * Action config activation occurs by the same semantics as features: a
       * feature can 'require' or 'imply' an action config in the same way that it
       * would another feature.
       * Next ID: 9
       * </pre>
       *
       * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig)
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_descriptor;
        }

        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder.class);
        }

        // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessageV3
                  .alwaysUseFieldBuilders) {
            getToolFieldBuilder();
            getFlagSetFieldBuilder();
            getEnvSetFieldBuilder();
            getRequiresFieldBuilder();
          }
        }
        public Builder clear() {
          super.clear();
          configName_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          actionName_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          enabled_ = false;
          bitField0_ = (bitField0_ & ~0x00000004);
          if (toolBuilder_ == null) {
            tool_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            toolBuilder_.clear();
          }
          if (flagSetBuilder_ == null) {
            flagSet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            flagSetBuilder_.clear();
          }
          if (envSetBuilder_ == null) {
            envSet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            envSetBuilder_.clear();
          }
          if (requiresBuilder_ == null) {
            requires_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            requiresBuilder_.clear();
          }
          implies_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000080);
          return this;
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_descriptor;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig getDefaultInstanceForType() {
          return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.getDefaultInstance();
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig build() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig buildPartial() {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.configName_ = configName_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.actionName_ = actionName_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.enabled_ = enabled_;
          if (toolBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008)) {
              tool_ = java.util.Collections.unmodifiableList(tool_);
              bitField0_ = (bitField0_ & ~0x00000008);
            }
            result.tool_ = tool_;
          } else {
            result.tool_ = toolBuilder_.build();
          }
          if (flagSetBuilder_ == null) {
            if (((bitField0_ & 0x00000010) == 0x00000010)) {
              flagSet_ = java.util.Collections.unmodifiableList(flagSet_);
              bitField0_ = (bitField0_ & ~0x00000010);
            }
            result.flagSet_ = flagSet_;
          } else {
            result.flagSet_ = flagSetBuilder_.build();
          }
          if (envSetBuilder_ == null) {
            if (((bitField0_ & 0x00000020) == 0x00000020)) {
              envSet_ = java.util.Collections.unmodifiableList(envSet_);
              bitField0_ = (bitField0_ & ~0x00000020);
            }
            result.envSet_ = envSet_;
          } else {
            result.envSet_ = envSetBuilder_.build();
          }
          if (requiresBuilder_ == null) {
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
              requires_ = java.util.Collections.unmodifiableList(requires_);
              bitField0_ = (bitField0_ & ~0x00000040);
            }
            result.requires_ = requires_;
          } else {
            result.requires_ = requiresBuilder_.build();
          }
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            implies_ = implies_.getUnmodifiableView();
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.implies_ = implies_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder clone() {
          return (Builder) super.clone();
        }
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig) {
            return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig other) {
          if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.getDefaultInstance()) return this;
          if (other.hasConfigName()) {
            bitField0_ |= 0x00000001;
            configName_ = other.configName_;
            onChanged();
          }
          if (other.hasActionName()) {
            bitField0_ |= 0x00000002;
            actionName_ = other.actionName_;
            onChanged();
          }
          if (other.hasEnabled()) {
            setEnabled(other.getEnabled());
          }
          if (toolBuilder_ == null) {
            if (!other.tool_.isEmpty()) {
              if (tool_.isEmpty()) {
                tool_ = other.tool_;
                bitField0_ = (bitField0_ & ~0x00000008);
              } else {
                ensureToolIsMutable();
                tool_.addAll(other.tool_);
              }
              onChanged();
            }
          } else {
            if (!other.tool_.isEmpty()) {
              if (toolBuilder_.isEmpty()) {
                toolBuilder_.dispose();
                toolBuilder_ = null;
                tool_ = other.tool_;
                bitField0_ = (bitField0_ & ~0x00000008);
                toolBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getToolFieldBuilder() : null;
              } else {
                toolBuilder_.addAllMessages(other.tool_);
              }
            }
          }
          if (flagSetBuilder_ == null) {
            if (!other.flagSet_.isEmpty()) {
              if (flagSet_.isEmpty()) {
                flagSet_ = other.flagSet_;
                bitField0_ = (bitField0_ & ~0x00000010);
              } else {
                ensureFlagSetIsMutable();
                flagSet_.addAll(other.flagSet_);
              }
              onChanged();
            }
          } else {
            if (!other.flagSet_.isEmpty()) {
              if (flagSetBuilder_.isEmpty()) {
                flagSetBuilder_.dispose();
                flagSetBuilder_ = null;
                flagSet_ = other.flagSet_;
                bitField0_ = (bitField0_ & ~0x00000010);
                flagSetBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getFlagSetFieldBuilder() : null;
              } else {
                flagSetBuilder_.addAllMessages(other.flagSet_);
              }
            }
          }
          if (envSetBuilder_ == null) {
            if (!other.envSet_.isEmpty()) {
              if (envSet_.isEmpty()) {
                envSet_ = other.envSet_;
                bitField0_ = (bitField0_ & ~0x00000020);
              } else {
                ensureEnvSetIsMutable();
                envSet_.addAll(other.envSet_);
              }
              onChanged();
            }
          } else {
            if (!other.envSet_.isEmpty()) {
              if (envSetBuilder_.isEmpty()) {
                envSetBuilder_.dispose();
                envSetBuilder_ = null;
                envSet_ = other.envSet_;
                bitField0_ = (bitField0_ & ~0x00000020);
                envSetBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getEnvSetFieldBuilder() : null;
              } else {
                envSetBuilder_.addAllMessages(other.envSet_);
              }
            }
          }
          if (requiresBuilder_ == null) {
            if (!other.requires_.isEmpty()) {
              if (requires_.isEmpty()) {
                requires_ = other.requires_;
                bitField0_ = (bitField0_ & ~0x00000040);
              } else {
                ensureRequiresIsMutable();
                requires_.addAll(other.requires_);
              }
              onChanged();
            }
          } else {
            if (!other.requires_.isEmpty()) {
              if (requiresBuilder_.isEmpty()) {
                requiresBuilder_.dispose();
                requiresBuilder_ = null;
                requires_ = other.requires_;
                bitField0_ = (bitField0_ & ~0x00000040);
                requiresBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getRequiresFieldBuilder() : null;
              } else {
                requiresBuilder_.addAllMessages(other.requires_);
              }
            }
          }
          if (!other.implies_.isEmpty()) {
            if (implies_.isEmpty()) {
              implies_ = other.implies_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureImpliesIsMutable();
              implies_.addAll(other.implies_);
            }
            onChanged();
          }
          this.mergeUnknownFields(other.unknownFields);
          onChanged();
          return this;
        }

        public final boolean isInitialized() {
          if (!hasConfigName()) {
            return false;
          }
          if (!hasActionName()) {
            return false;
          }
          for (int i = 0; i < getToolCount(); i++) {
            if (!getTool(i).isInitialized()) {
              return false;
            }
          }
          for (int i = 0; i < getFlagSetCount(); i++) {
            if (!getFlagSet(i).isInitialized()) {
              return false;
            }
          }
          for (int i = 0; i < getEnvSetCount(); i++) {
            if (!getEnvSet(i).isInitialized()) {
              return false;
            }
          }
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.lang.Object configName_ = "";
        /**
         * <pre>
         * The name other features will use to activate this action config.  Can
         * be the same as action_name.
         * </pre>
         *
         * <code>required string config_name = 1;</code>
         */
        public boolean hasConfigName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * The name other features will use to activate this action config.  Can
         * be the same as action_name.
         * </pre>
         *
         * <code>required string config_name = 1;</code>
         */
        public java.lang.String getConfigName() {
          java.lang.Object ref = configName_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              configName_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * The name other features will use to activate this action config.  Can
         * be the same as action_name.
         * </pre>
         *
         * <code>required string config_name = 1;</code>
         */
        public com.google.protobuf.ByteString
            getConfigNameBytes() {
          java.lang.Object ref = configName_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            configName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * The name other features will use to activate this action config.  Can
         * be the same as action_name.
         * </pre>
         *
         * <code>required string config_name = 1;</code>
         */
        public Builder setConfigName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          configName_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The name other features will use to activate this action config.  Can
         * be the same as action_name.
         * </pre>
         *
         * <code>required string config_name = 1;</code>
         */
        public Builder clearConfigName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          configName_ = getDefaultInstance().getConfigName();
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The name other features will use to activate this action config.  Can
         * be the same as action_name.
         * </pre>
         *
         * <code>required string config_name = 1;</code>
         */
        public Builder setConfigNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          configName_ = value;
          onChanged();
          return this;
        }

        private java.lang.Object actionName_ = "";
        /**
         * <pre>
         * The name of the blaze action that this config applies to, ex. 'c-compile'
         * or 'c-module-compile'.
         * </pre>
         *
         * <code>required string action_name = 2;</code>
         */
        public boolean hasActionName() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <pre>
         * The name of the blaze action that this config applies to, ex. 'c-compile'
         * or 'c-module-compile'.
         * </pre>
         *
         * <code>required string action_name = 2;</code>
         */
        public java.lang.String getActionName() {
          java.lang.Object ref = actionName_;
          if (!(ref instanceof java.lang.String)) {
            com.google.protobuf.ByteString bs =
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              actionName_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * The name of the blaze action that this config applies to, ex. 'c-compile'
         * or 'c-module-compile'.
         * </pre>
         *
         * <code>required string action_name = 2;</code>
         */
        public com.google.protobuf.ByteString
            getActionNameBytes() {
          java.lang.Object ref = actionName_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            actionName_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * The name of the blaze action that this config applies to, ex. 'c-compile'
         * or 'c-module-compile'.
         * </pre>
         *
         * <code>required string action_name = 2;</code>
         */
        public Builder setActionName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          actionName_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The name of the blaze action that this config applies to, ex. 'c-compile'
         * or 'c-module-compile'.
         * </pre>
         *
         * <code>required string action_name = 2;</code>
         */
        public Builder clearActionName() {
          bitField0_ = (bitField0_ & ~0x00000002);
          actionName_ = getDefaultInstance().getActionName();
          onChanged();
          return this;
        }
        /**
         * <pre>
         * The name of the blaze action that this config applies to, ex. 'c-compile'
         * or 'c-module-compile'.
         * </pre>
         *
         * <code>required string action_name = 2;</code>
         */
        public Builder setActionNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          actionName_ = value;
          onChanged();
          return this;
        }

        private boolean enabled_ ;
        /**
         * <pre>
         * If 'true', this feature is enabled unless a rule type explicitly marks it
         * as unsupported.  Such action_configs cannot be turned off from within a
         * BUILD file or the command line.
         * </pre>
         *
         * <code>optional bool enabled = 8;</code>
         */
        public boolean hasEnabled() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <pre>
         * If 'true', this feature is enabled unless a rule type explicitly marks it
         * as unsupported.  Such action_configs cannot be turned off from within a
         * BUILD file or the command line.
         * </pre>
         *
         * <code>optional bool enabled = 8;</code>
         */
        public boolean getEnabled() {
          return enabled_;
        }
        /**
         * <pre>
         * If 'true', this feature is enabled unless a rule type explicitly marks it
         * as unsupported.  Such action_configs cannot be turned off from within a
         * BUILD file or the command line.
         * </pre>
         *
         * <code>optional bool enabled = 8;</code>
         */
        public Builder setEnabled(boolean value) {
          bitField0_ |= 0x00000004;
          enabled_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * If 'true', this feature is enabled unless a rule type explicitly marks it
         * as unsupported.  Such action_configs cannot be turned off from within a
         * BUILD file or the command line.
         * </pre>
         *
         * <code>optional bool enabled = 8;</code>
         */
        public Builder clearEnabled() {
          bitField0_ = (bitField0_ & ~0x00000004);
          enabled_ = false;
          onChanged();
          return this;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool> tool_ =
          java.util.Collections.emptyList();
        private void ensureToolIsMutable() {
          if (!((bitField0_ & 0x00000008) == 0x00000008)) {
            tool_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool>(tool_);
            bitField0_ |= 0x00000008;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder> toolBuilder_;

        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool> getToolList() {
          if (toolBuilder_ == null) {
            return java.util.Collections.unmodifiableList(tool_);
          } else {
            return toolBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public int getToolCount() {
          if (toolBuilder_ == null) {
            return tool_.size();
          } else {
            return toolBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool getTool(int index) {
          if (toolBuilder_ == null) {
            return tool_.get(index);
          } else {
            return toolBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder setTool(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool value) {
          if (toolBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureToolIsMutable();
            tool_.set(index, value);
            onChanged();
          } else {
            toolBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder setTool(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder builderForValue) {
          if (toolBuilder_ == null) {
            ensureToolIsMutable();
            tool_.set(index, builderForValue.build());
            onChanged();
          } else {
            toolBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder addTool(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool value) {
          if (toolBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureToolIsMutable();
            tool_.add(value);
            onChanged();
          } else {
            toolBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder addTool(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool value) {
          if (toolBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureToolIsMutable();
            tool_.add(index, value);
            onChanged();
          } else {
            toolBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder addTool(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder builderForValue) {
          if (toolBuilder_ == null) {
            ensureToolIsMutable();
            tool_.add(builderForValue.build());
            onChanged();
          } else {
            toolBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder addTool(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder builderForValue) {
          if (toolBuilder_ == null) {
            ensureToolIsMutable();
            tool_.add(index, builderForValue.build());
            onChanged();
          } else {
            toolBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder addAllTool(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool> values) {
          if (toolBuilder_ == null) {
            ensureToolIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, tool_);
            onChanged();
          } else {
            toolBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder clearTool() {
          if (toolBuilder_ == null) {
            tool_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000008);
            onChanged();
          } else {
            toolBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public Builder removeTool(int index) {
          if (toolBuilder_ == null) {
            ensureToolIsMutable();
            tool_.remove(index);
            onChanged();
          } else {
            toolBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder getToolBuilder(
            int index) {
          return getToolFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder getToolOrBuilder(
            int index) {
          if (toolBuilder_ == null) {
            return tool_.get(index);  } else {
            return toolBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder> 
             getToolOrBuilderList() {
          if (toolBuilder_ != null) {
            return toolBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(tool_);
          }
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder addToolBuilder() {
          return getToolFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.getDefaultInstance());
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder addToolBuilder(
            int index) {
          return getToolFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.getDefaultInstance());
        }
        /**
         * <pre>
         * The tool applied to the action will be the first Tool with a feature
         * set that matches the feature configuration.  An error will be thrown
         * if no tool matches a provided feature configuration - for that reason,
         * it's a good idea to provide a default tool with an empty feature set.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Tool tool = 3;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder> 
             getToolBuilderList() {
          return getToolFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder> 
            getToolFieldBuilder() {
          if (toolBuilder_ == null) {
            toolBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Tool.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ToolOrBuilder>(
                    tool_,
                    ((bitField0_ & 0x00000008) == 0x00000008),
                    getParentForChildren(),
                    isClean());
            tool_ = null;
          }
          return toolBuilder_;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> flagSet_ =
          java.util.Collections.emptyList();
        private void ensureFlagSetIsMutable() {
          if (!((bitField0_ & 0x00000010) == 0x00000010)) {
            flagSet_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet>(flagSet_);
            bitField0_ |= 0x00000010;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> flagSetBuilder_;

        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> getFlagSetList() {
          if (flagSetBuilder_ == null) {
            return java.util.Collections.unmodifiableList(flagSet_);
          } else {
            return flagSetBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public int getFlagSetCount() {
          if (flagSetBuilder_ == null) {
            return flagSet_.size();
          } else {
            return flagSetBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet getFlagSet(int index) {
          if (flagSetBuilder_ == null) {
            return flagSet_.get(index);
          } else {
            return flagSetBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder setFlagSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet value) {
          if (flagSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagSetIsMutable();
            flagSet_.set(index, value);
            onChanged();
          } else {
            flagSetBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder setFlagSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder builderForValue) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            flagSet_.set(index, builderForValue.build());
            onChanged();
          } else {
            flagSetBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder addFlagSet(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet value) {
          if (flagSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagSetIsMutable();
            flagSet_.add(value);
            onChanged();
          } else {
            flagSetBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder addFlagSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet value) {
          if (flagSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFlagSetIsMutable();
            flagSet_.add(index, value);
            onChanged();
          } else {
            flagSetBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder addFlagSet(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder builderForValue) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            flagSet_.add(builderForValue.build());
            onChanged();
          } else {
            flagSetBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder addFlagSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder builderForValue) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            flagSet_.add(index, builderForValue.build());
            onChanged();
          } else {
            flagSetBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder addAllFlagSet(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet> values) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, flagSet_);
            onChanged();
          } else {
            flagSetBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder clearFlagSet() {
          if (flagSetBuilder_ == null) {
            flagSet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000010);
            onChanged();
          } else {
            flagSetBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public Builder removeFlagSet(int index) {
          if (flagSetBuilder_ == null) {
            ensureFlagSetIsMutable();
            flagSet_.remove(index);
            onChanged();
          } else {
            flagSetBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder getFlagSetBuilder(
            int index) {
          return getFlagSetFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder getFlagSetOrBuilder(
            int index) {
          if (flagSetBuilder_ == null) {
            return flagSet_.get(index);  } else {
            return flagSetBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> 
             getFlagSetOrBuilderList() {
          if (flagSetBuilder_ != null) {
            return flagSetBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(flagSet_);
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder addFlagSetBuilder() {
          return getFlagSetFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.getDefaultInstance());
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder addFlagSetBuilder(
            int index) {
          return getFlagSetFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.getDefaultInstance());
        }
        /**
         * <pre>
         * If the given action config is enabled, the flag sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FlagSet flag_set = 4;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder> 
             getFlagSetBuilderList() {
          return getFlagSetFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder> 
            getFlagSetFieldBuilder() {
          if (flagSetBuilder_ == null) {
            flagSetBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FlagSetOrBuilder>(
                    flagSet_,
                    ((bitField0_ & 0x00000010) == 0x00000010),
                    getParentForChildren(),
                    isClean());
            flagSet_ = null;
          }
          return flagSetBuilder_;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> envSet_ =
          java.util.Collections.emptyList();
        private void ensureEnvSetIsMutable() {
          if (!((bitField0_ & 0x00000020) == 0x00000020)) {
            envSet_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet>(envSet_);
            bitField0_ |= 0x00000020;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> envSetBuilder_;

        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> getEnvSetList() {
          if (envSetBuilder_ == null) {
            return java.util.Collections.unmodifiableList(envSet_);
          } else {
            return envSetBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public int getEnvSetCount() {
          if (envSetBuilder_ == null) {
            return envSet_.size();
          } else {
            return envSetBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet getEnvSet(int index) {
          if (envSetBuilder_ == null) {
            return envSet_.get(index);
          } else {
            return envSetBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder setEnvSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet value) {
          if (envSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvSetIsMutable();
            envSet_.set(index, value);
            onChanged();
          } else {
            envSetBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder setEnvSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder builderForValue) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            envSet_.set(index, builderForValue.build());
            onChanged();
          } else {
            envSetBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder addEnvSet(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet value) {
          if (envSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvSetIsMutable();
            envSet_.add(value);
            onChanged();
          } else {
            envSetBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder addEnvSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet value) {
          if (envSetBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEnvSetIsMutable();
            envSet_.add(index, value);
            onChanged();
          } else {
            envSetBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder addEnvSet(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder builderForValue) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            envSet_.add(builderForValue.build());
            onChanged();
          } else {
            envSetBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder addEnvSet(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder builderForValue) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            envSet_.add(index, builderForValue.build());
            onChanged();
          } else {
            envSetBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder addAllEnvSet(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet> values) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, envSet_);
            onChanged();
          } else {
            envSetBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder clearEnvSet() {
          if (envSetBuilder_ == null) {
            envSet_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000020);
            onChanged();
          } else {
            envSetBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public Builder removeEnvSet(int index) {
          if (envSetBuilder_ == null) {
            ensureEnvSetIsMutable();
            envSet_.remove(index);
            onChanged();
          } else {
            envSetBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder getEnvSetBuilder(
            int index) {
          return getEnvSetFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder getEnvSetOrBuilder(
            int index) {
          if (envSetBuilder_ == null) {
            return envSet_.get(index);  } else {
            return envSetBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> 
             getEnvSetOrBuilderList() {
          if (envSetBuilder_ != null) {
            return envSetBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(envSet_);
          }
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder addEnvSetBuilder() {
          return getEnvSetFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.getDefaultInstance());
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder addEnvSetBuilder(
            int index) {
          return getEnvSetFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.getDefaultInstance());
        }
        /**
         * <pre>
         * If the given action config is enabled, the env sets will be applied
         * to the corresponding action.
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.EnvSet env_set = 5;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder> 
             getEnvSetBuilderList() {
          return getEnvSetFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder> 
            getEnvSetFieldBuilder() {
          if (envSetBuilder_ == null) {
            envSetBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.EnvSetOrBuilder>(
                    envSet_,
                    ((bitField0_ & 0x00000020) == 0x00000020),
                    getParentForChildren(),
                    isClean());
            envSet_ = null;
          }
          return envSetBuilder_;
        }

        private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> requires_ =
          java.util.Collections.emptyList();
        private void ensureRequiresIsMutable() {
          if (!((bitField0_ & 0x00000040) == 0x00000040)) {
            requires_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet>(requires_);
            bitField0_ |= 0x00000040;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> requiresBuilder_;

        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> getRequiresList() {
          if (requiresBuilder_ == null) {
            return java.util.Collections.unmodifiableList(requires_);
          } else {
            return requiresBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public int getRequiresCount() {
          if (requiresBuilder_ == null) {
            return requires_.size();
          } else {
            return requiresBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet getRequires(int index) {
          if (requiresBuilder_ == null) {
            return requires_.get(index);
          } else {
            return requiresBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder setRequires(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet value) {
          if (requiresBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRequiresIsMutable();
            requires_.set(index, value);
            onChanged();
          } else {
            requiresBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder setRequires(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder builderForValue) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            requires_.set(index, builderForValue.build());
            onChanged();
          } else {
            requiresBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder addRequires(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet value) {
          if (requiresBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRequiresIsMutable();
            requires_.add(value);
            onChanged();
          } else {
            requiresBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder addRequires(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet value) {
          if (requiresBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRequiresIsMutable();
            requires_.add(index, value);
            onChanged();
          } else {
            requiresBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder addRequires(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder builderForValue) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            requires_.add(builderForValue.build());
            onChanged();
          } else {
            requiresBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder addRequires(
            int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder builderForValue) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            requires_.add(index, builderForValue.build());
            onChanged();
          } else {
            requiresBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder addAllRequires(
            java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet> values) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, requires_);
            onChanged();
          } else {
            requiresBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder clearRequires() {
          if (requiresBuilder_ == null) {
            requires_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000040);
            onChanged();
          } else {
            requiresBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public Builder removeRequires(int index) {
          if (requiresBuilder_ == null) {
            ensureRequiresIsMutable();
            requires_.remove(index);
            onChanged();
          } else {
            requiresBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder getRequiresBuilder(
            int index) {
          return getRequiresFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder getRequiresOrBuilder(
            int index) {
          if (requiresBuilder_ == null) {
            return requires_.get(index);  } else {
            return requiresBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> 
             getRequiresOrBuilderList() {
          if (requiresBuilder_ != null) {
            return requiresBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(requires_);
          }
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder addRequiresBuilder() {
          return getRequiresFieldBuilder().addBuilder(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder addRequiresBuilder(
            int index) {
          return getRequiresFieldBuilder().addBuilder(
              index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.getDefaultInstance());
        }
        /**
         * <pre>
         * A list of feature sets defining when this action config
         * is supported by the toolchain. The action config is supported if any of
         * the feature sets fully apply, that is, when all features of a
         * feature set are enabled.
         * If 'requires' is omitted, the action config is supported independently
         * of which other features are enabled.
         * Use this for example to filter actions depending on the build
         * mode enabled (opt / fastbuild / dbg).
         * </pre>
         *
         * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.FeatureSet requires = 6;</code>
         */
        public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder> 
             getRequiresBuilderList() {
          return getRequiresFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder> 
            getRequiresFieldBuilder() {
          if (requiresBuilder_ == null) {
            requiresBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSet.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureSetOrBuilder>(
                    requires_,
                    ((bitField0_ & 0x00000040) == 0x00000040),
                    getParentForChildren(),
                    isClean());
            requires_ = null;
          }
          return requiresBuilder_;
        }

        private com.google.protobuf.LazyStringList implies_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureImpliesIsMutable() {
          if (!((bitField0_ & 0x00000080) == 0x00000080)) {
            implies_ = new com.google.protobuf.LazyStringArrayList(implies_);
            bitField0_ |= 0x00000080;
           }
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public com.google.protobuf.ProtocolStringList
            getImpliesList() {
          return implies_.getUnmodifiableView();
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public int getImpliesCount() {
          return implies_.size();
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public java.lang.String getImplies(int index) {
          return implies_.get(index);
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public com.google.protobuf.ByteString
            getImpliesBytes(int index) {
          return implies_.getByteString(index);
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public Builder setImplies(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureImpliesIsMutable();
          implies_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public Builder addImplies(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureImpliesIsMutable();
          implies_.add(value);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public Builder addAllImplies(
            java.lang.Iterable<java.lang.String> values) {
          ensureImpliesIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, implies_);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public Builder clearImplies() {
          implies_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
          return this;
        }
        /**
         * <pre>
         * A list of features or action configs that are automatically enabled when
         * this action config is enabled. If any of the implied features or action
         * configs cannot be enabled, this action config will (silently)
         * not be enabled either.
         * </pre>
         *
         * <code>repeated string implies = 7;</code>
         */
        public Builder addImpliesBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureImpliesIsMutable();
          implies_.add(value);
          onChanged();
          return this;
        }
        public final Builder setUnknownFields(
            final com.google.protobuf.UnknownFieldSet unknownFields) {
          return super.setUnknownFields(unknownFields);
        }

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


        // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig)
      }

      // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig)
      private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig();
      }

      public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

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

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

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

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int FEATURE_FIELD_NUMBER = 50;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature> feature_;
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature> getFeatureList() {
      return feature_;
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder> 
        getFeatureOrBuilderList() {
      return feature_;
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    public int getFeatureCount() {
      return feature_.size();
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature getFeature(int index) {
      return feature_.get(index);
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder getFeatureOrBuilder(
        int index) {
      return feature_.get(index);
    }

    public static final int ACTION_CONFIG_FIELD_NUMBER = 53;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig> actionConfig_;
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig> getActionConfigList() {
      return actionConfig_;
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder> 
        getActionConfigOrBuilderList() {
      return actionConfig_;
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    public int getActionConfigCount() {
      return actionConfig_.size();
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig getActionConfig(int index) {
      return actionConfig_.get(index);
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder getActionConfigOrBuilder(
        int index) {
      return actionConfig_.get(index);
    }

    public static final int ARTIFACT_NAME_PATTERN_FIELD_NUMBER = 54;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern> artifactNamePattern_;
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern> getArtifactNamePatternList() {
      return artifactNamePattern_;
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder> 
        getArtifactNamePatternOrBuilderList() {
      return artifactNamePattern_;
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    public int getArtifactNamePatternCount() {
      return artifactNamePattern_.size();
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern getArtifactNamePattern(int index) {
      return artifactNamePattern_.get(index);
    }
    /**
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder getArtifactNamePatternOrBuilder(
        int index) {
      return artifactNamePattern_.get(index);
    }

    public static final int TOOLCHAIN_IDENTIFIER_FIELD_NUMBER = 1;
    private volatile java.lang.Object toolchainIdentifier_;
    /**
     * <pre>
     * The unique identifier of the toolchain within the crosstool release. It
     * must be possible to use this as a directory name in a path.
     * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
     * </pre>
     *
     * <code>required string toolchain_identifier = 1;</code>
     */
    public boolean hasToolchainIdentifier() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * The unique identifier of the toolchain within the crosstool release. It
     * must be possible to use this as a directory name in a path.
     * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
     * </pre>
     *
     * <code>required string toolchain_identifier = 1;</code>
     */
    public java.lang.String getToolchainIdentifier() {
      java.lang.Object ref = toolchainIdentifier_;
      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 (bs.isValidUtf8()) {
          toolchainIdentifier_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The unique identifier of the toolchain within the crosstool release. It
     * must be possible to use this as a directory name in a path.
     * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
     * </pre>
     *
     * <code>required string toolchain_identifier = 1;</code>
     */
    public com.google.protobuf.ByteString
        getToolchainIdentifierBytes() {
      java.lang.Object ref = toolchainIdentifier_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        toolchainIdentifier_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int HOST_SYSTEM_NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object hostSystemName_;
    /**
     * <pre>
     * A basic toolchain description.
     * </pre>
     *
     * <code>required string host_system_name = 2;</code>
     */
    public boolean hasHostSystemName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * A basic toolchain description.
     * </pre>
     *
     * <code>required string host_system_name = 2;</code>
     */
    public java.lang.String getHostSystemName() {
      java.lang.Object ref = hostSystemName_;
      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 (bs.isValidUtf8()) {
          hostSystemName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * A basic toolchain description.
     * </pre>
     *
     * <code>required string host_system_name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getHostSystemNameBytes() {
      java.lang.Object ref = hostSystemName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        hostSystemName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_SYSTEM_NAME_FIELD_NUMBER = 3;
    private volatile java.lang.Object targetSystemName_;
    /**
     * <code>required string target_system_name = 3;</code>
     */
    public boolean hasTargetSystemName() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>required string target_system_name = 3;</code>
     */
    public java.lang.String getTargetSystemName() {
      java.lang.Object ref = targetSystemName_;
      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 (bs.isValidUtf8()) {
          targetSystemName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string target_system_name = 3;</code>
     */
    public com.google.protobuf.ByteString
        getTargetSystemNameBytes() {
      java.lang.Object ref = targetSystemName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        targetSystemName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_CPU_FIELD_NUMBER = 4;
    private volatile java.lang.Object targetCpu_;
    /**
     * <code>required string target_cpu = 4;</code>
     */
    public boolean hasTargetCpu() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>required string target_cpu = 4;</code>
     */
    public java.lang.String getTargetCpu() {
      java.lang.Object ref = targetCpu_;
      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 (bs.isValidUtf8()) {
          targetCpu_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string target_cpu = 4;</code>
     */
    public com.google.protobuf.ByteString
        getTargetCpuBytes() {
      java.lang.Object ref = targetCpu_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        targetCpu_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TARGET_LIBC_FIELD_NUMBER = 5;
    private volatile java.lang.Object targetLibc_;
    /**
     * <code>required string target_libc = 5;</code>
     */
    public boolean hasTargetLibc() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>required string target_libc = 5;</code>
     */
    public java.lang.String getTargetLibc() {
      java.lang.Object ref = targetLibc_;
      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 (bs.isValidUtf8()) {
          targetLibc_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string target_libc = 5;</code>
     */
    public com.google.protobuf.ByteString
        getTargetLibcBytes() {
      java.lang.Object ref = targetLibc_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        targetLibc_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int COMPILER_FIELD_NUMBER = 6;
    private volatile java.lang.Object compiler_;
    /**
     * <code>required string compiler = 6;</code>
     */
    public boolean hasCompiler() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>required string compiler = 6;</code>
     */
    public java.lang.String getCompiler() {
      java.lang.Object ref = compiler_;
      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 (bs.isValidUtf8()) {
          compiler_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string compiler = 6;</code>
     */
    public com.google.protobuf.ByteString
        getCompilerBytes() {
      java.lang.Object ref = compiler_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        compiler_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ABI_VERSION_FIELD_NUMBER = 7;
    private volatile java.lang.Object abiVersion_;
    /**
     * <code>required string abi_version = 7;</code>
     */
    public boolean hasAbiVersion() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>required string abi_version = 7;</code>
     */
    public java.lang.String getAbiVersion() {
      java.lang.Object ref = abiVersion_;
      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 (bs.isValidUtf8()) {
          abiVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string abi_version = 7;</code>
     */
    public com.google.protobuf.ByteString
        getAbiVersionBytes() {
      java.lang.Object ref = abiVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        abiVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ABI_LIBC_VERSION_FIELD_NUMBER = 8;
    private volatile java.lang.Object abiLibcVersion_;
    /**
     * <code>required string abi_libc_version = 8;</code>
     */
    public boolean hasAbiLibcVersion() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>required string abi_libc_version = 8;</code>
     */
    public java.lang.String getAbiLibcVersion() {
      java.lang.Object ref = abiLibcVersion_;
      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 (bs.isValidUtf8()) {
          abiLibcVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string abi_libc_version = 8;</code>
     */
    public com.google.protobuf.ByteString
        getAbiLibcVersionBytes() {
      java.lang.Object ref = abiLibcVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        abiLibcVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TOOL_PATH_FIELD_NUMBER = 9;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath> toolPath_;
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath> getToolPathList() {
      return toolPath_;
    }
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder> 
        getToolPathOrBuilderList() {
      return toolPath_;
    }
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    public int getToolPathCount() {
      return toolPath_.size();
    }
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath getToolPath(int index) {
      return toolPath_.get(index);
    }
    /**
     * <pre>
     * Tool locations. Relative paths are resolved relative to the configuration
     * file directory.
     * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
     * needs the tool.
     * TODO(b/27903698) migrate to ActionConfig.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder getToolPathOrBuilder(
        int index) {
      return toolPath_.get(index);
    }

    public static final int SUPPORTS_GOLD_LINKER_FIELD_NUMBER = 10;
    private boolean supportsGoldLinker_;
    /**
     * <pre>
     * Feature flags.
     * TODO(bazel-team): Sink those into 'Feature' instances.
     * </pre>
     *
     * <code>optional bool supports_gold_linker = 10 [default = false];</code>
     */
    public boolean hasSupportsGoldLinker() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <pre>
     * Feature flags.
     * TODO(bazel-team): Sink those into 'Feature' instances.
     * </pre>
     *
     * <code>optional bool supports_gold_linker = 10 [default = false];</code>
     */
    public boolean getSupportsGoldLinker() {
      return supportsGoldLinker_;
    }

    public static final int SUPPORTS_THIN_ARCHIVES_FIELD_NUMBER = 11;
    private boolean supportsThinArchives_;
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>optional bool supports_thin_archives = 11 [default = false];</code>
     */
    public boolean hasSupportsThinArchives() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>optional bool supports_thin_archives = 11 [default = false];</code>
     */
    public boolean getSupportsThinArchives() {
      return supportsThinArchives_;
    }

    public static final int SUPPORTS_START_END_LIB_FIELD_NUMBER = 28;
    private boolean supportsStartEndLib_;
    /**
     * <code>optional bool supports_start_end_lib = 28 [default = false];</code>
     */
    public boolean hasSupportsStartEndLib() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional bool supports_start_end_lib = 28 [default = false];</code>
     */
    public boolean getSupportsStartEndLib() {
      return supportsStartEndLib_;
    }

    public static final int SUPPORTS_INTERFACE_SHARED_OBJECTS_FIELD_NUMBER = 32;
    private boolean supportsInterfaceSharedObjects_;
    /**
     * <code>optional bool supports_interface_shared_objects = 32 [default = false];</code>
     */
    public boolean hasSupportsInterfaceSharedObjects() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional bool supports_interface_shared_objects = 32 [default = false];</code>
     */
    public boolean getSupportsInterfaceSharedObjects() {
      return supportsInterfaceSharedObjects_;
    }

    public static final int SUPPORTS_EMBEDDED_RUNTIMES_FIELD_NUMBER = 40;
    private boolean supportsEmbeddedRuntimes_;
    /**
     * <code>optional bool supports_embedded_runtimes = 40 [default = false];</code>
     */
    public boolean hasSupportsEmbeddedRuntimes() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional bool supports_embedded_runtimes = 40 [default = false];</code>
     */
    public boolean getSupportsEmbeddedRuntimes() {
      return supportsEmbeddedRuntimes_;
    }

    public static final int STATIC_RUNTIMES_FILEGROUP_FIELD_NUMBER = 45;
    private volatile java.lang.Object staticRuntimesFilegroup_;
    /**
     * <pre>
     * If specified, Blaze finds statically linked / dynamically linked runtime
     * libraries in the declared crosstool filegroup. Otherwise, Blaze
     * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
     * </pre>
     *
     * <code>optional string static_runtimes_filegroup = 45;</code>
     */
    public boolean hasStaticRuntimesFilegroup() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <pre>
     * If specified, Blaze finds statically linked / dynamically linked runtime
     * libraries in the declared crosstool filegroup. Otherwise, Blaze
     * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
     * </pre>
     *
     * <code>optional string static_runtimes_filegroup = 45;</code>
     */
    public java.lang.String getStaticRuntimesFilegroup() {
      java.lang.Object ref = staticRuntimesFilegroup_;
      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 (bs.isValidUtf8()) {
          staticRuntimesFilegroup_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * If specified, Blaze finds statically linked / dynamically linked runtime
     * libraries in the declared crosstool filegroup. Otherwise, Blaze
     * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
     * </pre>
     *
     * <code>optional string static_runtimes_filegroup = 45;</code>
     */
    public com.google.protobuf.ByteString
        getStaticRuntimesFilegroupBytes() {
      java.lang.Object ref = staticRuntimesFilegroup_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        staticRuntimesFilegroup_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DYNAMIC_RUNTIMES_FILEGROUP_FIELD_NUMBER = 46;
    private volatile java.lang.Object dynamicRuntimesFilegroup_;
    /**
     * <code>optional string dynamic_runtimes_filegroup = 46;</code>
     */
    public boolean hasDynamicRuntimesFilegroup() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <code>optional string dynamic_runtimes_filegroup = 46;</code>
     */
    public java.lang.String getDynamicRuntimesFilegroup() {
      java.lang.Object ref = dynamicRuntimesFilegroup_;
      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 (bs.isValidUtf8()) {
          dynamicRuntimesFilegroup_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string dynamic_runtimes_filegroup = 46;</code>
     */
    public com.google.protobuf.ByteString
        getDynamicRuntimesFilegroupBytes() {
      java.lang.Object ref = dynamicRuntimesFilegroup_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        dynamicRuntimesFilegroup_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SUPPORTS_INCREMENTAL_LINKER_FIELD_NUMBER = 41;
    private boolean supportsIncrementalLinker_;
    /**
     * <code>optional bool supports_incremental_linker = 41 [default = false];</code>
     */
    public boolean hasSupportsIncrementalLinker() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     * <code>optional bool supports_incremental_linker = 41 [default = false];</code>
     */
    public boolean getSupportsIncrementalLinker() {
      return supportsIncrementalLinker_;
    }

    public static final int SUPPORTS_NORMALIZING_AR_FIELD_NUMBER = 26;
    private boolean supportsNormalizingAr_;
    /**
     * <pre>
     * This should be true, if the toolchain supports the D flag to ar, which
     * makes it output normalized archives that don't contain timestamps.
     * </pre>
     *
     * <code>optional bool supports_normalizing_ar = 26 [default = false];</code>
     */
    public boolean hasSupportsNormalizingAr() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     * <pre>
     * This should be true, if the toolchain supports the D flag to ar, which
     * makes it output normalized archives that don't contain timestamps.
     * </pre>
     *
     * <code>optional bool supports_normalizing_ar = 26 [default = false];</code>
     */
    public boolean getSupportsNormalizingAr() {
      return supportsNormalizingAr_;
    }

    public static final int SUPPORTS_FISSION_FIELD_NUMBER = 43;
    private boolean supportsFission_;
    /**
     * <code>optional bool supports_fission = 43 [default = false];</code>
     */
    public boolean hasSupportsFission() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     * <code>optional bool supports_fission = 43 [default = false];</code>
     */
    public boolean getSupportsFission() {
      return supportsFission_;
    }

    public static final int SUPPORTS_DSYM_FIELD_NUMBER = 51;
    private boolean supportsDsym_;
    /**
     * <pre>
     * Can generate dsym debug symbol information.
     * </pre>
     *
     * <code>optional bool supports_dsym = 51 [default = false];</code>
     */
    public boolean hasSupportsDsym() {
      return ((bitField0_ & 0x00040000) == 0x00040000);
    }
    /**
     * <pre>
     * Can generate dsym debug symbol information.
     * </pre>
     *
     * <code>optional bool supports_dsym = 51 [default = false];</code>
     */
    public boolean getSupportsDsym() {
      return supportsDsym_;
    }

    public static final int NEEDSPIC_FIELD_NUMBER = 12;
    private boolean needsPic_;
    /**
     * <code>optional bool needsPic = 12 [default = false];</code>
     */
    public boolean hasNeedsPic() {
      return ((bitField0_ & 0x00080000) == 0x00080000);
    }
    /**
     * <code>optional bool needsPic = 12 [default = false];</code>
     */
    public boolean getNeedsPic() {
      return needsPic_;
    }

    public static final int COMPILER_FLAG_FIELD_NUMBER = 13;
    private com.google.protobuf.LazyStringList compilerFlag_;
    /**
     * <pre>
     * Compiler flags for C/C++/Asm compilation.
     * </pre>
     *
     * <code>repeated string compiler_flag = 13;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getCompilerFlagList() {
      return compilerFlag_;
    }
    /**
     * <pre>
     * Compiler flags for C/C++/Asm compilation.
     * </pre>
     *
     * <code>repeated string compiler_flag = 13;</code>
     */
    public int getCompilerFlagCount() {
      return compilerFlag_.size();
    }
    /**
     * <pre>
     * Compiler flags for C/C++/Asm compilation.
     * </pre>
     *
     * <code>repeated string compiler_flag = 13;</code>
     */
    public java.lang.String getCompilerFlag(int index) {
      return compilerFlag_.get(index);
    }
    /**
     * <pre>
     * Compiler flags for C/C++/Asm compilation.
     * </pre>
     *
     * <code>repeated string compiler_flag = 13;</code>
     */
    public com.google.protobuf.ByteString
        getCompilerFlagBytes(int index) {
      return compilerFlag_.getByteString(index);
    }

    public static final int CXX_FLAG_FIELD_NUMBER = 14;
    private com.google.protobuf.LazyStringList cxxFlag_;
    /**
     * <pre>
     * Additional compiler flags for C++ compilation.
     * </pre>
     *
     * <code>repeated string cxx_flag = 14;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getCxxFlagList() {
      return cxxFlag_;
    }
    /**
     * <pre>
     * Additional compiler flags for C++ compilation.
     * </pre>
     *
     * <code>repeated string cxx_flag = 14;</code>
     */
    public int getCxxFlagCount() {
      return cxxFlag_.size();
    }
    /**
     * <pre>
     * Additional compiler flags for C++ compilation.
     * </pre>
     *
     * <code>repeated string cxx_flag = 14;</code>
     */
    public java.lang.String getCxxFlag(int index) {
      return cxxFlag_.get(index);
    }
    /**
     * <pre>
     * Additional compiler flags for C++ compilation.
     * </pre>
     *
     * <code>repeated string cxx_flag = 14;</code>
     */
    public com.google.protobuf.ByteString
        getCxxFlagBytes(int index) {
      return cxxFlag_.getByteString(index);
    }

    public static final int UNFILTERED_CXX_FLAG_FIELD_NUMBER = 25;
    private com.google.protobuf.LazyStringList unfilteredCxxFlag_;
    /**
     * <pre>
     * Additional unfiltered compiler flags for C/C++/Asm compilation.
     * These are not subject to nocopt filtering in cc_* rules.
     * Note: These flags are *not* applied to objc/objc++ compiles.
     * </pre>
     *
     * <code>repeated string unfiltered_cxx_flag = 25;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getUnfilteredCxxFlagList() {
      return unfilteredCxxFlag_;
    }
    /**
     * <pre>
     * Additional unfiltered compiler flags for C/C++/Asm compilation.
     * These are not subject to nocopt filtering in cc_* rules.
     * Note: These flags are *not* applied to objc/objc++ compiles.
     * </pre>
     *
     * <code>repeated string unfiltered_cxx_flag = 25;</code>
     */
    public int getUnfilteredCxxFlagCount() {
      return unfilteredCxxFlag_.size();
    }
    /**
     * <pre>
     * Additional unfiltered compiler flags for C/C++/Asm compilation.
     * These are not subject to nocopt filtering in cc_* rules.
     * Note: These flags are *not* applied to objc/objc++ compiles.
     * </pre>
     *
     * <code>repeated string unfiltered_cxx_flag = 25;</code>
     */
    public java.lang.String getUnfilteredCxxFlag(int index) {
      return unfilteredCxxFlag_.get(index);
    }
    /**
     * <pre>
     * Additional unfiltered compiler flags for C/C++/Asm compilation.
     * These are not subject to nocopt filtering in cc_* rules.
     * Note: These flags are *not* applied to objc/objc++ compiles.
     * </pre>
     *
     * <code>repeated string unfiltered_cxx_flag = 25;</code>
     */
    public com.google.protobuf.ByteString
        getUnfilteredCxxFlagBytes(int index) {
      return unfilteredCxxFlag_.getByteString(index);
    }

    public static final int LINKER_FLAG_FIELD_NUMBER = 15;
    private com.google.protobuf.LazyStringList linkerFlag_;
    /**
     * <pre>
     * Linker flags.
     * </pre>
     *
     * <code>repeated string linker_flag = 15;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getLinkerFlagList() {
      return linkerFlag_;
    }
    /**
     * <pre>
     * Linker flags.
     * </pre>
     *
     * <code>repeated string linker_flag = 15;</code>
     */
    public int getLinkerFlagCount() {
      return linkerFlag_.size();
    }
    /**
     * <pre>
     * Linker flags.
     * </pre>
     *
     * <code>repeated string linker_flag = 15;</code>
     */
    public java.lang.String getLinkerFlag(int index) {
      return linkerFlag_.get(index);
    }
    /**
     * <pre>
     * Linker flags.
     * </pre>
     *
     * <code>repeated string linker_flag = 15;</code>
     */
    public com.google.protobuf.ByteString
        getLinkerFlagBytes(int index) {
      return linkerFlag_.getByteString(index);
    }

    public static final int DYNAMIC_LIBRARY_LINKER_FLAG_FIELD_NUMBER = 27;
    private com.google.protobuf.LazyStringList dynamicLibraryLinkerFlag_;
    /**
     * <pre>
     * Additional linker flags when linking dynamic libraries.
     * </pre>
     *
     * <code>repeated string dynamic_library_linker_flag = 27;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getDynamicLibraryLinkerFlagList() {
      return dynamicLibraryLinkerFlag_;
    }
    /**
     * <pre>
     * Additional linker flags when linking dynamic libraries.
     * </pre>
     *
     * <code>repeated string dynamic_library_linker_flag = 27;</code>
     */
    public int getDynamicLibraryLinkerFlagCount() {
      return dynamicLibraryLinkerFlag_.size();
    }
    /**
     * <pre>
     * Additional linker flags when linking dynamic libraries.
     * </pre>
     *
     * <code>repeated string dynamic_library_linker_flag = 27;</code>
     */
    public java.lang.String getDynamicLibraryLinkerFlag(int index) {
      return dynamicLibraryLinkerFlag_.get(index);
    }
    /**
     * <pre>
     * Additional linker flags when linking dynamic libraries.
     * </pre>
     *
     * <code>repeated string dynamic_library_linker_flag = 27;</code>
     */
    public com.google.protobuf.ByteString
        getDynamicLibraryLinkerFlagBytes(int index) {
      return dynamicLibraryLinkerFlag_.getByteString(index);
    }

    public static final int TEST_ONLY_LINKER_FLAG_FIELD_NUMBER = 49;
    private com.google.protobuf.LazyStringList testOnlyLinkerFlag_;
    /**
     * <pre>
     * Additional test-only linker flags.
     * </pre>
     *
     * <code>repeated string test_only_linker_flag = 49;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getTestOnlyLinkerFlagList() {
      return testOnlyLinkerFlag_;
    }
    /**
     * <pre>
     * Additional test-only linker flags.
     * </pre>
     *
     * <code>repeated string test_only_linker_flag = 49;</code>
     */
    public int getTestOnlyLinkerFlagCount() {
      return testOnlyLinkerFlag_.size();
    }
    /**
     * <pre>
     * Additional test-only linker flags.
     * </pre>
     *
     * <code>repeated string test_only_linker_flag = 49;</code>
     */
    public java.lang.String getTestOnlyLinkerFlag(int index) {
      return testOnlyLinkerFlag_.get(index);
    }
    /**
     * <pre>
     * Additional test-only linker flags.
     * </pre>
     *
     * <code>repeated string test_only_linker_flag = 49;</code>
     */
    public com.google.protobuf.ByteString
        getTestOnlyLinkerFlagBytes(int index) {
      return testOnlyLinkerFlag_.getByteString(index);
    }

    public static final int OBJCOPY_EMBED_FLAG_FIELD_NUMBER = 16;
    private com.google.protobuf.LazyStringList objcopyEmbedFlag_;
    /**
     * <pre>
     * Objcopy flags for embedding files into binaries.
     * </pre>
     *
     * <code>repeated string objcopy_embed_flag = 16;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getObjcopyEmbedFlagList() {
      return objcopyEmbedFlag_;
    }
    /**
     * <pre>
     * Objcopy flags for embedding files into binaries.
     * </pre>
     *
     * <code>repeated string objcopy_embed_flag = 16;</code>
     */
    public int getObjcopyEmbedFlagCount() {
      return objcopyEmbedFlag_.size();
    }
    /**
     * <pre>
     * Objcopy flags for embedding files into binaries.
     * </pre>
     *
     * <code>repeated string objcopy_embed_flag = 16;</code>
     */
    public java.lang.String getObjcopyEmbedFlag(int index) {
      return objcopyEmbedFlag_.get(index);
    }
    /**
     * <pre>
     * Objcopy flags for embedding files into binaries.
     * </pre>
     *
     * <code>repeated string objcopy_embed_flag = 16;</code>
     */
    public com.google.protobuf.ByteString
        getObjcopyEmbedFlagBytes(int index) {
      return objcopyEmbedFlag_.getByteString(index);
    }

    public static final int LD_EMBED_FLAG_FIELD_NUMBER = 23;
    private com.google.protobuf.LazyStringList ldEmbedFlag_;
    /**
     * <pre>
     * Ld flags for embedding files into binaries. This is used by filewrapper
     * since it calls ld directly and needs to know what -m flag to pass.
     * </pre>
     *
     * <code>repeated string ld_embed_flag = 23;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getLdEmbedFlagList() {
      return ldEmbedFlag_;
    }
    /**
     * <pre>
     * Ld flags for embedding files into binaries. This is used by filewrapper
     * since it calls ld directly and needs to know what -m flag to pass.
     * </pre>
     *
     * <code>repeated string ld_embed_flag = 23;</code>
     */
    public int getLdEmbedFlagCount() {
      return ldEmbedFlag_.size();
    }
    /**
     * <pre>
     * Ld flags for embedding files into binaries. This is used by filewrapper
     * since it calls ld directly and needs to know what -m flag to pass.
     * </pre>
     *
     * <code>repeated string ld_embed_flag = 23;</code>
     */
    public java.lang.String getLdEmbedFlag(int index) {
      return ldEmbedFlag_.get(index);
    }
    /**
     * <pre>
     * Ld flags for embedding files into binaries. This is used by filewrapper
     * since it calls ld directly and needs to know what -m flag to pass.
     * </pre>
     *
     * <code>repeated string ld_embed_flag = 23;</code>
     */
    public com.google.protobuf.ByteString
        getLdEmbedFlagBytes(int index) {
      return ldEmbedFlag_.getByteString(index);
    }

    public static final int AR_FLAG_FIELD_NUMBER = 47;
    private com.google.protobuf.LazyStringList arFlag_;
    /**
     * <pre>
     * Ar flags for combining object files into archives. If this is not set, it
     * defaults to "rcsD".
     * TODO(b/37271982): Remove after blaze with ar action_config release
     * </pre>
     *
     * <code>repeated string ar_flag = 47;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getArFlagList() {
      return arFlag_;
    }
    /**
     * <pre>
     * Ar flags for combining object files into archives. If this is not set, it
     * defaults to "rcsD".
     * TODO(b/37271982): Remove after blaze with ar action_config release
     * </pre>
     *
     * <code>repeated string ar_flag = 47;</code>
     */
    public int getArFlagCount() {
      return arFlag_.size();
    }
    /**
     * <pre>
     * Ar flags for combining object files into archives. If this is not set, it
     * defaults to "rcsD".
     * TODO(b/37271982): Remove after blaze with ar action_config release
     * </pre>
     *
     * <code>repeated string ar_flag = 47;</code>
     */
    public java.lang.String getArFlag(int index) {
      return arFlag_.get(index);
    }
    /**
     * <pre>
     * Ar flags for combining object files into archives. If this is not set, it
     * defaults to "rcsD".
     * TODO(b/37271982): Remove after blaze with ar action_config release
     * </pre>
     *
     * <code>repeated string ar_flag = 47;</code>
     */
    public com.google.protobuf.ByteString
        getArFlagBytes(int index) {
      return arFlag_.getByteString(index);
    }

    public static final int AR_THIN_ARCHIVES_FLAG_FIELD_NUMBER = 48;
    private com.google.protobuf.LazyStringList arThinArchivesFlag_;
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>repeated string ar_thin_archives_flag = 48;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getArThinArchivesFlagList() {
      return arThinArchivesFlag_;
    }
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>repeated string ar_thin_archives_flag = 48;</code>
     */
    public int getArThinArchivesFlagCount() {
      return arThinArchivesFlag_.size();
    }
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>repeated string ar_thin_archives_flag = 48;</code>
     */
    public java.lang.String getArThinArchivesFlag(int index) {
      return arThinArchivesFlag_.get(index);
    }
    /**
     * <pre>
     * Legacy field, ignored by Bazel.
     * </pre>
     *
     * <code>repeated string ar_thin_archives_flag = 48;</code>
     */
    public com.google.protobuf.ByteString
        getArThinArchivesFlagBytes(int index) {
      return arThinArchivesFlag_.getByteString(index);
    }

    public static final int GCC_PLUGIN_COMPILER_FLAG_FIELD_NUMBER = 34;
    private com.google.protobuf.LazyStringList gccPluginCompilerFlag_;
    /**
     * <pre>
     * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
     * </pre>
     *
     * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getGccPluginCompilerFlagList() {
      return gccPluginCompilerFlag_;
    }
    /**
     * <pre>
     * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
     * </pre>
     *
     * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
     */
    public int getGccPluginCompilerFlagCount() {
      return gccPluginCompilerFlag_.size();
    }
    /**
     * <pre>
     * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
     * </pre>
     *
     * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
     */
    public java.lang.String getGccPluginCompilerFlag(int index) {
      return gccPluginCompilerFlag_.get(index);
    }
    /**
     * <pre>
     * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
     * </pre>
     *
     * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
     */
    public com.google.protobuf.ByteString
        getGccPluginCompilerFlagBytes(int index) {
      return gccPluginCompilerFlag_.getByteString(index);
    }

    public static final int COMPILATION_MODE_FLAGS_FIELD_NUMBER = 17;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags> compilationModeFlags_;
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags> getCompilationModeFlagsList() {
      return compilationModeFlags_;
    }
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder> 
        getCompilationModeFlagsOrBuilderList() {
      return compilationModeFlags_;
    }
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    public int getCompilationModeFlagsCount() {
      return compilationModeFlags_.size();
    }
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags getCompilationModeFlags(int index) {
      return compilationModeFlags_.get(index);
    }
    /**
     * <pre>
     * Additional compiler and linker flags depending on the compilation mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder getCompilationModeFlagsOrBuilder(
        int index) {
      return compilationModeFlags_.get(index);
    }

    public static final int LIPO_MODE_FLAGS_FIELD_NUMBER = 44;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags> lipoModeFlags_;
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags> getLipoModeFlagsList() {
      return lipoModeFlags_;
    }
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder> 
        getLipoModeFlagsOrBuilderList() {
      return lipoModeFlags_;
    }
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    public int getLipoModeFlagsCount() {
      return lipoModeFlags_.size();
    }
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags getLipoModeFlags(int index) {
      return lipoModeFlags_.get(index);
    }
    /**
     * <pre>
     * Additional compiler and linker flags depending on the LIPO mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder getLipoModeFlagsOrBuilder(
        int index) {
      return lipoModeFlags_.get(index);
    }

    public static final int LINKING_MODE_FLAGS_FIELD_NUMBER = 18;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags> linkingModeFlags_;
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags> getLinkingModeFlagsList() {
      return linkingModeFlags_;
    }
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder> 
        getLinkingModeFlagsOrBuilderList() {
      return linkingModeFlags_;
    }
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    public int getLinkingModeFlagsCount() {
      return linkingModeFlags_.size();
    }
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags getLinkingModeFlags(int index) {
      return linkingModeFlags_.get(index);
    }
    /**
     * <pre>
     * Additional linker flags depending on the linking mode.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder getLinkingModeFlagsOrBuilder(
        int index) {
      return linkingModeFlags_.get(index);
    }

    public static final int GCC_PLUGIN_HEADER_DIRECTORY_FIELD_NUMBER = 19;
    private com.google.protobuf.LazyStringList gccPluginHeaderDirectory_;
    /**
     * <pre>
     * Plugin header directories for gcc and mao plugins. If none are set, the
     * toolchain does not support plugins. Relative paths are resolved relative
     * to the configuration file directory.
     * </pre>
     *
     * <code>repeated string gcc_plugin_header_directory = 19;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getGccPluginHeaderDirectoryList() {
      return gccPluginHeaderDirectory_;
    }
    /**
     * <pre>
     * Plugin header directories for gcc and mao plugins. If none are set, the
     * toolchain does not support plugins. Relative paths are resolved relative
     * to the configuration file directory.
     * </pre>
     *
     * <code>repeated string gcc_plugin_header_directory = 19;</code>
     */
    public int getGccPluginHeaderDirectoryCount() {
      return gccPluginHeaderDirectory_.size();
    }
    /**
     * <pre>
     * Plugin header directories for gcc and mao plugins. If none are set, the
     * toolchain does not support plugins. Relative paths are resolved relative
     * to the configuration file directory.
     * </pre>
     *
     * <code>repeated string gcc_plugin_header_directory = 19;</code>
     */
    public java.lang.String getGccPluginHeaderDirectory(int index) {
      return gccPluginHeaderDirectory_.get(index);
    }
    /**
     * <pre>
     * Plugin header directories for gcc and mao plugins. If none are set, the
     * toolchain does not support plugins. Relative paths are resolved relative
     * to the configuration file directory.
     * </pre>
     *
     * <code>repeated string gcc_plugin_header_directory = 19;</code>
     */
    public com.google.protobuf.ByteString
        getGccPluginHeaderDirectoryBytes(int index) {
      return gccPluginHeaderDirectory_.getByteString(index);
    }

    public static final int MAO_PLUGIN_HEADER_DIRECTORY_FIELD_NUMBER = 20;
    private com.google.protobuf.LazyStringList maoPluginHeaderDirectory_;
    /**
     * <code>repeated string mao_plugin_header_directory = 20;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getMaoPluginHeaderDirectoryList() {
      return maoPluginHeaderDirectory_;
    }
    /**
     * <code>repeated string mao_plugin_header_directory = 20;</code>
     */
    public int getMaoPluginHeaderDirectoryCount() {
      return maoPluginHeaderDirectory_.size();
    }
    /**
     * <code>repeated string mao_plugin_header_directory = 20;</code>
     */
    public java.lang.String getMaoPluginHeaderDirectory(int index) {
      return maoPluginHeaderDirectory_.get(index);
    }
    /**
     * <code>repeated string mao_plugin_header_directory = 20;</code>
     */
    public com.google.protobuf.ByteString
        getMaoPluginHeaderDirectoryBytes(int index) {
      return maoPluginHeaderDirectory_.getByteString(index);
    }

    public static final int MAKE_VARIABLE_FIELD_NUMBER = 21;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable> makeVariable_;
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable> getMakeVariableList() {
      return makeVariable_;
    }
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder> 
        getMakeVariableOrBuilderList() {
      return makeVariable_;
    }
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    public int getMakeVariableCount() {
      return makeVariable_.size();
    }
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable getMakeVariable(int index) {
      return makeVariable_.get(index);
    }
    /**
     * <pre>
     * Make variables that are made accessible to rules.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder getMakeVariableOrBuilder(
        int index) {
      return makeVariable_.get(index);
    }

    public static final int CXX_BUILTIN_INCLUDE_DIRECTORY_FIELD_NUMBER = 22;
    private com.google.protobuf.LazyStringList cxxBuiltinIncludeDirectory_;
    /**
     * <pre>
     * Built-in include directories for C++ compilation. These should be the exact
     * paths used by the compiler, and are generally relative to the exec root.
     * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
     * We currently use the C++ paths also for C compilation, which is safe as
     * long as there are no name clashes between C++ and C header files.
     * Relative paths are resolved relative to the configuration file directory.
     * If the compiler has --sysroot support, then these paths should use
     * %sysroot% rather than the include path, and specify the sysroot attribute
     * in order to give blaze the information necessary to make the correct
     * replacements.
     * </pre>
     *
     * <code>repeated string cxx_builtin_include_directory = 22;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getCxxBuiltinIncludeDirectoryList() {
      return cxxBuiltinIncludeDirectory_;
    }
    /**
     * <pre>
     * Built-in include directories for C++ compilation. These should be the exact
     * paths used by the compiler, and are generally relative to the exec root.
     * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
     * We currently use the C++ paths also for C compilation, which is safe as
     * long as there are no name clashes between C++ and C header files.
     * Relative paths are resolved relative to the configuration file directory.
     * If the compiler has --sysroot support, then these paths should use
     * %sysroot% rather than the include path, and specify the sysroot attribute
     * in order to give blaze the information necessary to make the correct
     * replacements.
     * </pre>
     *
     * <code>repeated string cxx_builtin_include_directory = 22;</code>
     */
    public int getCxxBuiltinIncludeDirectoryCount() {
      return cxxBuiltinIncludeDirectory_.size();
    }
    /**
     * <pre>
     * Built-in include directories for C++ compilation. These should be the exact
     * paths used by the compiler, and are generally relative to the exec root.
     * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
     * We currently use the C++ paths also for C compilation, which is safe as
     * long as there are no name clashes between C++ and C header files.
     * Relative paths are resolved relative to the configuration file directory.
     * If the compiler has --sysroot support, then these paths should use
     * %sysroot% rather than the include path, and specify the sysroot attribute
     * in order to give blaze the information necessary to make the correct
     * replacements.
     * </pre>
     *
     * <code>repeated string cxx_builtin_include_directory = 22;</code>
     */
    public java.lang.String getCxxBuiltinIncludeDirectory(int index) {
      return cxxBuiltinIncludeDirectory_.get(index);
    }
    /**
     * <pre>
     * Built-in include directories for C++ compilation. These should be the exact
     * paths used by the compiler, and are generally relative to the exec root.
     * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
     * We currently use the C++ paths also for C compilation, which is safe as
     * long as there are no name clashes between C++ and C header files.
     * Relative paths are resolved relative to the configuration file directory.
     * If the compiler has --sysroot support, then these paths should use
     * %sysroot% rather than the include path, and specify the sysroot attribute
     * in order to give blaze the information necessary to make the correct
     * replacements.
     * </pre>
     *
     * <code>repeated string cxx_builtin_include_directory = 22;</code>
     */
    public com.google.protobuf.ByteString
        getCxxBuiltinIncludeDirectoryBytes(int index) {
      return cxxBuiltinIncludeDirectory_.getByteString(index);
    }

    public static final int BUILTIN_SYSROOT_FIELD_NUMBER = 24;
    private volatile java.lang.Object builtinSysroot_;
    /**
     * <pre>
     * The built-in sysroot. If this attribute is not present, blaze does not
     * allow using a different sysroot, i.e. through the --grte_top option. Also
     * see the documentation above.
     * </pre>
     *
     * <code>optional string builtin_sysroot = 24;</code>
     */
    public boolean hasBuiltinSysroot() {
      return ((bitField0_ & 0x00100000) == 0x00100000);
    }
    /**
     * <pre>
     * The built-in sysroot. If this attribute is not present, blaze does not
     * allow using a different sysroot, i.e. through the --grte_top option. Also
     * see the documentation above.
     * </pre>
     *
     * <code>optional string builtin_sysroot = 24;</code>
     */
    public java.lang.String getBuiltinSysroot() {
      java.lang.Object ref = builtinSysroot_;
      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 (bs.isValidUtf8()) {
          builtinSysroot_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The built-in sysroot. If this attribute is not present, blaze does not
     * allow using a different sysroot, i.e. through the --grte_top option. Also
     * see the documentation above.
     * </pre>
     *
     * <code>optional string builtin_sysroot = 24;</code>
     */
    public com.google.protobuf.ByteString
        getBuiltinSysrootBytes() {
      java.lang.Object ref = builtinSysroot_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        builtinSysroot_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEFAULT_PYTHON_TOP_FIELD_NUMBER = 29;
    private volatile java.lang.Object defaultPythonTop_;
    /**
     * <pre>
     * The location and version of the default Python (in absence of
     * --python_top and --python_version, respectively. The default
     * --python_mode is always 'opt'.) For backward compatibility, if these
     * attributes are not set, Blaze will use the crosstool v11-13 default
     * values: "/usr/grte/v1" and "python2.4".
     * </pre>
     *
     * <code>optional string default_python_top = 29;</code>
     */
    public boolean hasDefaultPythonTop() {
      return ((bitField0_ & 0x00200000) == 0x00200000);
    }
    /**
     * <pre>
     * The location and version of the default Python (in absence of
     * --python_top and --python_version, respectively. The default
     * --python_mode is always 'opt'.) For backward compatibility, if these
     * attributes are not set, Blaze will use the crosstool v11-13 default
     * values: "/usr/grte/v1" and "python2.4".
     * </pre>
     *
     * <code>optional string default_python_top = 29;</code>
     */
    public java.lang.String getDefaultPythonTop() {
      java.lang.Object ref = defaultPythonTop_;
      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 (bs.isValidUtf8()) {
          defaultPythonTop_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The location and version of the default Python (in absence of
     * --python_top and --python_version, respectively. The default
     * --python_mode is always 'opt'.) For backward compatibility, if these
     * attributes are not set, Blaze will use the crosstool v11-13 default
     * values: "/usr/grte/v1" and "python2.4".
     * </pre>
     *
     * <code>optional string default_python_top = 29;</code>
     */
    public com.google.protobuf.ByteString
        getDefaultPythonTopBytes() {
      java.lang.Object ref = defaultPythonTop_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        defaultPythonTop_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEFAULT_PYTHON_VERSION_FIELD_NUMBER = 30;
    private volatile java.lang.Object defaultPythonVersion_;
    /**
     * <code>optional string default_python_version = 30;</code>
     */
    public boolean hasDefaultPythonVersion() {
      return ((bitField0_ & 0x00400000) == 0x00400000);
    }
    /**
     * <code>optional string default_python_version = 30;</code>
     */
    public java.lang.String getDefaultPythonVersion() {
      java.lang.Object ref = defaultPythonVersion_;
      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 (bs.isValidUtf8()) {
          defaultPythonVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string default_python_version = 30;</code>
     */
    public com.google.protobuf.ByteString
        getDefaultPythonVersionBytes() {
      java.lang.Object ref = defaultPythonVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        defaultPythonVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PYTHON_PRELOAD_SWIGDEPS_FIELD_NUMBER = 42;
    private boolean pythonPreloadSwigdeps_;
    /**
     * <pre>
     * Whether to preload swigdeps.so files in py_binaries and PAR files.
     * This overrides the commandline flag.
     * </pre>
     *
     * <code>optional bool python_preload_swigdeps = 42;</code>
     */
    public boolean hasPythonPreloadSwigdeps() {
      return ((bitField0_ & 0x00800000) == 0x00800000);
    }
    /**
     * <pre>
     * Whether to preload swigdeps.so files in py_binaries and PAR files.
     * This overrides the commandline flag.
     * </pre>
     *
     * <code>optional bool python_preload_swigdeps = 42;</code>
     */
    public boolean getPythonPreloadSwigdeps() {
      return pythonPreloadSwigdeps_;
    }

    public static final int DEFAULT_GRTE_TOP_FIELD_NUMBER = 31;
    private volatile java.lang.Object defaultGrteTop_;
    /**
     * <pre>
     * The default GRTE to use. This should be a label, and gets the same
     * treatment from Blaze as the --grte_top option. This setting is only used in
     * the absence of an explicit --grte_top option. If unset, Blaze will not pass
     * -sysroot by default. The local part must be 'everything', i.e.,
     * '//some/label:everything'. There can only be one GRTE library per package,
     * because the compiler expects the directory as a parameter of the -sysroot
     * option.
     * This may only be set to a non-empty value if builtin_sysroot is also set!
     * </pre>
     *
     * <code>optional string default_grte_top = 31;</code>
     */
    public boolean hasDefaultGrteTop() {
      return ((bitField0_ & 0x01000000) == 0x01000000);
    }
    /**
     * <pre>
     * The default GRTE to use. This should be a label, and gets the same
     * treatment from Blaze as the --grte_top option. This setting is only used in
     * the absence of an explicit --grte_top option. If unset, Blaze will not pass
     * -sysroot by default. The local part must be 'everything', i.e.,
     * '//some/label:everything'. There can only be one GRTE library per package,
     * because the compiler expects the directory as a parameter of the -sysroot
     * option.
     * This may only be set to a non-empty value if builtin_sysroot is also set!
     * </pre>
     *
     * <code>optional string default_grte_top = 31;</code>
     */
    public java.lang.String getDefaultGrteTop() {
      java.lang.Object ref = defaultGrteTop_;
      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 (bs.isValidUtf8()) {
          defaultGrteTop_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The default GRTE to use. This should be a label, and gets the same
     * treatment from Blaze as the --grte_top option. This setting is only used in
     * the absence of an explicit --grte_top option. If unset, Blaze will not pass
     * -sysroot by default. The local part must be 'everything', i.e.,
     * '//some/label:everything'. There can only be one GRTE library per package,
     * because the compiler expects the directory as a parameter of the -sysroot
     * option.
     * This may only be set to a non-empty value if builtin_sysroot is also set!
     * </pre>
     *
     * <code>optional string default_grte_top = 31;</code>
     */
    public com.google.protobuf.ByteString
        getDefaultGrteTopBytes() {
      java.lang.Object ref = defaultGrteTop_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        defaultGrteTop_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEBIAN_EXTRA_REQUIRES_FIELD_NUMBER = 33;
    private com.google.protobuf.LazyStringList debianExtraRequires_;
    /**
     * <pre>
     * Additional dependencies for Blaze-built .deb packages. All Debian packages
     * that contain C++ binaries need to have the correct runtime
     * libraries installed, and those depend on the crosstool version, which is
     * why they are recorded here.
     * </pre>
     *
     * <code>repeated string debian_extra_requires = 33;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getDebianExtraRequiresList() {
      return debianExtraRequires_;
    }
    /**
     * <pre>
     * Additional dependencies for Blaze-built .deb packages. All Debian packages
     * that contain C++ binaries need to have the correct runtime
     * libraries installed, and those depend on the crosstool version, which is
     * why they are recorded here.
     * </pre>
     *
     * <code>repeated string debian_extra_requires = 33;</code>
     */
    public int getDebianExtraRequiresCount() {
      return debianExtraRequires_.size();
    }
    /**
     * <pre>
     * Additional dependencies for Blaze-built .deb packages. All Debian packages
     * that contain C++ binaries need to have the correct runtime
     * libraries installed, and those depend on the crosstool version, which is
     * why they are recorded here.
     * </pre>
     *
     * <code>repeated string debian_extra_requires = 33;</code>
     */
    public java.lang.String getDebianExtraRequires(int index) {
      return debianExtraRequires_.get(index);
    }
    /**
     * <pre>
     * Additional dependencies for Blaze-built .deb packages. All Debian packages
     * that contain C++ binaries need to have the correct runtime
     * libraries installed, and those depend on the crosstool version, which is
     * why they are recorded here.
     * </pre>
     *
     * <code>repeated string debian_extra_requires = 33;</code>
     */
    public com.google.protobuf.ByteString
        getDebianExtraRequiresBytes(int index) {
      return debianExtraRequires_.getByteString(index);
    }

    public static final int CC_TARGET_OS_FIELD_NUMBER = 55;
    private volatile java.lang.Object ccTargetOs_;
    /**
     * <pre>
     * Unused, for compatibility with things internal to Google.
     * </pre>
     *
     * <code>optional string cc_target_os = 55;</code>
     */
    public boolean hasCcTargetOs() {
      return ((bitField0_ & 0x02000000) == 0x02000000);
    }
    /**
     * <pre>
     * Unused, for compatibility with things internal to Google.
     * </pre>
     *
     * <code>optional string cc_target_os = 55;</code>
     */
    public java.lang.String getCcTargetOs() {
      java.lang.Object ref = ccTargetOs_;
      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 (bs.isValidUtf8()) {
          ccTargetOs_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Unused, for compatibility with things internal to Google.
     * </pre>
     *
     * <code>optional string cc_target_os = 55;</code>
     */
    public com.google.protobuf.ByteString
        getCcTargetOsBytes() {
      java.lang.Object ref = ccTargetOs_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        ccTargetOs_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasToolchainIdentifier()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasHostSystemName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetSystemName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetCpu()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasTargetLibc()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasCompiler()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasAbiVersion()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasAbiLibcVersion()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getFeatureCount(); i++) {
        if (!getFeature(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getActionConfigCount(); i++) {
        if (!getActionConfig(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getArtifactNamePatternCount(); i++) {
        if (!getArtifactNamePattern(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getToolPathCount(); i++) {
        if (!getToolPath(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getCompilationModeFlagsCount(); i++) {
        if (!getCompilationModeFlags(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getLipoModeFlagsCount(); i++) {
        if (!getLipoModeFlags(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getLinkingModeFlagsCount(); i++) {
        if (!getLinkingModeFlags(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getMakeVariableCount(); i++) {
        if (!getMakeVariable(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, toolchainIdentifier_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, hostSystemName_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, targetSystemName_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, targetCpu_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, targetLibc_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, compiler_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 7, abiVersion_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, abiLibcVersion_);
      }
      for (int i = 0; i < toolPath_.size(); i++) {
        output.writeMessage(9, toolPath_.get(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBool(10, supportsGoldLinker_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBool(11, supportsThinArchives_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        output.writeBool(12, needsPic_);
      }
      for (int i = 0; i < compilerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 13, compilerFlag_.getRaw(i));
      }
      for (int i = 0; i < cxxFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 14, cxxFlag_.getRaw(i));
      }
      for (int i = 0; i < linkerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 15, linkerFlag_.getRaw(i));
      }
      for (int i = 0; i < objcopyEmbedFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 16, objcopyEmbedFlag_.getRaw(i));
      }
      for (int i = 0; i < compilationModeFlags_.size(); i++) {
        output.writeMessage(17, compilationModeFlags_.get(i));
      }
      for (int i = 0; i < linkingModeFlags_.size(); i++) {
        output.writeMessage(18, linkingModeFlags_.get(i));
      }
      for (int i = 0; i < gccPluginHeaderDirectory_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 19, gccPluginHeaderDirectory_.getRaw(i));
      }
      for (int i = 0; i < maoPluginHeaderDirectory_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 20, maoPluginHeaderDirectory_.getRaw(i));
      }
      for (int i = 0; i < makeVariable_.size(); i++) {
        output.writeMessage(21, makeVariable_.get(i));
      }
      for (int i = 0; i < cxxBuiltinIncludeDirectory_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 22, cxxBuiltinIncludeDirectory_.getRaw(i));
      }
      for (int i = 0; i < ldEmbedFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 23, ldEmbedFlag_.getRaw(i));
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 24, builtinSysroot_);
      }
      for (int i = 0; i < unfilteredCxxFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 25, unfilteredCxxFlag_.getRaw(i));
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeBool(26, supportsNormalizingAr_);
      }
      for (int i = 0; i < dynamicLibraryLinkerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 27, dynamicLibraryLinkerFlag_.getRaw(i));
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBool(28, supportsStartEndLib_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 29, defaultPythonTop_);
      }
      if (((bitField0_ & 0x00400000) == 0x00400000)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 30, defaultPythonVersion_);
      }
      if (((bitField0_ & 0x01000000) == 0x01000000)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 31, defaultGrteTop_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBool(32, supportsInterfaceSharedObjects_);
      }
      for (int i = 0; i < debianExtraRequires_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 33, debianExtraRequires_.getRaw(i));
      }
      for (int i = 0; i < gccPluginCompilerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 34, gccPluginCompilerFlag_.getRaw(i));
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBool(40, supportsEmbeddedRuntimes_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeBool(41, supportsIncrementalLinker_);
      }
      if (((bitField0_ & 0x00800000) == 0x00800000)) {
        output.writeBool(42, pythonPreloadSwigdeps_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeBool(43, supportsFission_);
      }
      for (int i = 0; i < lipoModeFlags_.size(); i++) {
        output.writeMessage(44, lipoModeFlags_.get(i));
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 45, staticRuntimesFilegroup_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 46, dynamicRuntimesFilegroup_);
      }
      for (int i = 0; i < arFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 47, arFlag_.getRaw(i));
      }
      for (int i = 0; i < arThinArchivesFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 48, arThinArchivesFlag_.getRaw(i));
      }
      for (int i = 0; i < testOnlyLinkerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 49, testOnlyLinkerFlag_.getRaw(i));
      }
      for (int i = 0; i < feature_.size(); i++) {
        output.writeMessage(50, feature_.get(i));
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        output.writeBool(51, supportsDsym_);
      }
      for (int i = 0; i < actionConfig_.size(); i++) {
        output.writeMessage(53, actionConfig_.get(i));
      }
      for (int i = 0; i < artifactNamePattern_.size(); i++) {
        output.writeMessage(54, artifactNamePattern_.get(i));
      }
      if (((bitField0_ & 0x02000000) == 0x02000000)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 55, ccTargetOs_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, toolchainIdentifier_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, hostSystemName_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, targetSystemName_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, targetCpu_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, targetLibc_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, compiler_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, abiVersion_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, abiLibcVersion_);
      }
      for (int i = 0; i < toolPath_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, toolPath_.get(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, supportsGoldLinker_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(11, supportsThinArchives_);
      }
      if (((bitField0_ & 0x00080000) == 0x00080000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, needsPic_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < compilerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(compilerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getCompilerFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < cxxFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(cxxFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getCxxFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < linkerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(linkerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getLinkerFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < objcopyEmbedFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(objcopyEmbedFlag_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getObjcopyEmbedFlagList().size();
      }
      for (int i = 0; i < compilationModeFlags_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(17, compilationModeFlags_.get(i));
      }
      for (int i = 0; i < linkingModeFlags_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, linkingModeFlags_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < gccPluginHeaderDirectory_.size(); i++) {
          dataSize += computeStringSizeNoTag(gccPluginHeaderDirectory_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getGccPluginHeaderDirectoryList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < maoPluginHeaderDirectory_.size(); i++) {
          dataSize += computeStringSizeNoTag(maoPluginHeaderDirectory_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getMaoPluginHeaderDirectoryList().size();
      }
      for (int i = 0; i < makeVariable_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(21, makeVariable_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < cxxBuiltinIncludeDirectory_.size(); i++) {
          dataSize += computeStringSizeNoTag(cxxBuiltinIncludeDirectory_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getCxxBuiltinIncludeDirectoryList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < ldEmbedFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(ldEmbedFlag_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getLdEmbedFlagList().size();
      }
      if (((bitField0_ & 0x00100000) == 0x00100000)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(24, builtinSysroot_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < unfilteredCxxFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(unfilteredCxxFlag_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getUnfilteredCxxFlagList().size();
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(26, supportsNormalizingAr_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < dynamicLibraryLinkerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(dynamicLibraryLinkerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getDynamicLibraryLinkerFlagList().size();
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(28, supportsStartEndLib_);
      }
      if (((bitField0_ & 0x00200000) == 0x00200000)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(29, defaultPythonTop_);
      }
      if (((bitField0_ & 0x00400000) == 0x00400000)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(30, defaultPythonVersion_);
      }
      if (((bitField0_ & 0x01000000) == 0x01000000)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(31, defaultGrteTop_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(32, supportsInterfaceSharedObjects_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < debianExtraRequires_.size(); i++) {
          dataSize += computeStringSizeNoTag(debianExtraRequires_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getDebianExtraRequiresList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < gccPluginCompilerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(gccPluginCompilerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getGccPluginCompilerFlagList().size();
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(40, supportsEmbeddedRuntimes_);
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(41, supportsIncrementalLinker_);
      }
      if (((bitField0_ & 0x00800000) == 0x00800000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(42, pythonPreloadSwigdeps_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(43, supportsFission_);
      }
      for (int i = 0; i < lipoModeFlags_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(44, lipoModeFlags_.get(i));
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(45, staticRuntimesFilegroup_);
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(46, dynamicRuntimesFilegroup_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < arFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(arFlag_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getArFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < arThinArchivesFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(arThinArchivesFlag_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getArThinArchivesFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < testOnlyLinkerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(testOnlyLinkerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 2 * getTestOnlyLinkerFlagList().size();
      }
      for (int i = 0; i < feature_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(50, feature_.get(i));
      }
      if (((bitField0_ & 0x00040000) == 0x00040000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(51, supportsDsym_);
      }
      for (int i = 0; i < actionConfig_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(53, actionConfig_.get(i));
      }
      for (int i = 0; i < artifactNamePattern_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(54, artifactNamePattern_.get(i));
      }
      if (((bitField0_ & 0x02000000) == 0x02000000)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(55, ccTargetOs_);
      }
      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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain) obj;

      boolean result = true;
      result = result && getFeatureList()
          .equals(other.getFeatureList());
      result = result && getActionConfigList()
          .equals(other.getActionConfigList());
      result = result && getArtifactNamePatternList()
          .equals(other.getArtifactNamePatternList());
      result = result && (hasToolchainIdentifier() == other.hasToolchainIdentifier());
      if (hasToolchainIdentifier()) {
        result = result && getToolchainIdentifier()
            .equals(other.getToolchainIdentifier());
      }
      result = result && (hasHostSystemName() == other.hasHostSystemName());
      if (hasHostSystemName()) {
        result = result && getHostSystemName()
            .equals(other.getHostSystemName());
      }
      result = result && (hasTargetSystemName() == other.hasTargetSystemName());
      if (hasTargetSystemName()) {
        result = result && getTargetSystemName()
            .equals(other.getTargetSystemName());
      }
      result = result && (hasTargetCpu() == other.hasTargetCpu());
      if (hasTargetCpu()) {
        result = result && getTargetCpu()
            .equals(other.getTargetCpu());
      }
      result = result && (hasTargetLibc() == other.hasTargetLibc());
      if (hasTargetLibc()) {
        result = result && getTargetLibc()
            .equals(other.getTargetLibc());
      }
      result = result && (hasCompiler() == other.hasCompiler());
      if (hasCompiler()) {
        result = result && getCompiler()
            .equals(other.getCompiler());
      }
      result = result && (hasAbiVersion() == other.hasAbiVersion());
      if (hasAbiVersion()) {
        result = result && getAbiVersion()
            .equals(other.getAbiVersion());
      }
      result = result && (hasAbiLibcVersion() == other.hasAbiLibcVersion());
      if (hasAbiLibcVersion()) {
        result = result && getAbiLibcVersion()
            .equals(other.getAbiLibcVersion());
      }
      result = result && getToolPathList()
          .equals(other.getToolPathList());
      result = result && (hasSupportsGoldLinker() == other.hasSupportsGoldLinker());
      if (hasSupportsGoldLinker()) {
        result = result && (getSupportsGoldLinker()
            == other.getSupportsGoldLinker());
      }
      result = result && (hasSupportsThinArchives() == other.hasSupportsThinArchives());
      if (hasSupportsThinArchives()) {
        result = result && (getSupportsThinArchives()
            == other.getSupportsThinArchives());
      }
      result = result && (hasSupportsStartEndLib() == other.hasSupportsStartEndLib());
      if (hasSupportsStartEndLib()) {
        result = result && (getSupportsStartEndLib()
            == other.getSupportsStartEndLib());
      }
      result = result && (hasSupportsInterfaceSharedObjects() == other.hasSupportsInterfaceSharedObjects());
      if (hasSupportsInterfaceSharedObjects()) {
        result = result && (getSupportsInterfaceSharedObjects()
            == other.getSupportsInterfaceSharedObjects());
      }
      result = result && (hasSupportsEmbeddedRuntimes() == other.hasSupportsEmbeddedRuntimes());
      if (hasSupportsEmbeddedRuntimes()) {
        result = result && (getSupportsEmbeddedRuntimes()
            == other.getSupportsEmbeddedRuntimes());
      }
      result = result && (hasStaticRuntimesFilegroup() == other.hasStaticRuntimesFilegroup());
      if (hasStaticRuntimesFilegroup()) {
        result = result && getStaticRuntimesFilegroup()
            .equals(other.getStaticRuntimesFilegroup());
      }
      result = result && (hasDynamicRuntimesFilegroup() == other.hasDynamicRuntimesFilegroup());
      if (hasDynamicRuntimesFilegroup()) {
        result = result && getDynamicRuntimesFilegroup()
            .equals(other.getDynamicRuntimesFilegroup());
      }
      result = result && (hasSupportsIncrementalLinker() == other.hasSupportsIncrementalLinker());
      if (hasSupportsIncrementalLinker()) {
        result = result && (getSupportsIncrementalLinker()
            == other.getSupportsIncrementalLinker());
      }
      result = result && (hasSupportsNormalizingAr() == other.hasSupportsNormalizingAr());
      if (hasSupportsNormalizingAr()) {
        result = result && (getSupportsNormalizingAr()
            == other.getSupportsNormalizingAr());
      }
      result = result && (hasSupportsFission() == other.hasSupportsFission());
      if (hasSupportsFission()) {
        result = result && (getSupportsFission()
            == other.getSupportsFission());
      }
      result = result && (hasSupportsDsym() == other.hasSupportsDsym());
      if (hasSupportsDsym()) {
        result = result && (getSupportsDsym()
            == other.getSupportsDsym());
      }
      result = result && (hasNeedsPic() == other.hasNeedsPic());
      if (hasNeedsPic()) {
        result = result && (getNeedsPic()
            == other.getNeedsPic());
      }
      result = result && getCompilerFlagList()
          .equals(other.getCompilerFlagList());
      result = result && getCxxFlagList()
          .equals(other.getCxxFlagList());
      result = result && getUnfilteredCxxFlagList()
          .equals(other.getUnfilteredCxxFlagList());
      result = result && getLinkerFlagList()
          .equals(other.getLinkerFlagList());
      result = result && getDynamicLibraryLinkerFlagList()
          .equals(other.getDynamicLibraryLinkerFlagList());
      result = result && getTestOnlyLinkerFlagList()
          .equals(other.getTestOnlyLinkerFlagList());
      result = result && getObjcopyEmbedFlagList()
          .equals(other.getObjcopyEmbedFlagList());
      result = result && getLdEmbedFlagList()
          .equals(other.getLdEmbedFlagList());
      result = result && getArFlagList()
          .equals(other.getArFlagList());
      result = result && getArThinArchivesFlagList()
          .equals(other.getArThinArchivesFlagList());
      result = result && getGccPluginCompilerFlagList()
          .equals(other.getGccPluginCompilerFlagList());
      result = result && getCompilationModeFlagsList()
          .equals(other.getCompilationModeFlagsList());
      result = result && getLipoModeFlagsList()
          .equals(other.getLipoModeFlagsList());
      result = result && getLinkingModeFlagsList()
          .equals(other.getLinkingModeFlagsList());
      result = result && getGccPluginHeaderDirectoryList()
          .equals(other.getGccPluginHeaderDirectoryList());
      result = result && getMaoPluginHeaderDirectoryList()
          .equals(other.getMaoPluginHeaderDirectoryList());
      result = result && getMakeVariableList()
          .equals(other.getMakeVariableList());
      result = result && getCxxBuiltinIncludeDirectoryList()
          .equals(other.getCxxBuiltinIncludeDirectoryList());
      result = result && (hasBuiltinSysroot() == other.hasBuiltinSysroot());
      if (hasBuiltinSysroot()) {
        result = result && getBuiltinSysroot()
            .equals(other.getBuiltinSysroot());
      }
      result = result && (hasDefaultPythonTop() == other.hasDefaultPythonTop());
      if (hasDefaultPythonTop()) {
        result = result && getDefaultPythonTop()
            .equals(other.getDefaultPythonTop());
      }
      result = result && (hasDefaultPythonVersion() == other.hasDefaultPythonVersion());
      if (hasDefaultPythonVersion()) {
        result = result && getDefaultPythonVersion()
            .equals(other.getDefaultPythonVersion());
      }
      result = result && (hasPythonPreloadSwigdeps() == other.hasPythonPreloadSwigdeps());
      if (hasPythonPreloadSwigdeps()) {
        result = result && (getPythonPreloadSwigdeps()
            == other.getPythonPreloadSwigdeps());
      }
      result = result && (hasDefaultGrteTop() == other.hasDefaultGrteTop());
      if (hasDefaultGrteTop()) {
        result = result && getDefaultGrteTop()
            .equals(other.getDefaultGrteTop());
      }
      result = result && getDebianExtraRequiresList()
          .equals(other.getDebianExtraRequiresList());
      result = result && (hasCcTargetOs() == other.hasCcTargetOs());
      if (hasCcTargetOs()) {
        result = result && getCcTargetOs()
            .equals(other.getCcTargetOs());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getFeatureCount() > 0) {
        hash = (37 * hash) + FEATURE_FIELD_NUMBER;
        hash = (53 * hash) + getFeatureList().hashCode();
      }
      if (getActionConfigCount() > 0) {
        hash = (37 * hash) + ACTION_CONFIG_FIELD_NUMBER;
        hash = (53 * hash) + getActionConfigList().hashCode();
      }
      if (getArtifactNamePatternCount() > 0) {
        hash = (37 * hash) + ARTIFACT_NAME_PATTERN_FIELD_NUMBER;
        hash = (53 * hash) + getArtifactNamePatternList().hashCode();
      }
      if (hasToolchainIdentifier()) {
        hash = (37 * hash) + TOOLCHAIN_IDENTIFIER_FIELD_NUMBER;
        hash = (53 * hash) + getToolchainIdentifier().hashCode();
      }
      if (hasHostSystemName()) {
        hash = (37 * hash) + HOST_SYSTEM_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getHostSystemName().hashCode();
      }
      if (hasTargetSystemName()) {
        hash = (37 * hash) + TARGET_SYSTEM_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getTargetSystemName().hashCode();
      }
      if (hasTargetCpu()) {
        hash = (37 * hash) + TARGET_CPU_FIELD_NUMBER;
        hash = (53 * hash) + getTargetCpu().hashCode();
      }
      if (hasTargetLibc()) {
        hash = (37 * hash) + TARGET_LIBC_FIELD_NUMBER;
        hash = (53 * hash) + getTargetLibc().hashCode();
      }
      if (hasCompiler()) {
        hash = (37 * hash) + COMPILER_FIELD_NUMBER;
        hash = (53 * hash) + getCompiler().hashCode();
      }
      if (hasAbiVersion()) {
        hash = (37 * hash) + ABI_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getAbiVersion().hashCode();
      }
      if (hasAbiLibcVersion()) {
        hash = (37 * hash) + ABI_LIBC_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getAbiLibcVersion().hashCode();
      }
      if (getToolPathCount() > 0) {
        hash = (37 * hash) + TOOL_PATH_FIELD_NUMBER;
        hash = (53 * hash) + getToolPathList().hashCode();
      }
      if (hasSupportsGoldLinker()) {
        hash = (37 * hash) + SUPPORTS_GOLD_LINKER_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsGoldLinker());
      }
      if (hasSupportsThinArchives()) {
        hash = (37 * hash) + SUPPORTS_THIN_ARCHIVES_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsThinArchives());
      }
      if (hasSupportsStartEndLib()) {
        hash = (37 * hash) + SUPPORTS_START_END_LIB_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsStartEndLib());
      }
      if (hasSupportsInterfaceSharedObjects()) {
        hash = (37 * hash) + SUPPORTS_INTERFACE_SHARED_OBJECTS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsInterfaceSharedObjects());
      }
      if (hasSupportsEmbeddedRuntimes()) {
        hash = (37 * hash) + SUPPORTS_EMBEDDED_RUNTIMES_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsEmbeddedRuntimes());
      }
      if (hasStaticRuntimesFilegroup()) {
        hash = (37 * hash) + STATIC_RUNTIMES_FILEGROUP_FIELD_NUMBER;
        hash = (53 * hash) + getStaticRuntimesFilegroup().hashCode();
      }
      if (hasDynamicRuntimesFilegroup()) {
        hash = (37 * hash) + DYNAMIC_RUNTIMES_FILEGROUP_FIELD_NUMBER;
        hash = (53 * hash) + getDynamicRuntimesFilegroup().hashCode();
      }
      if (hasSupportsIncrementalLinker()) {
        hash = (37 * hash) + SUPPORTS_INCREMENTAL_LINKER_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsIncrementalLinker());
      }
      if (hasSupportsNormalizingAr()) {
        hash = (37 * hash) + SUPPORTS_NORMALIZING_AR_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsNormalizingAr());
      }
      if (hasSupportsFission()) {
        hash = (37 * hash) + SUPPORTS_FISSION_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsFission());
      }
      if (hasSupportsDsym()) {
        hash = (37 * hash) + SUPPORTS_DSYM_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsDsym());
      }
      if (hasNeedsPic()) {
        hash = (37 * hash) + NEEDSPIC_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getNeedsPic());
      }
      if (getCompilerFlagCount() > 0) {
        hash = (37 * hash) + COMPILER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getCompilerFlagList().hashCode();
      }
      if (getCxxFlagCount() > 0) {
        hash = (37 * hash) + CXX_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getCxxFlagList().hashCode();
      }
      if (getUnfilteredCxxFlagCount() > 0) {
        hash = (37 * hash) + UNFILTERED_CXX_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getUnfilteredCxxFlagList().hashCode();
      }
      if (getLinkerFlagCount() > 0) {
        hash = (37 * hash) + LINKER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getLinkerFlagList().hashCode();
      }
      if (getDynamicLibraryLinkerFlagCount() > 0) {
        hash = (37 * hash) + DYNAMIC_LIBRARY_LINKER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getDynamicLibraryLinkerFlagList().hashCode();
      }
      if (getTestOnlyLinkerFlagCount() > 0) {
        hash = (37 * hash) + TEST_ONLY_LINKER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getTestOnlyLinkerFlagList().hashCode();
      }
      if (getObjcopyEmbedFlagCount() > 0) {
        hash = (37 * hash) + OBJCOPY_EMBED_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getObjcopyEmbedFlagList().hashCode();
      }
      if (getLdEmbedFlagCount() > 0) {
        hash = (37 * hash) + LD_EMBED_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getLdEmbedFlagList().hashCode();
      }
      if (getArFlagCount() > 0) {
        hash = (37 * hash) + AR_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getArFlagList().hashCode();
      }
      if (getArThinArchivesFlagCount() > 0) {
        hash = (37 * hash) + AR_THIN_ARCHIVES_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getArThinArchivesFlagList().hashCode();
      }
      if (getGccPluginCompilerFlagCount() > 0) {
        hash = (37 * hash) + GCC_PLUGIN_COMPILER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getGccPluginCompilerFlagList().hashCode();
      }
      if (getCompilationModeFlagsCount() > 0) {
        hash = (37 * hash) + COMPILATION_MODE_FLAGS_FIELD_NUMBER;
        hash = (53 * hash) + getCompilationModeFlagsList().hashCode();
      }
      if (getLipoModeFlagsCount() > 0) {
        hash = (37 * hash) + LIPO_MODE_FLAGS_FIELD_NUMBER;
        hash = (53 * hash) + getLipoModeFlagsList().hashCode();
      }
      if (getLinkingModeFlagsCount() > 0) {
        hash = (37 * hash) + LINKING_MODE_FLAGS_FIELD_NUMBER;
        hash = (53 * hash) + getLinkingModeFlagsList().hashCode();
      }
      if (getGccPluginHeaderDirectoryCount() > 0) {
        hash = (37 * hash) + GCC_PLUGIN_HEADER_DIRECTORY_FIELD_NUMBER;
        hash = (53 * hash) + getGccPluginHeaderDirectoryList().hashCode();
      }
      if (getMaoPluginHeaderDirectoryCount() > 0) {
        hash = (37 * hash) + MAO_PLUGIN_HEADER_DIRECTORY_FIELD_NUMBER;
        hash = (53 * hash) + getMaoPluginHeaderDirectoryList().hashCode();
      }
      if (getMakeVariableCount() > 0) {
        hash = (37 * hash) + MAKE_VARIABLE_FIELD_NUMBER;
        hash = (53 * hash) + getMakeVariableList().hashCode();
      }
      if (getCxxBuiltinIncludeDirectoryCount() > 0) {
        hash = (37 * hash) + CXX_BUILTIN_INCLUDE_DIRECTORY_FIELD_NUMBER;
        hash = (53 * hash) + getCxxBuiltinIncludeDirectoryList().hashCode();
      }
      if (hasBuiltinSysroot()) {
        hash = (37 * hash) + BUILTIN_SYSROOT_FIELD_NUMBER;
        hash = (53 * hash) + getBuiltinSysroot().hashCode();
      }
      if (hasDefaultPythonTop()) {
        hash = (37 * hash) + DEFAULT_PYTHON_TOP_FIELD_NUMBER;
        hash = (53 * hash) + getDefaultPythonTop().hashCode();
      }
      if (hasDefaultPythonVersion()) {
        hash = (37 * hash) + DEFAULT_PYTHON_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getDefaultPythonVersion().hashCode();
      }
      if (hasPythonPreloadSwigdeps()) {
        hash = (37 * hash) + PYTHON_PRELOAD_SWIGDEPS_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getPythonPreloadSwigdeps());
      }
      if (hasDefaultGrteTop()) {
        hash = (37 * hash) + DEFAULT_GRTE_TOP_FIELD_NUMBER;
        hash = (53 * hash) + getDefaultGrteTop().hashCode();
      }
      if (getDebianExtraRequiresCount() > 0) {
        hash = (37 * hash) + DEBIAN_EXTRA_REQUIRES_FIELD_NUMBER;
        hash = (53 * hash) + getDebianExtraRequiresList().hashCode();
      }
      if (hasCcTargetOs()) {
        hash = (37 * hash) + CC_TARGET_OS_FIELD_NUMBER;
        hash = (53 * hash) + getCcTargetOs().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * A description of a toolchain, which includes all the tools generally expected
     * to be available for building C/C++ targets, based on the GNU C compiler.
     * System and cpu names are two overlapping concepts, which need to be both
     * supported at this time. The cpu name is the blaze command-line name for the
     * target system. The most common values are 'k8' and 'piii'. The system name is
     * a more generic identification of the executable system, based on the names
     * used by the GNU C compiler.
     * Typically, the system name contains an identifier for the cpu (e.g. x86_64 or
     * alpha), an identifier for the machine (e.g. pc, or unknown), and an
     * identifier for the operating system (e.g. cygwin or linux-gnu). Typical
     * examples are 'x86_64-unknown-linux-gnu' and 'i686-unknown-cygwin'.
     * The system name is used to determine if a given machine can execute a given
     * exectuable. In particular, it is used to check if the compilation products of
     * a toolchain can run on the host machine.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CToolchain}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CToolchain)
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getFeatureFieldBuilder();
          getActionConfigFieldBuilder();
          getArtifactNamePatternFieldBuilder();
          getToolPathFieldBuilder();
          getCompilationModeFlagsFieldBuilder();
          getLipoModeFlagsFieldBuilder();
          getLinkingModeFlagsFieldBuilder();
          getMakeVariableFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        if (featureBuilder_ == null) {
          feature_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          featureBuilder_.clear();
        }
        if (actionConfigBuilder_ == null) {
          actionConfig_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          actionConfigBuilder_.clear();
        }
        if (artifactNamePatternBuilder_ == null) {
          artifactNamePattern_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          artifactNamePatternBuilder_.clear();
        }
        toolchainIdentifier_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        hostSystemName_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        targetSystemName_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        targetCpu_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        targetLibc_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        compiler_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        abiVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        abiLibcVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        if (toolPathBuilder_ == null) {
          toolPath_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          toolPathBuilder_.clear();
        }
        supportsGoldLinker_ = false;
        bitField0_ = (bitField0_ & ~0x00001000);
        supportsThinArchives_ = false;
        bitField0_ = (bitField0_ & ~0x00002000);
        supportsStartEndLib_ = false;
        bitField0_ = (bitField0_ & ~0x00004000);
        supportsInterfaceSharedObjects_ = false;
        bitField0_ = (bitField0_ & ~0x00008000);
        supportsEmbeddedRuntimes_ = false;
        bitField0_ = (bitField0_ & ~0x00010000);
        staticRuntimesFilegroup_ = "";
        bitField0_ = (bitField0_ & ~0x00020000);
        dynamicRuntimesFilegroup_ = "";
        bitField0_ = (bitField0_ & ~0x00040000);
        supportsIncrementalLinker_ = false;
        bitField0_ = (bitField0_ & ~0x00080000);
        supportsNormalizingAr_ = false;
        bitField0_ = (bitField0_ & ~0x00100000);
        supportsFission_ = false;
        bitField0_ = (bitField0_ & ~0x00200000);
        supportsDsym_ = false;
        bitField0_ = (bitField0_ & ~0x00400000);
        needsPic_ = false;
        bitField0_ = (bitField0_ & ~0x00800000);
        compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x01000000);
        cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x02000000);
        unfilteredCxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x04000000);
        linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x08000000);
        dynamicLibraryLinkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x10000000);
        testOnlyLinkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x20000000);
        objcopyEmbedFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x40000000);
        ldEmbedFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x80000000);
        arFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000001);
        arThinArchivesFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000002);
        gccPluginCompilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000004);
        if (compilationModeFlagsBuilder_ == null) {
          compilationModeFlags_ = java.util.Collections.emptyList();
          bitField1_ = (bitField1_ & ~0x00000008);
        } else {
          compilationModeFlagsBuilder_.clear();
        }
        if (lipoModeFlagsBuilder_ == null) {
          lipoModeFlags_ = java.util.Collections.emptyList();
          bitField1_ = (bitField1_ & ~0x00000010);
        } else {
          lipoModeFlagsBuilder_.clear();
        }
        if (linkingModeFlagsBuilder_ == null) {
          linkingModeFlags_ = java.util.Collections.emptyList();
          bitField1_ = (bitField1_ & ~0x00000020);
        } else {
          linkingModeFlagsBuilder_.clear();
        }
        gccPluginHeaderDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000040);
        maoPluginHeaderDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000080);
        if (makeVariableBuilder_ == null) {
          makeVariable_ = java.util.Collections.emptyList();
          bitField1_ = (bitField1_ & ~0x00000100);
        } else {
          makeVariableBuilder_.clear();
        }
        cxxBuiltinIncludeDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000200);
        builtinSysroot_ = "";
        bitField1_ = (bitField1_ & ~0x00000400);
        defaultPythonTop_ = "";
        bitField1_ = (bitField1_ & ~0x00000800);
        defaultPythonVersion_ = "";
        bitField1_ = (bitField1_ & ~0x00001000);
        pythonPreloadSwigdeps_ = false;
        bitField1_ = (bitField1_ & ~0x00002000);
        defaultGrteTop_ = "";
        bitField1_ = (bitField1_ & ~0x00004000);
        debianExtraRequires_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00008000);
        ccTargetOs_ = "";
        bitField1_ = (bitField1_ & ~0x00010000);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain getDefaultInstanceForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.getDefaultInstance();
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain build() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain buildPartial() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain(this);
        int from_bitField0_ = bitField0_;
        int from_bitField1_ = bitField1_;
        int to_bitField0_ = 0;
        if (featureBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            feature_ = java.util.Collections.unmodifiableList(feature_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.feature_ = feature_;
        } else {
          result.feature_ = featureBuilder_.build();
        }
        if (actionConfigBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            actionConfig_ = java.util.Collections.unmodifiableList(actionConfig_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.actionConfig_ = actionConfig_;
        } else {
          result.actionConfig_ = actionConfigBuilder_.build();
        }
        if (artifactNamePatternBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            artifactNamePattern_ = java.util.Collections.unmodifiableList(artifactNamePattern_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.artifactNamePattern_ = artifactNamePattern_;
        } else {
          result.artifactNamePattern_ = artifactNamePatternBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000001;
        }
        result.toolchainIdentifier_ = toolchainIdentifier_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000002;
        }
        result.hostSystemName_ = hostSystemName_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000004;
        }
        result.targetSystemName_ = targetSystemName_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000008;
        }
        result.targetCpu_ = targetCpu_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000010;
        }
        result.targetLibc_ = targetLibc_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000020;
        }
        result.compiler_ = compiler_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000040;
        }
        result.abiVersion_ = abiVersion_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000080;
        }
        result.abiLibcVersion_ = abiLibcVersion_;
        if (toolPathBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800)) {
            toolPath_ = java.util.Collections.unmodifiableList(toolPath_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.toolPath_ = toolPath_;
        } else {
          result.toolPath_ = toolPathBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000100;
        }
        result.supportsGoldLinker_ = supportsGoldLinker_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000200;
        }
        result.supportsThinArchives_ = supportsThinArchives_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.supportsStartEndLib_ = supportsStartEndLib_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.supportsInterfaceSharedObjects_ = supportsInterfaceSharedObjects_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.supportsEmbeddedRuntimes_ = supportsEmbeddedRuntimes_;
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.staticRuntimesFilegroup_ = staticRuntimesFilegroup_;
        if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.dynamicRuntimesFilegroup_ = dynamicRuntimesFilegroup_;
        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
          to_bitField0_ |= 0x00008000;
        }
        result.supportsIncrementalLinker_ = supportsIncrementalLinker_;
        if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
          to_bitField0_ |= 0x00010000;
        }
        result.supportsNormalizingAr_ = supportsNormalizingAr_;
        if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
          to_bitField0_ |= 0x00020000;
        }
        result.supportsFission_ = supportsFission_;
        if (((from_bitField0_ & 0x00400000) == 0x00400000)) {
          to_bitField0_ |= 0x00040000;
        }
        result.supportsDsym_ = supportsDsym_;
        if (((from_bitField0_ & 0x00800000) == 0x00800000)) {
          to_bitField0_ |= 0x00080000;
        }
        result.needsPic_ = needsPic_;
        if (((bitField0_ & 0x01000000) == 0x01000000)) {
          compilerFlag_ = compilerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x01000000);
        }
        result.compilerFlag_ = compilerFlag_;
        if (((bitField0_ & 0x02000000) == 0x02000000)) {
          cxxFlag_ = cxxFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x02000000);
        }
        result.cxxFlag_ = cxxFlag_;
        if (((bitField0_ & 0x04000000) == 0x04000000)) {
          unfilteredCxxFlag_ = unfilteredCxxFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x04000000);
        }
        result.unfilteredCxxFlag_ = unfilteredCxxFlag_;
        if (((bitField0_ & 0x08000000) == 0x08000000)) {
          linkerFlag_ = linkerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x08000000);
        }
        result.linkerFlag_ = linkerFlag_;
        if (((bitField0_ & 0x10000000) == 0x10000000)) {
          dynamicLibraryLinkerFlag_ = dynamicLibraryLinkerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x10000000);
        }
        result.dynamicLibraryLinkerFlag_ = dynamicLibraryLinkerFlag_;
        if (((bitField0_ & 0x20000000) == 0x20000000)) {
          testOnlyLinkerFlag_ = testOnlyLinkerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x20000000);
        }
        result.testOnlyLinkerFlag_ = testOnlyLinkerFlag_;
        if (((bitField0_ & 0x40000000) == 0x40000000)) {
          objcopyEmbedFlag_ = objcopyEmbedFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x40000000);
        }
        result.objcopyEmbedFlag_ = objcopyEmbedFlag_;
        if (((bitField0_ & 0x80000000) == 0x80000000)) {
          ldEmbedFlag_ = ldEmbedFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x80000000);
        }
        result.ldEmbedFlag_ = ldEmbedFlag_;
        if (((bitField1_ & 0x00000001) == 0x00000001)) {
          arFlag_ = arFlag_.getUnmodifiableView();
          bitField1_ = (bitField1_ & ~0x00000001);
        }
        result.arFlag_ = arFlag_;
        if (((bitField1_ & 0x00000002) == 0x00000002)) {
          arThinArchivesFlag_ = arThinArchivesFlag_.getUnmodifiableView();
          bitField1_ = (bitField1_ & ~0x00000002);
        }
        result.arThinArchivesFlag_ = arThinArchivesFlag_;
        if (((bitField1_ & 0x00000004) == 0x00000004)) {
          gccPluginCompilerFlag_ = gccPluginCompilerFlag_.getUnmodifiableView();
          bitField1_ = (bitField1_ & ~0x00000004);
        }
        result.gccPluginCompilerFlag_ = gccPluginCompilerFlag_;
        if (compilationModeFlagsBuilder_ == null) {
          if (((bitField1_ & 0x00000008) == 0x00000008)) {
            compilationModeFlags_ = java.util.Collections.unmodifiableList(compilationModeFlags_);
            bitField1_ = (bitField1_ & ~0x00000008);
          }
          result.compilationModeFlags_ = compilationModeFlags_;
        } else {
          result.compilationModeFlags_ = compilationModeFlagsBuilder_.build();
        }
        if (lipoModeFlagsBuilder_ == null) {
          if (((bitField1_ & 0x00000010) == 0x00000010)) {
            lipoModeFlags_ = java.util.Collections.unmodifiableList(lipoModeFlags_);
            bitField1_ = (bitField1_ & ~0x00000010);
          }
          result.lipoModeFlags_ = lipoModeFlags_;
        } else {
          result.lipoModeFlags_ = lipoModeFlagsBuilder_.build();
        }
        if (linkingModeFlagsBuilder_ == null) {
          if (((bitField1_ & 0x00000020) == 0x00000020)) {
            linkingModeFlags_ = java.util.Collections.unmodifiableList(linkingModeFlags_);
            bitField1_ = (bitField1_ & ~0x00000020);
          }
          result.linkingModeFlags_ = linkingModeFlags_;
        } else {
          result.linkingModeFlags_ = linkingModeFlagsBuilder_.build();
        }
        if (((bitField1_ & 0x00000040) == 0x00000040)) {
          gccPluginHeaderDirectory_ = gccPluginHeaderDirectory_.getUnmodifiableView();
          bitField1_ = (bitField1_ & ~0x00000040);
        }
        result.gccPluginHeaderDirectory_ = gccPluginHeaderDirectory_;
        if (((bitField1_ & 0x00000080) == 0x00000080)) {
          maoPluginHeaderDirectory_ = maoPluginHeaderDirectory_.getUnmodifiableView();
          bitField1_ = (bitField1_ & ~0x00000080);
        }
        result.maoPluginHeaderDirectory_ = maoPluginHeaderDirectory_;
        if (makeVariableBuilder_ == null) {
          if (((bitField1_ & 0x00000100) == 0x00000100)) {
            makeVariable_ = java.util.Collections.unmodifiableList(makeVariable_);
            bitField1_ = (bitField1_ & ~0x00000100);
          }
          result.makeVariable_ = makeVariable_;
        } else {
          result.makeVariable_ = makeVariableBuilder_.build();
        }
        if (((bitField1_ & 0x00000200) == 0x00000200)) {
          cxxBuiltinIncludeDirectory_ = cxxBuiltinIncludeDirectory_.getUnmodifiableView();
          bitField1_ = (bitField1_ & ~0x00000200);
        }
        result.cxxBuiltinIncludeDirectory_ = cxxBuiltinIncludeDirectory_;
        if (((from_bitField1_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00100000;
        }
        result.builtinSysroot_ = builtinSysroot_;
        if (((from_bitField1_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00200000;
        }
        result.defaultPythonTop_ = defaultPythonTop_;
        if (((from_bitField1_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00400000;
        }
        result.defaultPythonVersion_ = defaultPythonVersion_;
        if (((from_bitField1_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00800000;
        }
        result.pythonPreloadSwigdeps_ = pythonPreloadSwigdeps_;
        if (((from_bitField1_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x01000000;
        }
        result.defaultGrteTop_ = defaultGrteTop_;
        if (((bitField1_ & 0x00008000) == 0x00008000)) {
          debianExtraRequires_ = debianExtraRequires_.getUnmodifiableView();
          bitField1_ = (bitField1_ & ~0x00008000);
        }
        result.debianExtraRequires_ = debianExtraRequires_;
        if (((from_bitField1_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x02000000;
        }
        result.ccTargetOs_ = ccTargetOs_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain) {
          return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain other) {
        if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.getDefaultInstance()) return this;
        if (featureBuilder_ == null) {
          if (!other.feature_.isEmpty()) {
            if (feature_.isEmpty()) {
              feature_ = other.feature_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureFeatureIsMutable();
              feature_.addAll(other.feature_);
            }
            onChanged();
          }
        } else {
          if (!other.feature_.isEmpty()) {
            if (featureBuilder_.isEmpty()) {
              featureBuilder_.dispose();
              featureBuilder_ = null;
              feature_ = other.feature_;
              bitField0_ = (bitField0_ & ~0x00000001);
              featureBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getFeatureFieldBuilder() : null;
            } else {
              featureBuilder_.addAllMessages(other.feature_);
            }
          }
        }
        if (actionConfigBuilder_ == null) {
          if (!other.actionConfig_.isEmpty()) {
            if (actionConfig_.isEmpty()) {
              actionConfig_ = other.actionConfig_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureActionConfigIsMutable();
              actionConfig_.addAll(other.actionConfig_);
            }
            onChanged();
          }
        } else {
          if (!other.actionConfig_.isEmpty()) {
            if (actionConfigBuilder_.isEmpty()) {
              actionConfigBuilder_.dispose();
              actionConfigBuilder_ = null;
              actionConfig_ = other.actionConfig_;
              bitField0_ = (bitField0_ & ~0x00000002);
              actionConfigBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getActionConfigFieldBuilder() : null;
            } else {
              actionConfigBuilder_.addAllMessages(other.actionConfig_);
            }
          }
        }
        if (artifactNamePatternBuilder_ == null) {
          if (!other.artifactNamePattern_.isEmpty()) {
            if (artifactNamePattern_.isEmpty()) {
              artifactNamePattern_ = other.artifactNamePattern_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureArtifactNamePatternIsMutable();
              artifactNamePattern_.addAll(other.artifactNamePattern_);
            }
            onChanged();
          }
        } else {
          if (!other.artifactNamePattern_.isEmpty()) {
            if (artifactNamePatternBuilder_.isEmpty()) {
              artifactNamePatternBuilder_.dispose();
              artifactNamePatternBuilder_ = null;
              artifactNamePattern_ = other.artifactNamePattern_;
              bitField0_ = (bitField0_ & ~0x00000004);
              artifactNamePatternBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getArtifactNamePatternFieldBuilder() : null;
            } else {
              artifactNamePatternBuilder_.addAllMessages(other.artifactNamePattern_);
            }
          }
        }
        if (other.hasToolchainIdentifier()) {
          bitField0_ |= 0x00000008;
          toolchainIdentifier_ = other.toolchainIdentifier_;
          onChanged();
        }
        if (other.hasHostSystemName()) {
          bitField0_ |= 0x00000010;
          hostSystemName_ = other.hostSystemName_;
          onChanged();
        }
        if (other.hasTargetSystemName()) {
          bitField0_ |= 0x00000020;
          targetSystemName_ = other.targetSystemName_;
          onChanged();
        }
        if (other.hasTargetCpu()) {
          bitField0_ |= 0x00000040;
          targetCpu_ = other.targetCpu_;
          onChanged();
        }
        if (other.hasTargetLibc()) {
          bitField0_ |= 0x00000080;
          targetLibc_ = other.targetLibc_;
          onChanged();
        }
        if (other.hasCompiler()) {
          bitField0_ |= 0x00000100;
          compiler_ = other.compiler_;
          onChanged();
        }
        if (other.hasAbiVersion()) {
          bitField0_ |= 0x00000200;
          abiVersion_ = other.abiVersion_;
          onChanged();
        }
        if (other.hasAbiLibcVersion()) {
          bitField0_ |= 0x00000400;
          abiLibcVersion_ = other.abiLibcVersion_;
          onChanged();
        }
        if (toolPathBuilder_ == null) {
          if (!other.toolPath_.isEmpty()) {
            if (toolPath_.isEmpty()) {
              toolPath_ = other.toolPath_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensureToolPathIsMutable();
              toolPath_.addAll(other.toolPath_);
            }
            onChanged();
          }
        } else {
          if (!other.toolPath_.isEmpty()) {
            if (toolPathBuilder_.isEmpty()) {
              toolPathBuilder_.dispose();
              toolPathBuilder_ = null;
              toolPath_ = other.toolPath_;
              bitField0_ = (bitField0_ & ~0x00000800);
              toolPathBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getToolPathFieldBuilder() : null;
            } else {
              toolPathBuilder_.addAllMessages(other.toolPath_);
            }
          }
        }
        if (other.hasSupportsGoldLinker()) {
          setSupportsGoldLinker(other.getSupportsGoldLinker());
        }
        if (other.hasSupportsThinArchives()) {
          setSupportsThinArchives(other.getSupportsThinArchives());
        }
        if (other.hasSupportsStartEndLib()) {
          setSupportsStartEndLib(other.getSupportsStartEndLib());
        }
        if (other.hasSupportsInterfaceSharedObjects()) {
          setSupportsInterfaceSharedObjects(other.getSupportsInterfaceSharedObjects());
        }
        if (other.hasSupportsEmbeddedRuntimes()) {
          setSupportsEmbeddedRuntimes(other.getSupportsEmbeddedRuntimes());
        }
        if (other.hasStaticRuntimesFilegroup()) {
          bitField0_ |= 0x00020000;
          staticRuntimesFilegroup_ = other.staticRuntimesFilegroup_;
          onChanged();
        }
        if (other.hasDynamicRuntimesFilegroup()) {
          bitField0_ |= 0x00040000;
          dynamicRuntimesFilegroup_ = other.dynamicRuntimesFilegroup_;
          onChanged();
        }
        if (other.hasSupportsIncrementalLinker()) {
          setSupportsIncrementalLinker(other.getSupportsIncrementalLinker());
        }
        if (other.hasSupportsNormalizingAr()) {
          setSupportsNormalizingAr(other.getSupportsNormalizingAr());
        }
        if (other.hasSupportsFission()) {
          setSupportsFission(other.getSupportsFission());
        }
        if (other.hasSupportsDsym()) {
          setSupportsDsym(other.getSupportsDsym());
        }
        if (other.hasNeedsPic()) {
          setNeedsPic(other.getNeedsPic());
        }
        if (!other.compilerFlag_.isEmpty()) {
          if (compilerFlag_.isEmpty()) {
            compilerFlag_ = other.compilerFlag_;
            bitField0_ = (bitField0_ & ~0x01000000);
          } else {
            ensureCompilerFlagIsMutable();
            compilerFlag_.addAll(other.compilerFlag_);
          }
          onChanged();
        }
        if (!other.cxxFlag_.isEmpty()) {
          if (cxxFlag_.isEmpty()) {
            cxxFlag_ = other.cxxFlag_;
            bitField0_ = (bitField0_ & ~0x02000000);
          } else {
            ensureCxxFlagIsMutable();
            cxxFlag_.addAll(other.cxxFlag_);
          }
          onChanged();
        }
        if (!other.unfilteredCxxFlag_.isEmpty()) {
          if (unfilteredCxxFlag_.isEmpty()) {
            unfilteredCxxFlag_ = other.unfilteredCxxFlag_;
            bitField0_ = (bitField0_ & ~0x04000000);
          } else {
            ensureUnfilteredCxxFlagIsMutable();
            unfilteredCxxFlag_.addAll(other.unfilteredCxxFlag_);
          }
          onChanged();
        }
        if (!other.linkerFlag_.isEmpty()) {
          if (linkerFlag_.isEmpty()) {
            linkerFlag_ = other.linkerFlag_;
            bitField0_ = (bitField0_ & ~0x08000000);
          } else {
            ensureLinkerFlagIsMutable();
            linkerFlag_.addAll(other.linkerFlag_);
          }
          onChanged();
        }
        if (!other.dynamicLibraryLinkerFlag_.isEmpty()) {
          if (dynamicLibraryLinkerFlag_.isEmpty()) {
            dynamicLibraryLinkerFlag_ = other.dynamicLibraryLinkerFlag_;
            bitField0_ = (bitField0_ & ~0x10000000);
          } else {
            ensureDynamicLibraryLinkerFlagIsMutable();
            dynamicLibraryLinkerFlag_.addAll(other.dynamicLibraryLinkerFlag_);
          }
          onChanged();
        }
        if (!other.testOnlyLinkerFlag_.isEmpty()) {
          if (testOnlyLinkerFlag_.isEmpty()) {
            testOnlyLinkerFlag_ = other.testOnlyLinkerFlag_;
            bitField0_ = (bitField0_ & ~0x20000000);
          } else {
            ensureTestOnlyLinkerFlagIsMutable();
            testOnlyLinkerFlag_.addAll(other.testOnlyLinkerFlag_);
          }
          onChanged();
        }
        if (!other.objcopyEmbedFlag_.isEmpty()) {
          if (objcopyEmbedFlag_.isEmpty()) {
            objcopyEmbedFlag_ = other.objcopyEmbedFlag_;
            bitField0_ = (bitField0_ & ~0x40000000);
          } else {
            ensureObjcopyEmbedFlagIsMutable();
            objcopyEmbedFlag_.addAll(other.objcopyEmbedFlag_);
          }
          onChanged();
        }
        if (!other.ldEmbedFlag_.isEmpty()) {
          if (ldEmbedFlag_.isEmpty()) {
            ldEmbedFlag_ = other.ldEmbedFlag_;
            bitField0_ = (bitField0_ & ~0x80000000);
          } else {
            ensureLdEmbedFlagIsMutable();
            ldEmbedFlag_.addAll(other.ldEmbedFlag_);
          }
          onChanged();
        }
        if (!other.arFlag_.isEmpty()) {
          if (arFlag_.isEmpty()) {
            arFlag_ = other.arFlag_;
            bitField1_ = (bitField1_ & ~0x00000001);
          } else {
            ensureArFlagIsMutable();
            arFlag_.addAll(other.arFlag_);
          }
          onChanged();
        }
        if (!other.arThinArchivesFlag_.isEmpty()) {
          if (arThinArchivesFlag_.isEmpty()) {
            arThinArchivesFlag_ = other.arThinArchivesFlag_;
            bitField1_ = (bitField1_ & ~0x00000002);
          } else {
            ensureArThinArchivesFlagIsMutable();
            arThinArchivesFlag_.addAll(other.arThinArchivesFlag_);
          }
          onChanged();
        }
        if (!other.gccPluginCompilerFlag_.isEmpty()) {
          if (gccPluginCompilerFlag_.isEmpty()) {
            gccPluginCompilerFlag_ = other.gccPluginCompilerFlag_;
            bitField1_ = (bitField1_ & ~0x00000004);
          } else {
            ensureGccPluginCompilerFlagIsMutable();
            gccPluginCompilerFlag_.addAll(other.gccPluginCompilerFlag_);
          }
          onChanged();
        }
        if (compilationModeFlagsBuilder_ == null) {
          if (!other.compilationModeFlags_.isEmpty()) {
            if (compilationModeFlags_.isEmpty()) {
              compilationModeFlags_ = other.compilationModeFlags_;
              bitField1_ = (bitField1_ & ~0x00000008);
            } else {
              ensureCompilationModeFlagsIsMutable();
              compilationModeFlags_.addAll(other.compilationModeFlags_);
            }
            onChanged();
          }
        } else {
          if (!other.compilationModeFlags_.isEmpty()) {
            if (compilationModeFlagsBuilder_.isEmpty()) {
              compilationModeFlagsBuilder_.dispose();
              compilationModeFlagsBuilder_ = null;
              compilationModeFlags_ = other.compilationModeFlags_;
              bitField1_ = (bitField1_ & ~0x00000008);
              compilationModeFlagsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getCompilationModeFlagsFieldBuilder() : null;
            } else {
              compilationModeFlagsBuilder_.addAllMessages(other.compilationModeFlags_);
            }
          }
        }
        if (lipoModeFlagsBuilder_ == null) {
          if (!other.lipoModeFlags_.isEmpty()) {
            if (lipoModeFlags_.isEmpty()) {
              lipoModeFlags_ = other.lipoModeFlags_;
              bitField1_ = (bitField1_ & ~0x00000010);
            } else {
              ensureLipoModeFlagsIsMutable();
              lipoModeFlags_.addAll(other.lipoModeFlags_);
            }
            onChanged();
          }
        } else {
          if (!other.lipoModeFlags_.isEmpty()) {
            if (lipoModeFlagsBuilder_.isEmpty()) {
              lipoModeFlagsBuilder_.dispose();
              lipoModeFlagsBuilder_ = null;
              lipoModeFlags_ = other.lipoModeFlags_;
              bitField1_ = (bitField1_ & ~0x00000010);
              lipoModeFlagsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getLipoModeFlagsFieldBuilder() : null;
            } else {
              lipoModeFlagsBuilder_.addAllMessages(other.lipoModeFlags_);
            }
          }
        }
        if (linkingModeFlagsBuilder_ == null) {
          if (!other.linkingModeFlags_.isEmpty()) {
            if (linkingModeFlags_.isEmpty()) {
              linkingModeFlags_ = other.linkingModeFlags_;
              bitField1_ = (bitField1_ & ~0x00000020);
            } else {
              ensureLinkingModeFlagsIsMutable();
              linkingModeFlags_.addAll(other.linkingModeFlags_);
            }
            onChanged();
          }
        } else {
          if (!other.linkingModeFlags_.isEmpty()) {
            if (linkingModeFlagsBuilder_.isEmpty()) {
              linkingModeFlagsBuilder_.dispose();
              linkingModeFlagsBuilder_ = null;
              linkingModeFlags_ = other.linkingModeFlags_;
              bitField1_ = (bitField1_ & ~0x00000020);
              linkingModeFlagsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getLinkingModeFlagsFieldBuilder() : null;
            } else {
              linkingModeFlagsBuilder_.addAllMessages(other.linkingModeFlags_);
            }
          }
        }
        if (!other.gccPluginHeaderDirectory_.isEmpty()) {
          if (gccPluginHeaderDirectory_.isEmpty()) {
            gccPluginHeaderDirectory_ = other.gccPluginHeaderDirectory_;
            bitField1_ = (bitField1_ & ~0x00000040);
          } else {
            ensureGccPluginHeaderDirectoryIsMutable();
            gccPluginHeaderDirectory_.addAll(other.gccPluginHeaderDirectory_);
          }
          onChanged();
        }
        if (!other.maoPluginHeaderDirectory_.isEmpty()) {
          if (maoPluginHeaderDirectory_.isEmpty()) {
            maoPluginHeaderDirectory_ = other.maoPluginHeaderDirectory_;
            bitField1_ = (bitField1_ & ~0x00000080);
          } else {
            ensureMaoPluginHeaderDirectoryIsMutable();
            maoPluginHeaderDirectory_.addAll(other.maoPluginHeaderDirectory_);
          }
          onChanged();
        }
        if (makeVariableBuilder_ == null) {
          if (!other.makeVariable_.isEmpty()) {
            if (makeVariable_.isEmpty()) {
              makeVariable_ = other.makeVariable_;
              bitField1_ = (bitField1_ & ~0x00000100);
            } else {
              ensureMakeVariableIsMutable();
              makeVariable_.addAll(other.makeVariable_);
            }
            onChanged();
          }
        } else {
          if (!other.makeVariable_.isEmpty()) {
            if (makeVariableBuilder_.isEmpty()) {
              makeVariableBuilder_.dispose();
              makeVariableBuilder_ = null;
              makeVariable_ = other.makeVariable_;
              bitField1_ = (bitField1_ & ~0x00000100);
              makeVariableBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMakeVariableFieldBuilder() : null;
            } else {
              makeVariableBuilder_.addAllMessages(other.makeVariable_);
            }
          }
        }
        if (!other.cxxBuiltinIncludeDirectory_.isEmpty()) {
          if (cxxBuiltinIncludeDirectory_.isEmpty()) {
            cxxBuiltinIncludeDirectory_ = other.cxxBuiltinIncludeDirectory_;
            bitField1_ = (bitField1_ & ~0x00000200);
          } else {
            ensureCxxBuiltinIncludeDirectoryIsMutable();
            cxxBuiltinIncludeDirectory_.addAll(other.cxxBuiltinIncludeDirectory_);
          }
          onChanged();
        }
        if (other.hasBuiltinSysroot()) {
          bitField1_ |= 0x00000400;
          builtinSysroot_ = other.builtinSysroot_;
          onChanged();
        }
        if (other.hasDefaultPythonTop()) {
          bitField1_ |= 0x00000800;
          defaultPythonTop_ = other.defaultPythonTop_;
          onChanged();
        }
        if (other.hasDefaultPythonVersion()) {
          bitField1_ |= 0x00001000;
          defaultPythonVersion_ = other.defaultPythonVersion_;
          onChanged();
        }
        if (other.hasPythonPreloadSwigdeps()) {
          setPythonPreloadSwigdeps(other.getPythonPreloadSwigdeps());
        }
        if (other.hasDefaultGrteTop()) {
          bitField1_ |= 0x00004000;
          defaultGrteTop_ = other.defaultGrteTop_;
          onChanged();
        }
        if (!other.debianExtraRequires_.isEmpty()) {
          if (debianExtraRequires_.isEmpty()) {
            debianExtraRequires_ = other.debianExtraRequires_;
            bitField1_ = (bitField1_ & ~0x00008000);
          } else {
            ensureDebianExtraRequiresIsMutable();
            debianExtraRequires_.addAll(other.debianExtraRequires_);
          }
          onChanged();
        }
        if (other.hasCcTargetOs()) {
          bitField1_ |= 0x00010000;
          ccTargetOs_ = other.ccTargetOs_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasToolchainIdentifier()) {
          return false;
        }
        if (!hasHostSystemName()) {
          return false;
        }
        if (!hasTargetSystemName()) {
          return false;
        }
        if (!hasTargetCpu()) {
          return false;
        }
        if (!hasTargetLibc()) {
          return false;
        }
        if (!hasCompiler()) {
          return false;
        }
        if (!hasAbiVersion()) {
          return false;
        }
        if (!hasAbiLibcVersion()) {
          return false;
        }
        for (int i = 0; i < getFeatureCount(); i++) {
          if (!getFeature(i).isInitialized()) {
            return false;
          }
        }
        for (int i = 0; i < getActionConfigCount(); i++) {
          if (!getActionConfig(i).isInitialized()) {
            return false;
          }
        }
        for (int i = 0; i < getArtifactNamePatternCount(); i++) {
          if (!getArtifactNamePattern(i).isInitialized()) {
            return false;
          }
        }
        for (int i = 0; i < getToolPathCount(); i++) {
          if (!getToolPath(i).isInitialized()) {
            return false;
          }
        }
        for (int i = 0; i < getCompilationModeFlagsCount(); i++) {
          if (!getCompilationModeFlags(i).isInitialized()) {
            return false;
          }
        }
        for (int i = 0; i < getLipoModeFlagsCount(); i++) {
          if (!getLipoModeFlags(i).isInitialized()) {
            return false;
          }
        }
        for (int i = 0; i < getLinkingModeFlagsCount(); i++) {
          if (!getLinkingModeFlags(i).isInitialized()) {
            return false;
          }
        }
        for (int i = 0; i < getMakeVariableCount(); i++) {
          if (!getMakeVariable(i).isInitialized()) {
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;
      private int bitField1_;

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature> feature_ =
        java.util.Collections.emptyList();
      private void ensureFeatureIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          feature_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature>(feature_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder> featureBuilder_;

      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature> getFeatureList() {
        if (featureBuilder_ == null) {
          return java.util.Collections.unmodifiableList(feature_);
        } else {
          return featureBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public int getFeatureCount() {
        if (featureBuilder_ == null) {
          return feature_.size();
        } else {
          return featureBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature getFeature(int index) {
        if (featureBuilder_ == null) {
          return feature_.get(index);
        } else {
          return featureBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder setFeature(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature value) {
        if (featureBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFeatureIsMutable();
          feature_.set(index, value);
          onChanged();
        } else {
          featureBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder setFeature(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder builderForValue) {
        if (featureBuilder_ == null) {
          ensureFeatureIsMutable();
          feature_.set(index, builderForValue.build());
          onChanged();
        } else {
          featureBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder addFeature(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature value) {
        if (featureBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFeatureIsMutable();
          feature_.add(value);
          onChanged();
        } else {
          featureBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder addFeature(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature value) {
        if (featureBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFeatureIsMutable();
          feature_.add(index, value);
          onChanged();
        } else {
          featureBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder addFeature(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder builderForValue) {
        if (featureBuilder_ == null) {
          ensureFeatureIsMutable();
          feature_.add(builderForValue.build());
          onChanged();
        } else {
          featureBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder addFeature(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder builderForValue) {
        if (featureBuilder_ == null) {
          ensureFeatureIsMutable();
          feature_.add(index, builderForValue.build());
          onChanged();
        } else {
          featureBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder addAllFeature(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature> values) {
        if (featureBuilder_ == null) {
          ensureFeatureIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, feature_);
          onChanged();
        } else {
          featureBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder clearFeature() {
        if (featureBuilder_ == null) {
          feature_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          featureBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public Builder removeFeature(int index) {
        if (featureBuilder_ == null) {
          ensureFeatureIsMutable();
          feature_.remove(index);
          onChanged();
        } else {
          featureBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder getFeatureBuilder(
          int index) {
        return getFeatureFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder getFeatureOrBuilder(
          int index) {
        if (featureBuilder_ == null) {
          return feature_.get(index);  } else {
          return featureBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder> 
           getFeatureOrBuilderList() {
        if (featureBuilder_ != null) {
          return featureBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(feature_);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder addFeatureBuilder() {
        return getFeatureFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.getDefaultInstance());
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder addFeatureBuilder(
          int index) {
        return getFeatureFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.getDefaultInstance());
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.Feature feature = 50;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder> 
           getFeatureBuilderList() {
        return getFeatureFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder> 
          getFeatureFieldBuilder() {
        if (featureBuilder_ == null) {
          featureBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Feature.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.FeatureOrBuilder>(
                  feature_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          feature_ = null;
        }
        return featureBuilder_;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig> actionConfig_ =
        java.util.Collections.emptyList();
      private void ensureActionConfigIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          actionConfig_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig>(actionConfig_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder> actionConfigBuilder_;

      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig> getActionConfigList() {
        if (actionConfigBuilder_ == null) {
          return java.util.Collections.unmodifiableList(actionConfig_);
        } else {
          return actionConfigBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public int getActionConfigCount() {
        if (actionConfigBuilder_ == null) {
          return actionConfig_.size();
        } else {
          return actionConfigBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig getActionConfig(int index) {
        if (actionConfigBuilder_ == null) {
          return actionConfig_.get(index);
        } else {
          return actionConfigBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder setActionConfig(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig value) {
        if (actionConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActionConfigIsMutable();
          actionConfig_.set(index, value);
          onChanged();
        } else {
          actionConfigBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder setActionConfig(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder builderForValue) {
        if (actionConfigBuilder_ == null) {
          ensureActionConfigIsMutable();
          actionConfig_.set(index, builderForValue.build());
          onChanged();
        } else {
          actionConfigBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder addActionConfig(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig value) {
        if (actionConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActionConfigIsMutable();
          actionConfig_.add(value);
          onChanged();
        } else {
          actionConfigBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder addActionConfig(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig value) {
        if (actionConfigBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureActionConfigIsMutable();
          actionConfig_.add(index, value);
          onChanged();
        } else {
          actionConfigBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder addActionConfig(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder builderForValue) {
        if (actionConfigBuilder_ == null) {
          ensureActionConfigIsMutable();
          actionConfig_.add(builderForValue.build());
          onChanged();
        } else {
          actionConfigBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder addActionConfig(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder builderForValue) {
        if (actionConfigBuilder_ == null) {
          ensureActionConfigIsMutable();
          actionConfig_.add(index, builderForValue.build());
          onChanged();
        } else {
          actionConfigBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder addAllActionConfig(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig> values) {
        if (actionConfigBuilder_ == null) {
          ensureActionConfigIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, actionConfig_);
          onChanged();
        } else {
          actionConfigBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder clearActionConfig() {
        if (actionConfigBuilder_ == null) {
          actionConfig_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          actionConfigBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public Builder removeActionConfig(int index) {
        if (actionConfigBuilder_ == null) {
          ensureActionConfigIsMutable();
          actionConfig_.remove(index);
          onChanged();
        } else {
          actionConfigBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder getActionConfigBuilder(
          int index) {
        return getActionConfigFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder getActionConfigOrBuilder(
          int index) {
        if (actionConfigBuilder_ == null) {
          return actionConfig_.get(index);  } else {
          return actionConfigBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder> 
           getActionConfigOrBuilderList() {
        if (actionConfigBuilder_ != null) {
          return actionConfigBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(actionConfig_);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder addActionConfigBuilder() {
        return getActionConfigFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.getDefaultInstance());
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder addActionConfigBuilder(
          int index) {
        return getActionConfigFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.getDefaultInstance());
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ActionConfig action_config = 53;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder> 
           getActionConfigBuilderList() {
        return getActionConfigFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder> 
          getActionConfigFieldBuilder() {
        if (actionConfigBuilder_ == null) {
          actionConfigBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfig.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ActionConfigOrBuilder>(
                  actionConfig_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          actionConfig_ = null;
        }
        return actionConfigBuilder_;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern> artifactNamePattern_ =
        java.util.Collections.emptyList();
      private void ensureArtifactNamePatternIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          artifactNamePattern_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern>(artifactNamePattern_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder> artifactNamePatternBuilder_;

      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern> getArtifactNamePatternList() {
        if (artifactNamePatternBuilder_ == null) {
          return java.util.Collections.unmodifiableList(artifactNamePattern_);
        } else {
          return artifactNamePatternBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public int getArtifactNamePatternCount() {
        if (artifactNamePatternBuilder_ == null) {
          return artifactNamePattern_.size();
        } else {
          return artifactNamePatternBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern getArtifactNamePattern(int index) {
        if (artifactNamePatternBuilder_ == null) {
          return artifactNamePattern_.get(index);
        } else {
          return artifactNamePatternBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder setArtifactNamePattern(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern value) {
        if (artifactNamePatternBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtifactNamePatternIsMutable();
          artifactNamePattern_.set(index, value);
          onChanged();
        } else {
          artifactNamePatternBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder setArtifactNamePattern(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder builderForValue) {
        if (artifactNamePatternBuilder_ == null) {
          ensureArtifactNamePatternIsMutable();
          artifactNamePattern_.set(index, builderForValue.build());
          onChanged();
        } else {
          artifactNamePatternBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder addArtifactNamePattern(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern value) {
        if (artifactNamePatternBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtifactNamePatternIsMutable();
          artifactNamePattern_.add(value);
          onChanged();
        } else {
          artifactNamePatternBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder addArtifactNamePattern(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern value) {
        if (artifactNamePatternBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtifactNamePatternIsMutable();
          artifactNamePattern_.add(index, value);
          onChanged();
        } else {
          artifactNamePatternBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder addArtifactNamePattern(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder builderForValue) {
        if (artifactNamePatternBuilder_ == null) {
          ensureArtifactNamePatternIsMutable();
          artifactNamePattern_.add(builderForValue.build());
          onChanged();
        } else {
          artifactNamePatternBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder addArtifactNamePattern(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder builderForValue) {
        if (artifactNamePatternBuilder_ == null) {
          ensureArtifactNamePatternIsMutable();
          artifactNamePattern_.add(index, builderForValue.build());
          onChanged();
        } else {
          artifactNamePatternBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder addAllArtifactNamePattern(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern> values) {
        if (artifactNamePatternBuilder_ == null) {
          ensureArtifactNamePatternIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, artifactNamePattern_);
          onChanged();
        } else {
          artifactNamePatternBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder clearArtifactNamePattern() {
        if (artifactNamePatternBuilder_ == null) {
          artifactNamePattern_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          artifactNamePatternBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public Builder removeArtifactNamePattern(int index) {
        if (artifactNamePatternBuilder_ == null) {
          ensureArtifactNamePatternIsMutable();
          artifactNamePattern_.remove(index);
          onChanged();
        } else {
          artifactNamePatternBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder getArtifactNamePatternBuilder(
          int index) {
        return getArtifactNamePatternFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder getArtifactNamePatternOrBuilder(
          int index) {
        if (artifactNamePatternBuilder_ == null) {
          return artifactNamePattern_.get(index);  } else {
          return artifactNamePatternBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder> 
           getArtifactNamePatternOrBuilderList() {
        if (artifactNamePatternBuilder_ != null) {
          return artifactNamePatternBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(artifactNamePattern_);
        }
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder addArtifactNamePatternBuilder() {
        return getArtifactNamePatternFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.getDefaultInstance());
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder addArtifactNamePatternBuilder(
          int index) {
        return getArtifactNamePatternFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.getDefaultInstance());
      }
      /**
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain.ArtifactNamePattern artifact_name_pattern = 54;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder> 
           getArtifactNamePatternBuilderList() {
        return getArtifactNamePatternFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder> 
          getArtifactNamePatternFieldBuilder() {
        if (artifactNamePatternBuilder_ == null) {
          artifactNamePatternBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePattern.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.ArtifactNamePatternOrBuilder>(
                  artifactNamePattern_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          artifactNamePattern_ = null;
        }
        return artifactNamePatternBuilder_;
      }

      private java.lang.Object toolchainIdentifier_ = "";
      /**
       * <pre>
       * The unique identifier of the toolchain within the crosstool release. It
       * must be possible to use this as a directory name in a path.
       * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
       * </pre>
       *
       * <code>required string toolchain_identifier = 1;</code>
       */
      public boolean hasToolchainIdentifier() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * The unique identifier of the toolchain within the crosstool release. It
       * must be possible to use this as a directory name in a path.
       * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
       * </pre>
       *
       * <code>required string toolchain_identifier = 1;</code>
       */
      public java.lang.String getToolchainIdentifier() {
        java.lang.Object ref = toolchainIdentifier_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            toolchainIdentifier_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The unique identifier of the toolchain within the crosstool release. It
       * must be possible to use this as a directory name in a path.
       * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
       * </pre>
       *
       * <code>required string toolchain_identifier = 1;</code>
       */
      public com.google.protobuf.ByteString
          getToolchainIdentifierBytes() {
        java.lang.Object ref = toolchainIdentifier_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          toolchainIdentifier_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The unique identifier of the toolchain within the crosstool release. It
       * must be possible to use this as a directory name in a path.
       * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
       * </pre>
       *
       * <code>required string toolchain_identifier = 1;</code>
       */
      public Builder setToolchainIdentifier(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        toolchainIdentifier_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The unique identifier of the toolchain within the crosstool release. It
       * must be possible to use this as a directory name in a path.
       * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
       * </pre>
       *
       * <code>required string toolchain_identifier = 1;</code>
       */
      public Builder clearToolchainIdentifier() {
        bitField0_ = (bitField0_ & ~0x00000008);
        toolchainIdentifier_ = getDefaultInstance().getToolchainIdentifier();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The unique identifier of the toolchain within the crosstool release. It
       * must be possible to use this as a directory name in a path.
       * It has to match the following regex: [a-zA-Z_][&#92;.&#92;- &#92;w]*
       * </pre>
       *
       * <code>required string toolchain_identifier = 1;</code>
       */
      public Builder setToolchainIdentifierBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        toolchainIdentifier_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object hostSystemName_ = "";
      /**
       * <pre>
       * A basic toolchain description.
       * </pre>
       *
       * <code>required string host_system_name = 2;</code>
       */
      public boolean hasHostSystemName() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * A basic toolchain description.
       * </pre>
       *
       * <code>required string host_system_name = 2;</code>
       */
      public java.lang.String getHostSystemName() {
        java.lang.Object ref = hostSystemName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            hostSystemName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * A basic toolchain description.
       * </pre>
       *
       * <code>required string host_system_name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getHostSystemNameBytes() {
        java.lang.Object ref = hostSystemName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          hostSystemName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * A basic toolchain description.
       * </pre>
       *
       * <code>required string host_system_name = 2;</code>
       */
      public Builder setHostSystemName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        hostSystemName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A basic toolchain description.
       * </pre>
       *
       * <code>required string host_system_name = 2;</code>
       */
      public Builder clearHostSystemName() {
        bitField0_ = (bitField0_ & ~0x00000010);
        hostSystemName_ = getDefaultInstance().getHostSystemName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * A basic toolchain description.
       * </pre>
       *
       * <code>required string host_system_name = 2;</code>
       */
      public Builder setHostSystemNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        hostSystemName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object targetSystemName_ = "";
      /**
       * <code>required string target_system_name = 3;</code>
       */
      public boolean hasTargetSystemName() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>required string target_system_name = 3;</code>
       */
      public java.lang.String getTargetSystemName() {
        java.lang.Object ref = targetSystemName_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            targetSystemName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string target_system_name = 3;</code>
       */
      public com.google.protobuf.ByteString
          getTargetSystemNameBytes() {
        java.lang.Object ref = targetSystemName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          targetSystemName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string target_system_name = 3;</code>
       */
      public Builder setTargetSystemName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        targetSystemName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string target_system_name = 3;</code>
       */
      public Builder clearTargetSystemName() {
        bitField0_ = (bitField0_ & ~0x00000020);
        targetSystemName_ = getDefaultInstance().getTargetSystemName();
        onChanged();
        return this;
      }
      /**
       * <code>required string target_system_name = 3;</code>
       */
      public Builder setTargetSystemNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        targetSystemName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object targetCpu_ = "";
      /**
       * <code>required string target_cpu = 4;</code>
       */
      public boolean hasTargetCpu() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>required string target_cpu = 4;</code>
       */
      public java.lang.String getTargetCpu() {
        java.lang.Object ref = targetCpu_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            targetCpu_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string target_cpu = 4;</code>
       */
      public com.google.protobuf.ByteString
          getTargetCpuBytes() {
        java.lang.Object ref = targetCpu_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          targetCpu_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string target_cpu = 4;</code>
       */
      public Builder setTargetCpu(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        targetCpu_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string target_cpu = 4;</code>
       */
      public Builder clearTargetCpu() {
        bitField0_ = (bitField0_ & ~0x00000040);
        targetCpu_ = getDefaultInstance().getTargetCpu();
        onChanged();
        return this;
      }
      /**
       * <code>required string target_cpu = 4;</code>
       */
      public Builder setTargetCpuBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        targetCpu_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object targetLibc_ = "";
      /**
       * <code>required string target_libc = 5;</code>
       */
      public boolean hasTargetLibc() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>required string target_libc = 5;</code>
       */
      public java.lang.String getTargetLibc() {
        java.lang.Object ref = targetLibc_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            targetLibc_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string target_libc = 5;</code>
       */
      public com.google.protobuf.ByteString
          getTargetLibcBytes() {
        java.lang.Object ref = targetLibc_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          targetLibc_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string target_libc = 5;</code>
       */
      public Builder setTargetLibc(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        targetLibc_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string target_libc = 5;</code>
       */
      public Builder clearTargetLibc() {
        bitField0_ = (bitField0_ & ~0x00000080);
        targetLibc_ = getDefaultInstance().getTargetLibc();
        onChanged();
        return this;
      }
      /**
       * <code>required string target_libc = 5;</code>
       */
      public Builder setTargetLibcBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        targetLibc_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object compiler_ = "";
      /**
       * <code>required string compiler = 6;</code>
       */
      public boolean hasCompiler() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>required string compiler = 6;</code>
       */
      public java.lang.String getCompiler() {
        java.lang.Object ref = compiler_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            compiler_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string compiler = 6;</code>
       */
      public com.google.protobuf.ByteString
          getCompilerBytes() {
        java.lang.Object ref = compiler_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          compiler_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string compiler = 6;</code>
       */
      public Builder setCompiler(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        compiler_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string compiler = 6;</code>
       */
      public Builder clearCompiler() {
        bitField0_ = (bitField0_ & ~0x00000100);
        compiler_ = getDefaultInstance().getCompiler();
        onChanged();
        return this;
      }
      /**
       * <code>required string compiler = 6;</code>
       */
      public Builder setCompilerBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        compiler_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object abiVersion_ = "";
      /**
       * <code>required string abi_version = 7;</code>
       */
      public boolean hasAbiVersion() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>required string abi_version = 7;</code>
       */
      public java.lang.String getAbiVersion() {
        java.lang.Object ref = abiVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            abiVersion_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string abi_version = 7;</code>
       */
      public com.google.protobuf.ByteString
          getAbiVersionBytes() {
        java.lang.Object ref = abiVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          abiVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string abi_version = 7;</code>
       */
      public Builder setAbiVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        abiVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string abi_version = 7;</code>
       */
      public Builder clearAbiVersion() {
        bitField0_ = (bitField0_ & ~0x00000200);
        abiVersion_ = getDefaultInstance().getAbiVersion();
        onChanged();
        return this;
      }
      /**
       * <code>required string abi_version = 7;</code>
       */
      public Builder setAbiVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        abiVersion_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object abiLibcVersion_ = "";
      /**
       * <code>required string abi_libc_version = 8;</code>
       */
      public boolean hasAbiLibcVersion() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>required string abi_libc_version = 8;</code>
       */
      public java.lang.String getAbiLibcVersion() {
        java.lang.Object ref = abiLibcVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            abiLibcVersion_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string abi_libc_version = 8;</code>
       */
      public com.google.protobuf.ByteString
          getAbiLibcVersionBytes() {
        java.lang.Object ref = abiLibcVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          abiLibcVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string abi_libc_version = 8;</code>
       */
      public Builder setAbiLibcVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        abiLibcVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string abi_libc_version = 8;</code>
       */
      public Builder clearAbiLibcVersion() {
        bitField0_ = (bitField0_ & ~0x00000400);
        abiLibcVersion_ = getDefaultInstance().getAbiLibcVersion();
        onChanged();
        return this;
      }
      /**
       * <code>required string abi_libc_version = 8;</code>
       */
      public Builder setAbiLibcVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        abiLibcVersion_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath> toolPath_ =
        java.util.Collections.emptyList();
      private void ensureToolPathIsMutable() {
        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
          toolPath_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath>(toolPath_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder> toolPathBuilder_;

      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath> getToolPathList() {
        if (toolPathBuilder_ == null) {
          return java.util.Collections.unmodifiableList(toolPath_);
        } else {
          return toolPathBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public int getToolPathCount() {
        if (toolPathBuilder_ == null) {
          return toolPath_.size();
        } else {
          return toolPathBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath getToolPath(int index) {
        if (toolPathBuilder_ == null) {
          return toolPath_.get(index);
        } else {
          return toolPathBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder setToolPath(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath value) {
        if (toolPathBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureToolPathIsMutable();
          toolPath_.set(index, value);
          onChanged();
        } else {
          toolPathBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder setToolPath(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder builderForValue) {
        if (toolPathBuilder_ == null) {
          ensureToolPathIsMutable();
          toolPath_.set(index, builderForValue.build());
          onChanged();
        } else {
          toolPathBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder addToolPath(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath value) {
        if (toolPathBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureToolPathIsMutable();
          toolPath_.add(value);
          onChanged();
        } else {
          toolPathBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder addToolPath(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath value) {
        if (toolPathBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureToolPathIsMutable();
          toolPath_.add(index, value);
          onChanged();
        } else {
          toolPathBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder addToolPath(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder builderForValue) {
        if (toolPathBuilder_ == null) {
          ensureToolPathIsMutable();
          toolPath_.add(builderForValue.build());
          onChanged();
        } else {
          toolPathBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder addToolPath(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder builderForValue) {
        if (toolPathBuilder_ == null) {
          ensureToolPathIsMutable();
          toolPath_.add(index, builderForValue.build());
          onChanged();
        } else {
          toolPathBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder addAllToolPath(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath> values) {
        if (toolPathBuilder_ == null) {
          ensureToolPathIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, toolPath_);
          onChanged();
        } else {
          toolPathBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder clearToolPath() {
        if (toolPathBuilder_ == null) {
          toolPath_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          toolPathBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public Builder removeToolPath(int index) {
        if (toolPathBuilder_ == null) {
          ensureToolPathIsMutable();
          toolPath_.remove(index);
          onChanged();
        } else {
          toolPathBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder getToolPathBuilder(
          int index) {
        return getToolPathFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder getToolPathOrBuilder(
          int index) {
        if (toolPathBuilder_ == null) {
          return toolPath_.get(index);  } else {
          return toolPathBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder> 
           getToolPathOrBuilderList() {
        if (toolPathBuilder_ != null) {
          return toolPathBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(toolPath_);
        }
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder addToolPathBuilder() {
        return getToolPathFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.getDefaultInstance());
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder addToolPathBuilder(
          int index) {
        return getToolPathFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.getDefaultInstance());
      }
      /**
       * <pre>
       * Tool locations. Relative paths are resolved relative to the configuration
       * file directory.
       * NOTE: DEPRECATED. Prefer specifying an ActionConfig for the action that
       * needs the tool.
       * TODO(b/27903698) migrate to ActionConfig.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.ToolPath tool_path = 9;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder> 
           getToolPathBuilderList() {
        return getToolPathFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder> 
          getToolPathFieldBuilder() {
        if (toolPathBuilder_ == null) {
          toolPathBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder>(
                  toolPath_,
                  ((bitField0_ & 0x00000800) == 0x00000800),
                  getParentForChildren(),
                  isClean());
          toolPath_ = null;
        }
        return toolPathBuilder_;
      }

      private boolean supportsGoldLinker_ ;
      /**
       * <pre>
       * Feature flags.
       * TODO(bazel-team): Sink those into 'Feature' instances.
       * </pre>
       *
       * <code>optional bool supports_gold_linker = 10 [default = false];</code>
       */
      public boolean hasSupportsGoldLinker() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <pre>
       * Feature flags.
       * TODO(bazel-team): Sink those into 'Feature' instances.
       * </pre>
       *
       * <code>optional bool supports_gold_linker = 10 [default = false];</code>
       */
      public boolean getSupportsGoldLinker() {
        return supportsGoldLinker_;
      }
      /**
       * <pre>
       * Feature flags.
       * TODO(bazel-team): Sink those into 'Feature' instances.
       * </pre>
       *
       * <code>optional bool supports_gold_linker = 10 [default = false];</code>
       */
      public Builder setSupportsGoldLinker(boolean value) {
        bitField0_ |= 0x00001000;
        supportsGoldLinker_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Feature flags.
       * TODO(bazel-team): Sink those into 'Feature' instances.
       * </pre>
       *
       * <code>optional bool supports_gold_linker = 10 [default = false];</code>
       */
      public Builder clearSupportsGoldLinker() {
        bitField0_ = (bitField0_ & ~0x00001000);
        supportsGoldLinker_ = false;
        onChanged();
        return this;
      }

      private boolean supportsThinArchives_ ;
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>optional bool supports_thin_archives = 11 [default = false];</code>
       */
      public boolean hasSupportsThinArchives() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>optional bool supports_thin_archives = 11 [default = false];</code>
       */
      public boolean getSupportsThinArchives() {
        return supportsThinArchives_;
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>optional bool supports_thin_archives = 11 [default = false];</code>
       */
      public Builder setSupportsThinArchives(boolean value) {
        bitField0_ |= 0x00002000;
        supportsThinArchives_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>optional bool supports_thin_archives = 11 [default = false];</code>
       */
      public Builder clearSupportsThinArchives() {
        bitField0_ = (bitField0_ & ~0x00002000);
        supportsThinArchives_ = false;
        onChanged();
        return this;
      }

      private boolean supportsStartEndLib_ ;
      /**
       * <code>optional bool supports_start_end_lib = 28 [default = false];</code>
       */
      public boolean hasSupportsStartEndLib() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <code>optional bool supports_start_end_lib = 28 [default = false];</code>
       */
      public boolean getSupportsStartEndLib() {
        return supportsStartEndLib_;
      }
      /**
       * <code>optional bool supports_start_end_lib = 28 [default = false];</code>
       */
      public Builder setSupportsStartEndLib(boolean value) {
        bitField0_ |= 0x00004000;
        supportsStartEndLib_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool supports_start_end_lib = 28 [default = false];</code>
       */
      public Builder clearSupportsStartEndLib() {
        bitField0_ = (bitField0_ & ~0x00004000);
        supportsStartEndLib_ = false;
        onChanged();
        return this;
      }

      private boolean supportsInterfaceSharedObjects_ ;
      /**
       * <code>optional bool supports_interface_shared_objects = 32 [default = false];</code>
       */
      public boolean hasSupportsInterfaceSharedObjects() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       * <code>optional bool supports_interface_shared_objects = 32 [default = false];</code>
       */
      public boolean getSupportsInterfaceSharedObjects() {
        return supportsInterfaceSharedObjects_;
      }
      /**
       * <code>optional bool supports_interface_shared_objects = 32 [default = false];</code>
       */
      public Builder setSupportsInterfaceSharedObjects(boolean value) {
        bitField0_ |= 0x00008000;
        supportsInterfaceSharedObjects_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool supports_interface_shared_objects = 32 [default = false];</code>
       */
      public Builder clearSupportsInterfaceSharedObjects() {
        bitField0_ = (bitField0_ & ~0x00008000);
        supportsInterfaceSharedObjects_ = false;
        onChanged();
        return this;
      }

      private boolean supportsEmbeddedRuntimes_ ;
      /**
       * <code>optional bool supports_embedded_runtimes = 40 [default = false];</code>
       */
      public boolean hasSupportsEmbeddedRuntimes() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <code>optional bool supports_embedded_runtimes = 40 [default = false];</code>
       */
      public boolean getSupportsEmbeddedRuntimes() {
        return supportsEmbeddedRuntimes_;
      }
      /**
       * <code>optional bool supports_embedded_runtimes = 40 [default = false];</code>
       */
      public Builder setSupportsEmbeddedRuntimes(boolean value) {
        bitField0_ |= 0x00010000;
        supportsEmbeddedRuntimes_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool supports_embedded_runtimes = 40 [default = false];</code>
       */
      public Builder clearSupportsEmbeddedRuntimes() {
        bitField0_ = (bitField0_ & ~0x00010000);
        supportsEmbeddedRuntimes_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object staticRuntimesFilegroup_ = "";
      /**
       * <pre>
       * If specified, Blaze finds statically linked / dynamically linked runtime
       * libraries in the declared crosstool filegroup. Otherwise, Blaze
       * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
       * </pre>
       *
       * <code>optional string static_runtimes_filegroup = 45;</code>
       */
      public boolean hasStaticRuntimesFilegroup() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       * <pre>
       * If specified, Blaze finds statically linked / dynamically linked runtime
       * libraries in the declared crosstool filegroup. Otherwise, Blaze
       * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
       * </pre>
       *
       * <code>optional string static_runtimes_filegroup = 45;</code>
       */
      public java.lang.String getStaticRuntimesFilegroup() {
        java.lang.Object ref = staticRuntimesFilegroup_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            staticRuntimesFilegroup_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * If specified, Blaze finds statically linked / dynamically linked runtime
       * libraries in the declared crosstool filegroup. Otherwise, Blaze
       * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
       * </pre>
       *
       * <code>optional string static_runtimes_filegroup = 45;</code>
       */
      public com.google.protobuf.ByteString
          getStaticRuntimesFilegroupBytes() {
        java.lang.Object ref = staticRuntimesFilegroup_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          staticRuntimesFilegroup_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * If specified, Blaze finds statically linked / dynamically linked runtime
       * libraries in the declared crosstool filegroup. Otherwise, Blaze
       * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
       * </pre>
       *
       * <code>optional string static_runtimes_filegroup = 45;</code>
       */
      public Builder setStaticRuntimesFilegroup(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00020000;
        staticRuntimesFilegroup_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * If specified, Blaze finds statically linked / dynamically linked runtime
       * libraries in the declared crosstool filegroup. Otherwise, Blaze
       * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
       * </pre>
       *
       * <code>optional string static_runtimes_filegroup = 45;</code>
       */
      public Builder clearStaticRuntimesFilegroup() {
        bitField0_ = (bitField0_ & ~0x00020000);
        staticRuntimesFilegroup_ = getDefaultInstance().getStaticRuntimesFilegroup();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * If specified, Blaze finds statically linked / dynamically linked runtime
       * libraries in the declared crosstool filegroup. Otherwise, Blaze
       * looks in "[static|dynamic]-runtime-libs-$TARGET_CPU".
       * </pre>
       *
       * <code>optional string static_runtimes_filegroup = 45;</code>
       */
      public Builder setStaticRuntimesFilegroupBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00020000;
        staticRuntimesFilegroup_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object dynamicRuntimesFilegroup_ = "";
      /**
       * <code>optional string dynamic_runtimes_filegroup = 46;</code>
       */
      public boolean hasDynamicRuntimesFilegroup() {
        return ((bitField0_ & 0x00040000) == 0x00040000);
      }
      /**
       * <code>optional string dynamic_runtimes_filegroup = 46;</code>
       */
      public java.lang.String getDynamicRuntimesFilegroup() {
        java.lang.Object ref = dynamicRuntimesFilegroup_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            dynamicRuntimesFilegroup_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string dynamic_runtimes_filegroup = 46;</code>
       */
      public com.google.protobuf.ByteString
          getDynamicRuntimesFilegroupBytes() {
        java.lang.Object ref = dynamicRuntimesFilegroup_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          dynamicRuntimesFilegroup_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string dynamic_runtimes_filegroup = 46;</code>
       */
      public Builder setDynamicRuntimesFilegroup(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00040000;
        dynamicRuntimesFilegroup_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string dynamic_runtimes_filegroup = 46;</code>
       */
      public Builder clearDynamicRuntimesFilegroup() {
        bitField0_ = (bitField0_ & ~0x00040000);
        dynamicRuntimesFilegroup_ = getDefaultInstance().getDynamicRuntimesFilegroup();
        onChanged();
        return this;
      }
      /**
       * <code>optional string dynamic_runtimes_filegroup = 46;</code>
       */
      public Builder setDynamicRuntimesFilegroupBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00040000;
        dynamicRuntimesFilegroup_ = value;
        onChanged();
        return this;
      }

      private boolean supportsIncrementalLinker_ ;
      /**
       * <code>optional bool supports_incremental_linker = 41 [default = false];</code>
       */
      public boolean hasSupportsIncrementalLinker() {
        return ((bitField0_ & 0x00080000) == 0x00080000);
      }
      /**
       * <code>optional bool supports_incremental_linker = 41 [default = false];</code>
       */
      public boolean getSupportsIncrementalLinker() {
        return supportsIncrementalLinker_;
      }
      /**
       * <code>optional bool supports_incremental_linker = 41 [default = false];</code>
       */
      public Builder setSupportsIncrementalLinker(boolean value) {
        bitField0_ |= 0x00080000;
        supportsIncrementalLinker_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool supports_incremental_linker = 41 [default = false];</code>
       */
      public Builder clearSupportsIncrementalLinker() {
        bitField0_ = (bitField0_ & ~0x00080000);
        supportsIncrementalLinker_ = false;
        onChanged();
        return this;
      }

      private boolean supportsNormalizingAr_ ;
      /**
       * <pre>
       * This should be true, if the toolchain supports the D flag to ar, which
       * makes it output normalized archives that don't contain timestamps.
       * </pre>
       *
       * <code>optional bool supports_normalizing_ar = 26 [default = false];</code>
       */
      public boolean hasSupportsNormalizingAr() {
        return ((bitField0_ & 0x00100000) == 0x00100000);
      }
      /**
       * <pre>
       * This should be true, if the toolchain supports the D flag to ar, which
       * makes it output normalized archives that don't contain timestamps.
       * </pre>
       *
       * <code>optional bool supports_normalizing_ar = 26 [default = false];</code>
       */
      public boolean getSupportsNormalizingAr() {
        return supportsNormalizingAr_;
      }
      /**
       * <pre>
       * This should be true, if the toolchain supports the D flag to ar, which
       * makes it output normalized archives that don't contain timestamps.
       * </pre>
       *
       * <code>optional bool supports_normalizing_ar = 26 [default = false];</code>
       */
      public Builder setSupportsNormalizingAr(boolean value) {
        bitField0_ |= 0x00100000;
        supportsNormalizingAr_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * This should be true, if the toolchain supports the D flag to ar, which
       * makes it output normalized archives that don't contain timestamps.
       * </pre>
       *
       * <code>optional bool supports_normalizing_ar = 26 [default = false];</code>
       */
      public Builder clearSupportsNormalizingAr() {
        bitField0_ = (bitField0_ & ~0x00100000);
        supportsNormalizingAr_ = false;
        onChanged();
        return this;
      }

      private boolean supportsFission_ ;
      /**
       * <code>optional bool supports_fission = 43 [default = false];</code>
       */
      public boolean hasSupportsFission() {
        return ((bitField0_ & 0x00200000) == 0x00200000);
      }
      /**
       * <code>optional bool supports_fission = 43 [default = false];</code>
       */
      public boolean getSupportsFission() {
        return supportsFission_;
      }
      /**
       * <code>optional bool supports_fission = 43 [default = false];</code>
       */
      public Builder setSupportsFission(boolean value) {
        bitField0_ |= 0x00200000;
        supportsFission_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool supports_fission = 43 [default = false];</code>
       */
      public Builder clearSupportsFission() {
        bitField0_ = (bitField0_ & ~0x00200000);
        supportsFission_ = false;
        onChanged();
        return this;
      }

      private boolean supportsDsym_ ;
      /**
       * <pre>
       * Can generate dsym debug symbol information.
       * </pre>
       *
       * <code>optional bool supports_dsym = 51 [default = false];</code>
       */
      public boolean hasSupportsDsym() {
        return ((bitField0_ & 0x00400000) == 0x00400000);
      }
      /**
       * <pre>
       * Can generate dsym debug symbol information.
       * </pre>
       *
       * <code>optional bool supports_dsym = 51 [default = false];</code>
       */
      public boolean getSupportsDsym() {
        return supportsDsym_;
      }
      /**
       * <pre>
       * Can generate dsym debug symbol information.
       * </pre>
       *
       * <code>optional bool supports_dsym = 51 [default = false];</code>
       */
      public Builder setSupportsDsym(boolean value) {
        bitField0_ |= 0x00400000;
        supportsDsym_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Can generate dsym debug symbol information.
       * </pre>
       *
       * <code>optional bool supports_dsym = 51 [default = false];</code>
       */
      public Builder clearSupportsDsym() {
        bitField0_ = (bitField0_ & ~0x00400000);
        supportsDsym_ = false;
        onChanged();
        return this;
      }

      private boolean needsPic_ ;
      /**
       * <code>optional bool needsPic = 12 [default = false];</code>
       */
      public boolean hasNeedsPic() {
        return ((bitField0_ & 0x00800000) == 0x00800000);
      }
      /**
       * <code>optional bool needsPic = 12 [default = false];</code>
       */
      public boolean getNeedsPic() {
        return needsPic_;
      }
      /**
       * <code>optional bool needsPic = 12 [default = false];</code>
       */
      public Builder setNeedsPic(boolean value) {
        bitField0_ |= 0x00800000;
        needsPic_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool needsPic = 12 [default = false];</code>
       */
      public Builder clearNeedsPic() {
        bitField0_ = (bitField0_ & ~0x00800000);
        needsPic_ = false;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCompilerFlagIsMutable() {
        if (!((bitField0_ & 0x01000000) == 0x01000000)) {
          compilerFlag_ = new com.google.protobuf.LazyStringArrayList(compilerFlag_);
          bitField0_ |= 0x01000000;
         }
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getCompilerFlagList() {
        return compilerFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public int getCompilerFlagCount() {
        return compilerFlag_.size();
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public java.lang.String getCompilerFlag(int index) {
        return compilerFlag_.get(index);
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public com.google.protobuf.ByteString
          getCompilerFlagBytes(int index) {
        return compilerFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public Builder setCompilerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public Builder addCompilerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public Builder addAllCompilerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureCompilerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, compilerFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public Builder clearCompilerFlag() {
        compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x01000000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Compiler flags for C/C++/Asm compilation.
       * </pre>
       *
       * <code>repeated string compiler_flag = 13;</code>
       */
      public Builder addCompilerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCxxFlagIsMutable() {
        if (!((bitField0_ & 0x02000000) == 0x02000000)) {
          cxxFlag_ = new com.google.protobuf.LazyStringArrayList(cxxFlag_);
          bitField0_ |= 0x02000000;
         }
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getCxxFlagList() {
        return cxxFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public int getCxxFlagCount() {
        return cxxFlag_.size();
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public java.lang.String getCxxFlag(int index) {
        return cxxFlag_.get(index);
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public com.google.protobuf.ByteString
          getCxxFlagBytes(int index) {
        return cxxFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public Builder setCxxFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public Builder addCxxFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public Builder addAllCxxFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureCxxFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, cxxFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public Builder clearCxxFlag() {
        cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x02000000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional compiler flags for C++ compilation.
       * </pre>
       *
       * <code>repeated string cxx_flag = 14;</code>
       */
      public Builder addCxxFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList unfilteredCxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureUnfilteredCxxFlagIsMutable() {
        if (!((bitField0_ & 0x04000000) == 0x04000000)) {
          unfilteredCxxFlag_ = new com.google.protobuf.LazyStringArrayList(unfilteredCxxFlag_);
          bitField0_ |= 0x04000000;
         }
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getUnfilteredCxxFlagList() {
        return unfilteredCxxFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public int getUnfilteredCxxFlagCount() {
        return unfilteredCxxFlag_.size();
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public java.lang.String getUnfilteredCxxFlag(int index) {
        return unfilteredCxxFlag_.get(index);
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public com.google.protobuf.ByteString
          getUnfilteredCxxFlagBytes(int index) {
        return unfilteredCxxFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public Builder setUnfilteredCxxFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUnfilteredCxxFlagIsMutable();
        unfilteredCxxFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public Builder addUnfilteredCxxFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUnfilteredCxxFlagIsMutable();
        unfilteredCxxFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public Builder addAllUnfilteredCxxFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureUnfilteredCxxFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, unfilteredCxxFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public Builder clearUnfilteredCxxFlag() {
        unfilteredCxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x04000000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional unfiltered compiler flags for C/C++/Asm compilation.
       * These are not subject to nocopt filtering in cc_* rules.
       * Note: These flags are *not* applied to objc/objc++ compiles.
       * </pre>
       *
       * <code>repeated string unfiltered_cxx_flag = 25;</code>
       */
      public Builder addUnfilteredCxxFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureUnfilteredCxxFlagIsMutable();
        unfilteredCxxFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureLinkerFlagIsMutable() {
        if (!((bitField0_ & 0x08000000) == 0x08000000)) {
          linkerFlag_ = new com.google.protobuf.LazyStringArrayList(linkerFlag_);
          bitField0_ |= 0x08000000;
         }
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getLinkerFlagList() {
        return linkerFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public int getLinkerFlagCount() {
        return linkerFlag_.size();
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public java.lang.String getLinkerFlag(int index) {
        return linkerFlag_.get(index);
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public com.google.protobuf.ByteString
          getLinkerFlagBytes(int index) {
        return linkerFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public Builder setLinkerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public Builder addLinkerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public Builder addAllLinkerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureLinkerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, linkerFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public Builder clearLinkerFlag() {
        linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x08000000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Linker flags.
       * </pre>
       *
       * <code>repeated string linker_flag = 15;</code>
       */
      public Builder addLinkerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList dynamicLibraryLinkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDynamicLibraryLinkerFlagIsMutable() {
        if (!((bitField0_ & 0x10000000) == 0x10000000)) {
          dynamicLibraryLinkerFlag_ = new com.google.protobuf.LazyStringArrayList(dynamicLibraryLinkerFlag_);
          bitField0_ |= 0x10000000;
         }
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getDynamicLibraryLinkerFlagList() {
        return dynamicLibraryLinkerFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public int getDynamicLibraryLinkerFlagCount() {
        return dynamicLibraryLinkerFlag_.size();
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public java.lang.String getDynamicLibraryLinkerFlag(int index) {
        return dynamicLibraryLinkerFlag_.get(index);
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public com.google.protobuf.ByteString
          getDynamicLibraryLinkerFlagBytes(int index) {
        return dynamicLibraryLinkerFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public Builder setDynamicLibraryLinkerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDynamicLibraryLinkerFlagIsMutable();
        dynamicLibraryLinkerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public Builder addDynamicLibraryLinkerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDynamicLibraryLinkerFlagIsMutable();
        dynamicLibraryLinkerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public Builder addAllDynamicLibraryLinkerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureDynamicLibraryLinkerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, dynamicLibraryLinkerFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public Builder clearDynamicLibraryLinkerFlag() {
        dynamicLibraryLinkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x10000000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional linker flags when linking dynamic libraries.
       * </pre>
       *
       * <code>repeated string dynamic_library_linker_flag = 27;</code>
       */
      public Builder addDynamicLibraryLinkerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDynamicLibraryLinkerFlagIsMutable();
        dynamicLibraryLinkerFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList testOnlyLinkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureTestOnlyLinkerFlagIsMutable() {
        if (!((bitField0_ & 0x20000000) == 0x20000000)) {
          testOnlyLinkerFlag_ = new com.google.protobuf.LazyStringArrayList(testOnlyLinkerFlag_);
          bitField0_ |= 0x20000000;
         }
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getTestOnlyLinkerFlagList() {
        return testOnlyLinkerFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public int getTestOnlyLinkerFlagCount() {
        return testOnlyLinkerFlag_.size();
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public java.lang.String getTestOnlyLinkerFlag(int index) {
        return testOnlyLinkerFlag_.get(index);
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public com.google.protobuf.ByteString
          getTestOnlyLinkerFlagBytes(int index) {
        return testOnlyLinkerFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public Builder setTestOnlyLinkerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTestOnlyLinkerFlagIsMutable();
        testOnlyLinkerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public Builder addTestOnlyLinkerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTestOnlyLinkerFlagIsMutable();
        testOnlyLinkerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public Builder addAllTestOnlyLinkerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureTestOnlyLinkerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, testOnlyLinkerFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public Builder clearTestOnlyLinkerFlag() {
        testOnlyLinkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x20000000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional test-only linker flags.
       * </pre>
       *
       * <code>repeated string test_only_linker_flag = 49;</code>
       */
      public Builder addTestOnlyLinkerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTestOnlyLinkerFlagIsMutable();
        testOnlyLinkerFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList objcopyEmbedFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureObjcopyEmbedFlagIsMutable() {
        if (!((bitField0_ & 0x40000000) == 0x40000000)) {
          objcopyEmbedFlag_ = new com.google.protobuf.LazyStringArrayList(objcopyEmbedFlag_);
          bitField0_ |= 0x40000000;
         }
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getObjcopyEmbedFlagList() {
        return objcopyEmbedFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public int getObjcopyEmbedFlagCount() {
        return objcopyEmbedFlag_.size();
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public java.lang.String getObjcopyEmbedFlag(int index) {
        return objcopyEmbedFlag_.get(index);
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public com.google.protobuf.ByteString
          getObjcopyEmbedFlagBytes(int index) {
        return objcopyEmbedFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public Builder setObjcopyEmbedFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureObjcopyEmbedFlagIsMutable();
        objcopyEmbedFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public Builder addObjcopyEmbedFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureObjcopyEmbedFlagIsMutable();
        objcopyEmbedFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public Builder addAllObjcopyEmbedFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureObjcopyEmbedFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, objcopyEmbedFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public Builder clearObjcopyEmbedFlag() {
        objcopyEmbedFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x40000000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Objcopy flags for embedding files into binaries.
       * </pre>
       *
       * <code>repeated string objcopy_embed_flag = 16;</code>
       */
      public Builder addObjcopyEmbedFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureObjcopyEmbedFlagIsMutable();
        objcopyEmbedFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList ldEmbedFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureLdEmbedFlagIsMutable() {
        if (!((bitField0_ & 0x80000000) == 0x80000000)) {
          ldEmbedFlag_ = new com.google.protobuf.LazyStringArrayList(ldEmbedFlag_);
          bitField0_ |= 0x80000000;
         }
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getLdEmbedFlagList() {
        return ldEmbedFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public int getLdEmbedFlagCount() {
        return ldEmbedFlag_.size();
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public java.lang.String getLdEmbedFlag(int index) {
        return ldEmbedFlag_.get(index);
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public com.google.protobuf.ByteString
          getLdEmbedFlagBytes(int index) {
        return ldEmbedFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public Builder setLdEmbedFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLdEmbedFlagIsMutable();
        ldEmbedFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public Builder addLdEmbedFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLdEmbedFlagIsMutable();
        ldEmbedFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public Builder addAllLdEmbedFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureLdEmbedFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, ldEmbedFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public Builder clearLdEmbedFlag() {
        ldEmbedFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x80000000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ld flags for embedding files into binaries. This is used by filewrapper
       * since it calls ld directly and needs to know what -m flag to pass.
       * </pre>
       *
       * <code>repeated string ld_embed_flag = 23;</code>
       */
      public Builder addLdEmbedFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLdEmbedFlagIsMutable();
        ldEmbedFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList arFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureArFlagIsMutable() {
        if (!((bitField1_ & 0x00000001) == 0x00000001)) {
          arFlag_ = new com.google.protobuf.LazyStringArrayList(arFlag_);
          bitField1_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getArFlagList() {
        return arFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public int getArFlagCount() {
        return arFlag_.size();
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public java.lang.String getArFlag(int index) {
        return arFlag_.get(index);
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public com.google.protobuf.ByteString
          getArFlagBytes(int index) {
        return arFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public Builder setArFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArFlagIsMutable();
        arFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public Builder addArFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArFlagIsMutable();
        arFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public Builder addAllArFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureArFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, arFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public Builder clearArFlag() {
        arFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Ar flags for combining object files into archives. If this is not set, it
       * defaults to "rcsD".
       * TODO(b/37271982): Remove after blaze with ar action_config release
       * </pre>
       *
       * <code>repeated string ar_flag = 47;</code>
       */
      public Builder addArFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArFlagIsMutable();
        arFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList arThinArchivesFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureArThinArchivesFlagIsMutable() {
        if (!((bitField1_ & 0x00000002) == 0x00000002)) {
          arThinArchivesFlag_ = new com.google.protobuf.LazyStringArrayList(arThinArchivesFlag_);
          bitField1_ |= 0x00000002;
         }
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getArThinArchivesFlagList() {
        return arThinArchivesFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public int getArThinArchivesFlagCount() {
        return arThinArchivesFlag_.size();
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public java.lang.String getArThinArchivesFlag(int index) {
        return arThinArchivesFlag_.get(index);
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public com.google.protobuf.ByteString
          getArThinArchivesFlagBytes(int index) {
        return arThinArchivesFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public Builder setArThinArchivesFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArThinArchivesFlagIsMutable();
        arThinArchivesFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public Builder addArThinArchivesFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArThinArchivesFlagIsMutable();
        arThinArchivesFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public Builder addAllArThinArchivesFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureArThinArchivesFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, arThinArchivesFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public Builder clearArThinArchivesFlag() {
        arThinArchivesFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Legacy field, ignored by Bazel.
       * </pre>
       *
       * <code>repeated string ar_thin_archives_flag = 48;</code>
       */
      public Builder addArThinArchivesFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureArThinArchivesFlagIsMutable();
        arThinArchivesFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList gccPluginCompilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureGccPluginCompilerFlagIsMutable() {
        if (!((bitField1_ & 0x00000004) == 0x00000004)) {
          gccPluginCompilerFlag_ = new com.google.protobuf.LazyStringArrayList(gccPluginCompilerFlag_);
          bitField1_ |= 0x00000004;
         }
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getGccPluginCompilerFlagList() {
        return gccPluginCompilerFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public int getGccPluginCompilerFlagCount() {
        return gccPluginCompilerFlag_.size();
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public java.lang.String getGccPluginCompilerFlag(int index) {
        return gccPluginCompilerFlag_.get(index);
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public com.google.protobuf.ByteString
          getGccPluginCompilerFlagBytes(int index) {
        return gccPluginCompilerFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public Builder setGccPluginCompilerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGccPluginCompilerFlagIsMutable();
        gccPluginCompilerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public Builder addGccPluginCompilerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGccPluginCompilerFlagIsMutable();
        gccPluginCompilerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public Builder addAllGccPluginCompilerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureGccPluginCompilerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, gccPluginCompilerFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public Builder clearGccPluginCompilerFlag() {
        gccPluginCompilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional compiler flags that are added for cc_plugin rules of type 'gcc'
       * </pre>
       *
       * <code>repeated string gcc_plugin_compiler_flag = 34;</code>
       */
      public Builder addGccPluginCompilerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGccPluginCompilerFlagIsMutable();
        gccPluginCompilerFlag_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags> compilationModeFlags_ =
        java.util.Collections.emptyList();
      private void ensureCompilationModeFlagsIsMutable() {
        if (!((bitField1_ & 0x00000008) == 0x00000008)) {
          compilationModeFlags_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags>(compilationModeFlags_);
          bitField1_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder> compilationModeFlagsBuilder_;

      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags> getCompilationModeFlagsList() {
        if (compilationModeFlagsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(compilationModeFlags_);
        } else {
          return compilationModeFlagsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public int getCompilationModeFlagsCount() {
        if (compilationModeFlagsBuilder_ == null) {
          return compilationModeFlags_.size();
        } else {
          return compilationModeFlagsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags getCompilationModeFlags(int index) {
        if (compilationModeFlagsBuilder_ == null) {
          return compilationModeFlags_.get(index);
        } else {
          return compilationModeFlagsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder setCompilationModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags value) {
        if (compilationModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompilationModeFlagsIsMutable();
          compilationModeFlags_.set(index, value);
          onChanged();
        } else {
          compilationModeFlagsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder setCompilationModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder builderForValue) {
        if (compilationModeFlagsBuilder_ == null) {
          ensureCompilationModeFlagsIsMutable();
          compilationModeFlags_.set(index, builderForValue.build());
          onChanged();
        } else {
          compilationModeFlagsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder addCompilationModeFlags(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags value) {
        if (compilationModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompilationModeFlagsIsMutable();
          compilationModeFlags_.add(value);
          onChanged();
        } else {
          compilationModeFlagsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder addCompilationModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags value) {
        if (compilationModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCompilationModeFlagsIsMutable();
          compilationModeFlags_.add(index, value);
          onChanged();
        } else {
          compilationModeFlagsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder addCompilationModeFlags(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder builderForValue) {
        if (compilationModeFlagsBuilder_ == null) {
          ensureCompilationModeFlagsIsMutable();
          compilationModeFlags_.add(builderForValue.build());
          onChanged();
        } else {
          compilationModeFlagsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder addCompilationModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder builderForValue) {
        if (compilationModeFlagsBuilder_ == null) {
          ensureCompilationModeFlagsIsMutable();
          compilationModeFlags_.add(index, builderForValue.build());
          onChanged();
        } else {
          compilationModeFlagsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder addAllCompilationModeFlags(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags> values) {
        if (compilationModeFlagsBuilder_ == null) {
          ensureCompilationModeFlagsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, compilationModeFlags_);
          onChanged();
        } else {
          compilationModeFlagsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder clearCompilationModeFlags() {
        if (compilationModeFlagsBuilder_ == null) {
          compilationModeFlags_ = java.util.Collections.emptyList();
          bitField1_ = (bitField1_ & ~0x00000008);
          onChanged();
        } else {
          compilationModeFlagsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public Builder removeCompilationModeFlags(int index) {
        if (compilationModeFlagsBuilder_ == null) {
          ensureCompilationModeFlagsIsMutable();
          compilationModeFlags_.remove(index);
          onChanged();
        } else {
          compilationModeFlagsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder getCompilationModeFlagsBuilder(
          int index) {
        return getCompilationModeFlagsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder getCompilationModeFlagsOrBuilder(
          int index) {
        if (compilationModeFlagsBuilder_ == null) {
          return compilationModeFlags_.get(index);  } else {
          return compilationModeFlagsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder> 
           getCompilationModeFlagsOrBuilderList() {
        if (compilationModeFlagsBuilder_ != null) {
          return compilationModeFlagsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(compilationModeFlags_);
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder addCompilationModeFlagsBuilder() {
        return getCompilationModeFlagsFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder addCompilationModeFlagsBuilder(
          int index) {
        return getCompilationModeFlagsFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the compilation mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags compilation_mode_flags = 17;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder> 
           getCompilationModeFlagsBuilderList() {
        return getCompilationModeFlagsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder> 
          getCompilationModeFlagsFieldBuilder() {
        if (compilationModeFlagsBuilder_ == null) {
          compilationModeFlagsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder>(
                  compilationModeFlags_,
                  ((bitField1_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          compilationModeFlags_ = null;
        }
        return compilationModeFlagsBuilder_;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags> lipoModeFlags_ =
        java.util.Collections.emptyList();
      private void ensureLipoModeFlagsIsMutable() {
        if (!((bitField1_ & 0x00000010) == 0x00000010)) {
          lipoModeFlags_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags>(lipoModeFlags_);
          bitField1_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder> lipoModeFlagsBuilder_;

      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags> getLipoModeFlagsList() {
        if (lipoModeFlagsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(lipoModeFlags_);
        } else {
          return lipoModeFlagsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public int getLipoModeFlagsCount() {
        if (lipoModeFlagsBuilder_ == null) {
          return lipoModeFlags_.size();
        } else {
          return lipoModeFlagsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags getLipoModeFlags(int index) {
        if (lipoModeFlagsBuilder_ == null) {
          return lipoModeFlags_.get(index);
        } else {
          return lipoModeFlagsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder setLipoModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags value) {
        if (lipoModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLipoModeFlagsIsMutable();
          lipoModeFlags_.set(index, value);
          onChanged();
        } else {
          lipoModeFlagsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder setLipoModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder builderForValue) {
        if (lipoModeFlagsBuilder_ == null) {
          ensureLipoModeFlagsIsMutable();
          lipoModeFlags_.set(index, builderForValue.build());
          onChanged();
        } else {
          lipoModeFlagsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder addLipoModeFlags(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags value) {
        if (lipoModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLipoModeFlagsIsMutable();
          lipoModeFlags_.add(value);
          onChanged();
        } else {
          lipoModeFlagsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder addLipoModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags value) {
        if (lipoModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLipoModeFlagsIsMutable();
          lipoModeFlags_.add(index, value);
          onChanged();
        } else {
          lipoModeFlagsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder addLipoModeFlags(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder builderForValue) {
        if (lipoModeFlagsBuilder_ == null) {
          ensureLipoModeFlagsIsMutable();
          lipoModeFlags_.add(builderForValue.build());
          onChanged();
        } else {
          lipoModeFlagsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder addLipoModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder builderForValue) {
        if (lipoModeFlagsBuilder_ == null) {
          ensureLipoModeFlagsIsMutable();
          lipoModeFlags_.add(index, builderForValue.build());
          onChanged();
        } else {
          lipoModeFlagsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder addAllLipoModeFlags(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags> values) {
        if (lipoModeFlagsBuilder_ == null) {
          ensureLipoModeFlagsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, lipoModeFlags_);
          onChanged();
        } else {
          lipoModeFlagsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder clearLipoModeFlags() {
        if (lipoModeFlagsBuilder_ == null) {
          lipoModeFlags_ = java.util.Collections.emptyList();
          bitField1_ = (bitField1_ & ~0x00000010);
          onChanged();
        } else {
          lipoModeFlagsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public Builder removeLipoModeFlags(int index) {
        if (lipoModeFlagsBuilder_ == null) {
          ensureLipoModeFlagsIsMutable();
          lipoModeFlags_.remove(index);
          onChanged();
        } else {
          lipoModeFlagsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder getLipoModeFlagsBuilder(
          int index) {
        return getLipoModeFlagsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder getLipoModeFlagsOrBuilder(
          int index) {
        if (lipoModeFlagsBuilder_ == null) {
          return lipoModeFlags_.get(index);  } else {
          return lipoModeFlagsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder> 
           getLipoModeFlagsOrBuilderList() {
        if (lipoModeFlagsBuilder_ != null) {
          return lipoModeFlagsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(lipoModeFlags_);
        }
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder addLipoModeFlagsBuilder() {
        return getLipoModeFlagsFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder addLipoModeFlagsBuilder(
          int index) {
        return getLipoModeFlagsFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional compiler and linker flags depending on the LIPO mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags lipo_mode_flags = 44;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder> 
           getLipoModeFlagsBuilderList() {
        return getLipoModeFlagsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder> 
          getLipoModeFlagsFieldBuilder() {
        if (lipoModeFlagsBuilder_ == null) {
          lipoModeFlagsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder>(
                  lipoModeFlags_,
                  ((bitField1_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          lipoModeFlags_ = null;
        }
        return lipoModeFlagsBuilder_;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags> linkingModeFlags_ =
        java.util.Collections.emptyList();
      private void ensureLinkingModeFlagsIsMutable() {
        if (!((bitField1_ & 0x00000020) == 0x00000020)) {
          linkingModeFlags_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags>(linkingModeFlags_);
          bitField1_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder> linkingModeFlagsBuilder_;

      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags> getLinkingModeFlagsList() {
        if (linkingModeFlagsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(linkingModeFlags_);
        } else {
          return linkingModeFlagsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public int getLinkingModeFlagsCount() {
        if (linkingModeFlagsBuilder_ == null) {
          return linkingModeFlags_.size();
        } else {
          return linkingModeFlagsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags getLinkingModeFlags(int index) {
        if (linkingModeFlagsBuilder_ == null) {
          return linkingModeFlags_.get(index);
        } else {
          return linkingModeFlagsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder setLinkingModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags value) {
        if (linkingModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLinkingModeFlagsIsMutable();
          linkingModeFlags_.set(index, value);
          onChanged();
        } else {
          linkingModeFlagsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder setLinkingModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder builderForValue) {
        if (linkingModeFlagsBuilder_ == null) {
          ensureLinkingModeFlagsIsMutable();
          linkingModeFlags_.set(index, builderForValue.build());
          onChanged();
        } else {
          linkingModeFlagsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder addLinkingModeFlags(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags value) {
        if (linkingModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLinkingModeFlagsIsMutable();
          linkingModeFlags_.add(value);
          onChanged();
        } else {
          linkingModeFlagsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder addLinkingModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags value) {
        if (linkingModeFlagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureLinkingModeFlagsIsMutable();
          linkingModeFlags_.add(index, value);
          onChanged();
        } else {
          linkingModeFlagsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder addLinkingModeFlags(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder builderForValue) {
        if (linkingModeFlagsBuilder_ == null) {
          ensureLinkingModeFlagsIsMutable();
          linkingModeFlags_.add(builderForValue.build());
          onChanged();
        } else {
          linkingModeFlagsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder addLinkingModeFlags(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder builderForValue) {
        if (linkingModeFlagsBuilder_ == null) {
          ensureLinkingModeFlagsIsMutable();
          linkingModeFlags_.add(index, builderForValue.build());
          onChanged();
        } else {
          linkingModeFlagsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder addAllLinkingModeFlags(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags> values) {
        if (linkingModeFlagsBuilder_ == null) {
          ensureLinkingModeFlagsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, linkingModeFlags_);
          onChanged();
        } else {
          linkingModeFlagsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder clearLinkingModeFlags() {
        if (linkingModeFlagsBuilder_ == null) {
          linkingModeFlags_ = java.util.Collections.emptyList();
          bitField1_ = (bitField1_ & ~0x00000020);
          onChanged();
        } else {
          linkingModeFlagsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public Builder removeLinkingModeFlags(int index) {
        if (linkingModeFlagsBuilder_ == null) {
          ensureLinkingModeFlagsIsMutable();
          linkingModeFlags_.remove(index);
          onChanged();
        } else {
          linkingModeFlagsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder getLinkingModeFlagsBuilder(
          int index) {
        return getLinkingModeFlagsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder getLinkingModeFlagsOrBuilder(
          int index) {
        if (linkingModeFlagsBuilder_ == null) {
          return linkingModeFlags_.get(index);  } else {
          return linkingModeFlagsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder> 
           getLinkingModeFlagsOrBuilderList() {
        if (linkingModeFlagsBuilder_ != null) {
          return linkingModeFlagsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(linkingModeFlags_);
        }
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder addLinkingModeFlagsBuilder() {
        return getLinkingModeFlagsFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder addLinkingModeFlagsBuilder(
          int index) {
        return getLinkingModeFlagsFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional linker flags depending on the linking mode.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags linking_mode_flags = 18;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder> 
           getLinkingModeFlagsBuilderList() {
        return getLinkingModeFlagsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder> 
          getLinkingModeFlagsFieldBuilder() {
        if (linkingModeFlagsBuilder_ == null) {
          linkingModeFlagsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder>(
                  linkingModeFlags_,
                  ((bitField1_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          linkingModeFlags_ = null;
        }
        return linkingModeFlagsBuilder_;
      }

      private com.google.protobuf.LazyStringList gccPluginHeaderDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureGccPluginHeaderDirectoryIsMutable() {
        if (!((bitField1_ & 0x00000040) == 0x00000040)) {
          gccPluginHeaderDirectory_ = new com.google.protobuf.LazyStringArrayList(gccPluginHeaderDirectory_);
          bitField1_ |= 0x00000040;
         }
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getGccPluginHeaderDirectoryList() {
        return gccPluginHeaderDirectory_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public int getGccPluginHeaderDirectoryCount() {
        return gccPluginHeaderDirectory_.size();
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public java.lang.String getGccPluginHeaderDirectory(int index) {
        return gccPluginHeaderDirectory_.get(index);
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public com.google.protobuf.ByteString
          getGccPluginHeaderDirectoryBytes(int index) {
        return gccPluginHeaderDirectory_.getByteString(index);
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public Builder setGccPluginHeaderDirectory(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGccPluginHeaderDirectoryIsMutable();
        gccPluginHeaderDirectory_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public Builder addGccPluginHeaderDirectory(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGccPluginHeaderDirectoryIsMutable();
        gccPluginHeaderDirectory_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public Builder addAllGccPluginHeaderDirectory(
          java.lang.Iterable<java.lang.String> values) {
        ensureGccPluginHeaderDirectoryIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, gccPluginHeaderDirectory_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public Builder clearGccPluginHeaderDirectory() {
        gccPluginHeaderDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000040);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Plugin header directories for gcc and mao plugins. If none are set, the
       * toolchain does not support plugins. Relative paths are resolved relative
       * to the configuration file directory.
       * </pre>
       *
       * <code>repeated string gcc_plugin_header_directory = 19;</code>
       */
      public Builder addGccPluginHeaderDirectoryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGccPluginHeaderDirectoryIsMutable();
        gccPluginHeaderDirectory_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList maoPluginHeaderDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureMaoPluginHeaderDirectoryIsMutable() {
        if (!((bitField1_ & 0x00000080) == 0x00000080)) {
          maoPluginHeaderDirectory_ = new com.google.protobuf.LazyStringArrayList(maoPluginHeaderDirectory_);
          bitField1_ |= 0x00000080;
         }
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getMaoPluginHeaderDirectoryList() {
        return maoPluginHeaderDirectory_.getUnmodifiableView();
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public int getMaoPluginHeaderDirectoryCount() {
        return maoPluginHeaderDirectory_.size();
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public java.lang.String getMaoPluginHeaderDirectory(int index) {
        return maoPluginHeaderDirectory_.get(index);
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public com.google.protobuf.ByteString
          getMaoPluginHeaderDirectoryBytes(int index) {
        return maoPluginHeaderDirectory_.getByteString(index);
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public Builder setMaoPluginHeaderDirectory(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMaoPluginHeaderDirectoryIsMutable();
        maoPluginHeaderDirectory_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public Builder addMaoPluginHeaderDirectory(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMaoPluginHeaderDirectoryIsMutable();
        maoPluginHeaderDirectory_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public Builder addAllMaoPluginHeaderDirectory(
          java.lang.Iterable<java.lang.String> values) {
        ensureMaoPluginHeaderDirectoryIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, maoPluginHeaderDirectory_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public Builder clearMaoPluginHeaderDirectory() {
        maoPluginHeaderDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string mao_plugin_header_directory = 20;</code>
       */
      public Builder addMaoPluginHeaderDirectoryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMaoPluginHeaderDirectoryIsMutable();
        maoPluginHeaderDirectory_.add(value);
        onChanged();
        return this;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable> makeVariable_ =
        java.util.Collections.emptyList();
      private void ensureMakeVariableIsMutable() {
        if (!((bitField1_ & 0x00000100) == 0x00000100)) {
          makeVariable_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable>(makeVariable_);
          bitField1_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder> makeVariableBuilder_;

      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable> getMakeVariableList() {
        if (makeVariableBuilder_ == null) {
          return java.util.Collections.unmodifiableList(makeVariable_);
        } else {
          return makeVariableBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public int getMakeVariableCount() {
        if (makeVariableBuilder_ == null) {
          return makeVariable_.size();
        } else {
          return makeVariableBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable getMakeVariable(int index) {
        if (makeVariableBuilder_ == null) {
          return makeVariable_.get(index);
        } else {
          return makeVariableBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder setMakeVariable(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable value) {
        if (makeVariableBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMakeVariableIsMutable();
          makeVariable_.set(index, value);
          onChanged();
        } else {
          makeVariableBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder setMakeVariable(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder builderForValue) {
        if (makeVariableBuilder_ == null) {
          ensureMakeVariableIsMutable();
          makeVariable_.set(index, builderForValue.build());
          onChanged();
        } else {
          makeVariableBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder addMakeVariable(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable value) {
        if (makeVariableBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMakeVariableIsMutable();
          makeVariable_.add(value);
          onChanged();
        } else {
          makeVariableBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder addMakeVariable(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable value) {
        if (makeVariableBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMakeVariableIsMutable();
          makeVariable_.add(index, value);
          onChanged();
        } else {
          makeVariableBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder addMakeVariable(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder builderForValue) {
        if (makeVariableBuilder_ == null) {
          ensureMakeVariableIsMutable();
          makeVariable_.add(builderForValue.build());
          onChanged();
        } else {
          makeVariableBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder addMakeVariable(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder builderForValue) {
        if (makeVariableBuilder_ == null) {
          ensureMakeVariableIsMutable();
          makeVariable_.add(index, builderForValue.build());
          onChanged();
        } else {
          makeVariableBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder addAllMakeVariable(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable> values) {
        if (makeVariableBuilder_ == null) {
          ensureMakeVariableIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, makeVariable_);
          onChanged();
        } else {
          makeVariableBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder clearMakeVariable() {
        if (makeVariableBuilder_ == null) {
          makeVariable_ = java.util.Collections.emptyList();
          bitField1_ = (bitField1_ & ~0x00000100);
          onChanged();
        } else {
          makeVariableBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public Builder removeMakeVariable(int index) {
        if (makeVariableBuilder_ == null) {
          ensureMakeVariableIsMutable();
          makeVariable_.remove(index);
          onChanged();
        } else {
          makeVariableBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder getMakeVariableBuilder(
          int index) {
        return getMakeVariableFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder getMakeVariableOrBuilder(
          int index) {
        if (makeVariableBuilder_ == null) {
          return makeVariable_.get(index);  } else {
          return makeVariableBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder> 
           getMakeVariableOrBuilderList() {
        if (makeVariableBuilder_ != null) {
          return makeVariableBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(makeVariable_);
        }
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder addMakeVariableBuilder() {
        return getMakeVariableFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.getDefaultInstance());
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder addMakeVariableBuilder(
          int index) {
        return getMakeVariableFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.getDefaultInstance());
      }
      /**
       * <pre>
       * Make variables that are made accessible to rules.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.MakeVariable make_variable = 21;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder> 
           getMakeVariableBuilderList() {
        return getMakeVariableFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder> 
          getMakeVariableFieldBuilder() {
        if (makeVariableBuilder_ == null) {
          makeVariableBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder>(
                  makeVariable_,
                  ((bitField1_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          makeVariable_ = null;
        }
        return makeVariableBuilder_;
      }

      private com.google.protobuf.LazyStringList cxxBuiltinIncludeDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCxxBuiltinIncludeDirectoryIsMutable() {
        if (!((bitField1_ & 0x00000200) == 0x00000200)) {
          cxxBuiltinIncludeDirectory_ = new com.google.protobuf.LazyStringArrayList(cxxBuiltinIncludeDirectory_);
          bitField1_ |= 0x00000200;
         }
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getCxxBuiltinIncludeDirectoryList() {
        return cxxBuiltinIncludeDirectory_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public int getCxxBuiltinIncludeDirectoryCount() {
        return cxxBuiltinIncludeDirectory_.size();
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public java.lang.String getCxxBuiltinIncludeDirectory(int index) {
        return cxxBuiltinIncludeDirectory_.get(index);
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public com.google.protobuf.ByteString
          getCxxBuiltinIncludeDirectoryBytes(int index) {
        return cxxBuiltinIncludeDirectory_.getByteString(index);
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public Builder setCxxBuiltinIncludeDirectory(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxBuiltinIncludeDirectoryIsMutable();
        cxxBuiltinIncludeDirectory_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public Builder addCxxBuiltinIncludeDirectory(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxBuiltinIncludeDirectoryIsMutable();
        cxxBuiltinIncludeDirectory_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public Builder addAllCxxBuiltinIncludeDirectory(
          java.lang.Iterable<java.lang.String> values) {
        ensureCxxBuiltinIncludeDirectoryIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, cxxBuiltinIncludeDirectory_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public Builder clearCxxBuiltinIncludeDirectory() {
        cxxBuiltinIncludeDirectory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00000200);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Built-in include directories for C++ compilation. These should be the exact
       * paths used by the compiler, and are generally relative to the exec root.
       * The paths used by the compiler can be determined by 'gcc -Wp,-v some.c'.
       * We currently use the C++ paths also for C compilation, which is safe as
       * long as there are no name clashes between C++ and C header files.
       * Relative paths are resolved relative to the configuration file directory.
       * If the compiler has --sysroot support, then these paths should use
       * %sysroot% rather than the include path, and specify the sysroot attribute
       * in order to give blaze the information necessary to make the correct
       * replacements.
       * </pre>
       *
       * <code>repeated string cxx_builtin_include_directory = 22;</code>
       */
      public Builder addCxxBuiltinIncludeDirectoryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxBuiltinIncludeDirectoryIsMutable();
        cxxBuiltinIncludeDirectory_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object builtinSysroot_ = "";
      /**
       * <pre>
       * The built-in sysroot. If this attribute is not present, blaze does not
       * allow using a different sysroot, i.e. through the --grte_top option. Also
       * see the documentation above.
       * </pre>
       *
       * <code>optional string builtin_sysroot = 24;</code>
       */
      public boolean hasBuiltinSysroot() {
        return ((bitField1_ & 0x00000400) == 0x00000400);
      }
      /**
       * <pre>
       * The built-in sysroot. If this attribute is not present, blaze does not
       * allow using a different sysroot, i.e. through the --grte_top option. Also
       * see the documentation above.
       * </pre>
       *
       * <code>optional string builtin_sysroot = 24;</code>
       */
      public java.lang.String getBuiltinSysroot() {
        java.lang.Object ref = builtinSysroot_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            builtinSysroot_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The built-in sysroot. If this attribute is not present, blaze does not
       * allow using a different sysroot, i.e. through the --grte_top option. Also
       * see the documentation above.
       * </pre>
       *
       * <code>optional string builtin_sysroot = 24;</code>
       */
      public com.google.protobuf.ByteString
          getBuiltinSysrootBytes() {
        java.lang.Object ref = builtinSysroot_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          builtinSysroot_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The built-in sysroot. If this attribute is not present, blaze does not
       * allow using a different sysroot, i.e. through the --grte_top option. Also
       * see the documentation above.
       * </pre>
       *
       * <code>optional string builtin_sysroot = 24;</code>
       */
      public Builder setBuiltinSysroot(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00000400;
        builtinSysroot_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The built-in sysroot. If this attribute is not present, blaze does not
       * allow using a different sysroot, i.e. through the --grte_top option. Also
       * see the documentation above.
       * </pre>
       *
       * <code>optional string builtin_sysroot = 24;</code>
       */
      public Builder clearBuiltinSysroot() {
        bitField1_ = (bitField1_ & ~0x00000400);
        builtinSysroot_ = getDefaultInstance().getBuiltinSysroot();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The built-in sysroot. If this attribute is not present, blaze does not
       * allow using a different sysroot, i.e. through the --grte_top option. Also
       * see the documentation above.
       * </pre>
       *
       * <code>optional string builtin_sysroot = 24;</code>
       */
      public Builder setBuiltinSysrootBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00000400;
        builtinSysroot_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object defaultPythonTop_ = "";
      /**
       * <pre>
       * The location and version of the default Python (in absence of
       * --python_top and --python_version, respectively. The default
       * --python_mode is always 'opt'.) For backward compatibility, if these
       * attributes are not set, Blaze will use the crosstool v11-13 default
       * values: "/usr/grte/v1" and "python2.4".
       * </pre>
       *
       * <code>optional string default_python_top = 29;</code>
       */
      public boolean hasDefaultPythonTop() {
        return ((bitField1_ & 0x00000800) == 0x00000800);
      }
      /**
       * <pre>
       * The location and version of the default Python (in absence of
       * --python_top and --python_version, respectively. The default
       * --python_mode is always 'opt'.) For backward compatibility, if these
       * attributes are not set, Blaze will use the crosstool v11-13 default
       * values: "/usr/grte/v1" and "python2.4".
       * </pre>
       *
       * <code>optional string default_python_top = 29;</code>
       */
      public java.lang.String getDefaultPythonTop() {
        java.lang.Object ref = defaultPythonTop_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            defaultPythonTop_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The location and version of the default Python (in absence of
       * --python_top and --python_version, respectively. The default
       * --python_mode is always 'opt'.) For backward compatibility, if these
       * attributes are not set, Blaze will use the crosstool v11-13 default
       * values: "/usr/grte/v1" and "python2.4".
       * </pre>
       *
       * <code>optional string default_python_top = 29;</code>
       */
      public com.google.protobuf.ByteString
          getDefaultPythonTopBytes() {
        java.lang.Object ref = defaultPythonTop_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          defaultPythonTop_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The location and version of the default Python (in absence of
       * --python_top and --python_version, respectively. The default
       * --python_mode is always 'opt'.) For backward compatibility, if these
       * attributes are not set, Blaze will use the crosstool v11-13 default
       * values: "/usr/grte/v1" and "python2.4".
       * </pre>
       *
       * <code>optional string default_python_top = 29;</code>
       */
      public Builder setDefaultPythonTop(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00000800;
        defaultPythonTop_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The location and version of the default Python (in absence of
       * --python_top and --python_version, respectively. The default
       * --python_mode is always 'opt'.) For backward compatibility, if these
       * attributes are not set, Blaze will use the crosstool v11-13 default
       * values: "/usr/grte/v1" and "python2.4".
       * </pre>
       *
       * <code>optional string default_python_top = 29;</code>
       */
      public Builder clearDefaultPythonTop() {
        bitField1_ = (bitField1_ & ~0x00000800);
        defaultPythonTop_ = getDefaultInstance().getDefaultPythonTop();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The location and version of the default Python (in absence of
       * --python_top and --python_version, respectively. The default
       * --python_mode is always 'opt'.) For backward compatibility, if these
       * attributes are not set, Blaze will use the crosstool v11-13 default
       * values: "/usr/grte/v1" and "python2.4".
       * </pre>
       *
       * <code>optional string default_python_top = 29;</code>
       */
      public Builder setDefaultPythonTopBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00000800;
        defaultPythonTop_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object defaultPythonVersion_ = "";
      /**
       * <code>optional string default_python_version = 30;</code>
       */
      public boolean hasDefaultPythonVersion() {
        return ((bitField1_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string default_python_version = 30;</code>
       */
      public java.lang.String getDefaultPythonVersion() {
        java.lang.Object ref = defaultPythonVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            defaultPythonVersion_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string default_python_version = 30;</code>
       */
      public com.google.protobuf.ByteString
          getDefaultPythonVersionBytes() {
        java.lang.Object ref = defaultPythonVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          defaultPythonVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string default_python_version = 30;</code>
       */
      public Builder setDefaultPythonVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00001000;
        defaultPythonVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string default_python_version = 30;</code>
       */
      public Builder clearDefaultPythonVersion() {
        bitField1_ = (bitField1_ & ~0x00001000);
        defaultPythonVersion_ = getDefaultInstance().getDefaultPythonVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string default_python_version = 30;</code>
       */
      public Builder setDefaultPythonVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00001000;
        defaultPythonVersion_ = value;
        onChanged();
        return this;
      }

      private boolean pythonPreloadSwigdeps_ ;
      /**
       * <pre>
       * Whether to preload swigdeps.so files in py_binaries and PAR files.
       * This overrides the commandline flag.
       * </pre>
       *
       * <code>optional bool python_preload_swigdeps = 42;</code>
       */
      public boolean hasPythonPreloadSwigdeps() {
        return ((bitField1_ & 0x00002000) == 0x00002000);
      }
      /**
       * <pre>
       * Whether to preload swigdeps.so files in py_binaries and PAR files.
       * This overrides the commandline flag.
       * </pre>
       *
       * <code>optional bool python_preload_swigdeps = 42;</code>
       */
      public boolean getPythonPreloadSwigdeps() {
        return pythonPreloadSwigdeps_;
      }
      /**
       * <pre>
       * Whether to preload swigdeps.so files in py_binaries and PAR files.
       * This overrides the commandline flag.
       * </pre>
       *
       * <code>optional bool python_preload_swigdeps = 42;</code>
       */
      public Builder setPythonPreloadSwigdeps(boolean value) {
        bitField1_ |= 0x00002000;
        pythonPreloadSwigdeps_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether to preload swigdeps.so files in py_binaries and PAR files.
       * This overrides the commandline flag.
       * </pre>
       *
       * <code>optional bool python_preload_swigdeps = 42;</code>
       */
      public Builder clearPythonPreloadSwigdeps() {
        bitField1_ = (bitField1_ & ~0x00002000);
        pythonPreloadSwigdeps_ = false;
        onChanged();
        return this;
      }

      private java.lang.Object defaultGrteTop_ = "";
      /**
       * <pre>
       * The default GRTE to use. This should be a label, and gets the same
       * treatment from Blaze as the --grte_top option. This setting is only used in
       * the absence of an explicit --grte_top option. If unset, Blaze will not pass
       * -sysroot by default. The local part must be 'everything', i.e.,
       * '//some/label:everything'. There can only be one GRTE library per package,
       * because the compiler expects the directory as a parameter of the -sysroot
       * option.
       * This may only be set to a non-empty value if builtin_sysroot is also set!
       * </pre>
       *
       * <code>optional string default_grte_top = 31;</code>
       */
      public boolean hasDefaultGrteTop() {
        return ((bitField1_ & 0x00004000) == 0x00004000);
      }
      /**
       * <pre>
       * The default GRTE to use. This should be a label, and gets the same
       * treatment from Blaze as the --grte_top option. This setting is only used in
       * the absence of an explicit --grte_top option. If unset, Blaze will not pass
       * -sysroot by default. The local part must be 'everything', i.e.,
       * '//some/label:everything'. There can only be one GRTE library per package,
       * because the compiler expects the directory as a parameter of the -sysroot
       * option.
       * This may only be set to a non-empty value if builtin_sysroot is also set!
       * </pre>
       *
       * <code>optional string default_grte_top = 31;</code>
       */
      public java.lang.String getDefaultGrteTop() {
        java.lang.Object ref = defaultGrteTop_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            defaultGrteTop_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The default GRTE to use. This should be a label, and gets the same
       * treatment from Blaze as the --grte_top option. This setting is only used in
       * the absence of an explicit --grte_top option. If unset, Blaze will not pass
       * -sysroot by default. The local part must be 'everything', i.e.,
       * '//some/label:everything'. There can only be one GRTE library per package,
       * because the compiler expects the directory as a parameter of the -sysroot
       * option.
       * This may only be set to a non-empty value if builtin_sysroot is also set!
       * </pre>
       *
       * <code>optional string default_grte_top = 31;</code>
       */
      public com.google.protobuf.ByteString
          getDefaultGrteTopBytes() {
        java.lang.Object ref = defaultGrteTop_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          defaultGrteTop_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The default GRTE to use. This should be a label, and gets the same
       * treatment from Blaze as the --grte_top option. This setting is only used in
       * the absence of an explicit --grte_top option. If unset, Blaze will not pass
       * -sysroot by default. The local part must be 'everything', i.e.,
       * '//some/label:everything'. There can only be one GRTE library per package,
       * because the compiler expects the directory as a parameter of the -sysroot
       * option.
       * This may only be set to a non-empty value if builtin_sysroot is also set!
       * </pre>
       *
       * <code>optional string default_grte_top = 31;</code>
       */
      public Builder setDefaultGrteTop(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00004000;
        defaultGrteTop_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The default GRTE to use. This should be a label, and gets the same
       * treatment from Blaze as the --grte_top option. This setting is only used in
       * the absence of an explicit --grte_top option. If unset, Blaze will not pass
       * -sysroot by default. The local part must be 'everything', i.e.,
       * '//some/label:everything'. There can only be one GRTE library per package,
       * because the compiler expects the directory as a parameter of the -sysroot
       * option.
       * This may only be set to a non-empty value if builtin_sysroot is also set!
       * </pre>
       *
       * <code>optional string default_grte_top = 31;</code>
       */
      public Builder clearDefaultGrteTop() {
        bitField1_ = (bitField1_ & ~0x00004000);
        defaultGrteTop_ = getDefaultInstance().getDefaultGrteTop();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The default GRTE to use. This should be a label, and gets the same
       * treatment from Blaze as the --grte_top option. This setting is only used in
       * the absence of an explicit --grte_top option. If unset, Blaze will not pass
       * -sysroot by default. The local part must be 'everything', i.e.,
       * '//some/label:everything'. There can only be one GRTE library per package,
       * because the compiler expects the directory as a parameter of the -sysroot
       * option.
       * This may only be set to a non-empty value if builtin_sysroot is also set!
       * </pre>
       *
       * <code>optional string default_grte_top = 31;</code>
       */
      public Builder setDefaultGrteTopBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00004000;
        defaultGrteTop_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList debianExtraRequires_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDebianExtraRequiresIsMutable() {
        if (!((bitField1_ & 0x00008000) == 0x00008000)) {
          debianExtraRequires_ = new com.google.protobuf.LazyStringArrayList(debianExtraRequires_);
          bitField1_ |= 0x00008000;
         }
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getDebianExtraRequiresList() {
        return debianExtraRequires_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public int getDebianExtraRequiresCount() {
        return debianExtraRequires_.size();
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public java.lang.String getDebianExtraRequires(int index) {
        return debianExtraRequires_.get(index);
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public com.google.protobuf.ByteString
          getDebianExtraRequiresBytes(int index) {
        return debianExtraRequires_.getByteString(index);
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public Builder setDebianExtraRequires(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDebianExtraRequiresIsMutable();
        debianExtraRequires_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public Builder addDebianExtraRequires(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDebianExtraRequiresIsMutable();
        debianExtraRequires_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public Builder addAllDebianExtraRequires(
          java.lang.Iterable<java.lang.String> values) {
        ensureDebianExtraRequiresIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, debianExtraRequires_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public Builder clearDebianExtraRequires() {
        debianExtraRequires_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField1_ = (bitField1_ & ~0x00008000);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Additional dependencies for Blaze-built .deb packages. All Debian packages
       * that contain C++ binaries need to have the correct runtime
       * libraries installed, and those depend on the crosstool version, which is
       * why they are recorded here.
       * </pre>
       *
       * <code>repeated string debian_extra_requires = 33;</code>
       */
      public Builder addDebianExtraRequiresBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDebianExtraRequiresIsMutable();
        debianExtraRequires_.add(value);
        onChanged();
        return this;
      }

      private java.lang.Object ccTargetOs_ = "";
      /**
       * <pre>
       * Unused, for compatibility with things internal to Google.
       * </pre>
       *
       * <code>optional string cc_target_os = 55;</code>
       */
      public boolean hasCcTargetOs() {
        return ((bitField1_ & 0x00010000) == 0x00010000);
      }
      /**
       * <pre>
       * Unused, for compatibility with things internal to Google.
       * </pre>
       *
       * <code>optional string cc_target_os = 55;</code>
       */
      public java.lang.String getCcTargetOs() {
        java.lang.Object ref = ccTargetOs_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            ccTargetOs_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Unused, for compatibility with things internal to Google.
       * </pre>
       *
       * <code>optional string cc_target_os = 55;</code>
       */
      public com.google.protobuf.ByteString
          getCcTargetOsBytes() {
        java.lang.Object ref = ccTargetOs_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          ccTargetOs_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Unused, for compatibility with things internal to Google.
       * </pre>
       *
       * <code>optional string cc_target_os = 55;</code>
       */
      public Builder setCcTargetOs(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00010000;
        ccTargetOs_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unused, for compatibility with things internal to Google.
       * </pre>
       *
       * <code>optional string cc_target_os = 55;</code>
       */
      public Builder clearCcTargetOs() {
        bitField1_ = (bitField1_ & ~0x00010000);
        ccTargetOs_ = getDefaultInstance().getCcTargetOs();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unused, for compatibility with things internal to Google.
       * </pre>
       *
       * <code>optional string cc_target_os = 55;</code>
       */
      public Builder setCcTargetOsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField1_ |= 0x00010000;
        ccTargetOs_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain)
    }

    // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CToolchain)
    private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain();
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ToolPathOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.ToolPath)
      com.google.protobuf.MessageOrBuilder {

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

    /**
     * <code>required string path = 2;</code>
     */
    boolean hasPath();
    /**
     * <code>required string path = 2;</code>
     */
    java.lang.String getPath();
    /**
     * <code>required string path = 2;</code>
     */
    com.google.protobuf.ByteString
        getPathBytes();
  }
  /**
   * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.ToolPath}
   */
  public  static final class ToolPath extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.ToolPath)
      ToolPathOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ToolPath.newBuilder() to construct.
    private ToolPath(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ToolPath() {
      name_ = "";
      path_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ToolPath(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      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;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              path_ = bs;
              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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder.class);
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <code>required string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PATH_FIELD_NUMBER = 2;
    private volatile java.lang.Object path_;
    /**
     * <code>required string path = 2;</code>
     */
    public boolean hasPath() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required string path = 2;</code>
     */
    public java.lang.String getPath() {
      java.lang.Object 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 (bs.isValidUtf8()) {
          path_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string path = 2;</code>
     */
    public com.google.protobuf.ByteString
        getPathBytes() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        path_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasPath()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, path_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, path_);
      }
      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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath) obj;

      boolean result = true;
      result = result && (hasName() == other.hasName());
      if (hasName()) {
        result = result && getName()
            .equals(other.getName());
      }
      result = result && (hasPath() == other.hasPath());
      if (hasPath()) {
        result = result && getPath()
            .equals(other.getPath());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasName()) {
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 com.google.devtools.build.lib.view.config.crosstool.ToolPath}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.ToolPath)
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPathOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        path_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_descriptor;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath getDefaultInstanceForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.getDefaultInstance();
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath build() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath buildPartial() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.path_ = path_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath) {
          return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath other) {
        if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasPath()) {
          bitField0_ |= 0x00000002;
          path_ = other.path_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasName()) {
          return false;
        }
        if (!hasPath()) {
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>required string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object path_ = "";
      /**
       * <code>required string path = 2;</code>
       */
      public boolean hasPath() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string path = 2;</code>
       */
      public java.lang.String getPath() {
        java.lang.Object 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 (bs.isValidUtf8()) {
            path_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string path = 2;</code>
       */
      public com.google.protobuf.ByteString
          getPathBytes() {
        java.lang.Object ref = path_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          path_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string path = 2;</code>
       */
      public Builder setPath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string path = 2;</code>
       */
      public Builder clearPath() {
        bitField0_ = (bitField0_ & ~0x00000002);
        path_ = getDefaultInstance().getPath();
        onChanged();
        return this;
      }
      /**
       * <code>required string path = 2;</code>
       */
      public Builder setPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        path_ = value;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.ToolPath)
    }

    // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.ToolPath)
    private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath();
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.ToolPath getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CompilationModeFlagsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.CompilationMode mode = 1;</code>
     */
    boolean hasMode();
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.CompilationMode mode = 1;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode getMode();

    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    java.util.List<java.lang.String>
        getCompilerFlagList();
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    int getCompilerFlagCount();
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    java.lang.String getCompilerFlag(int index);
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    com.google.protobuf.ByteString
        getCompilerFlagBytes(int index);

    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    java.util.List<java.lang.String>
        getCxxFlagList();
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    int getCxxFlagCount();
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    java.lang.String getCxxFlag(int index);
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    com.google.protobuf.ByteString
        getCxxFlagBytes(int index);

    /**
     * <pre>
     * Linker flags that are added when compiling in a certain mode.
     * </pre>
     *
     * <code>repeated string linker_flag = 4;</code>
     */
    java.util.List<java.lang.String>
        getLinkerFlagList();
    /**
     * <pre>
     * Linker flags that are added when compiling in a certain mode.
     * </pre>
     *
     * <code>repeated string linker_flag = 4;</code>
     */
    int getLinkerFlagCount();
    /**
     * <pre>
     * Linker flags that are added when compiling in a certain mode.
     * </pre>
     *
     * <code>repeated string linker_flag = 4;</code>
     */
    java.lang.String getLinkerFlag(int index);
    /**
     * <pre>
     * Linker flags that are added when compiling in a certain mode.
     * </pre>
     *
     * <code>repeated string linker_flag = 4;</code>
     */
    com.google.protobuf.ByteString
        getLinkerFlagBytes(int index);
  }
  /**
   * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags}
   */
  public  static final class CompilationModeFlags extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags)
      CompilationModeFlagsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CompilationModeFlags.newBuilder() to construct.
    private CompilationModeFlags(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CompilationModeFlags() {
      mode_ = 1;
      compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CompilationModeFlags(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      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;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode value = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                mode_ = rawValue;
              }
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                compilerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              compilerFlag_.add(bs);
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                cxxFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              cxxFlag_.add(bs);
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                linkerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              linkerFlag_.add(bs);
              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_ & 0x00000002) == 0x00000002)) {
          compilerFlag_ = compilerFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          cxxFlag_ = cxxFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          linkerFlag_ = linkerFlag_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder.class);
    }

    private int bitField0_;
    public static final int MODE_FIELD_NUMBER = 1;
    private int mode_;
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.CompilationMode mode = 1;</code>
     */
    public boolean hasMode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.CompilationMode mode = 1;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode getMode() {
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode result = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode.valueOf(mode_);
      return result == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode.FASTBUILD : result;
    }

    public static final int COMPILER_FLAG_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList compilerFlag_;
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getCompilerFlagList() {
      return compilerFlag_;
    }
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    public int getCompilerFlagCount() {
      return compilerFlag_.size();
    }
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    public java.lang.String getCompilerFlag(int index) {
      return compilerFlag_.get(index);
    }
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    public com.google.protobuf.ByteString
        getCompilerFlagBytes(int index) {
      return compilerFlag_.getByteString(index);
    }

    public static final int CXX_FLAG_FIELD_NUMBER = 3;
    private com.google.protobuf.LazyStringList cxxFlag_;
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getCxxFlagList() {
      return cxxFlag_;
    }
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    public int getCxxFlagCount() {
      return cxxFlag_.size();
    }
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    public java.lang.String getCxxFlag(int index) {
      return cxxFlag_.get(index);
    }
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    public com.google.protobuf.ByteString
        getCxxFlagBytes(int index) {
      return cxxFlag_.getByteString(index);
    }

    public static final int LINKER_FLAG_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList linkerFlag_;
    /**
     * <pre>
     * Linker flags that are added when compiling in a certain mode.
     * </pre>
     *
     * <code>repeated string linker_flag = 4;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getLinkerFlagList() {
      return linkerFlag_;
    }
    /**
     * <pre>
     * Linker flags that are added when compiling in a certain mode.
     * </pre>
     *
     * <code>repeated string linker_flag = 4;</code>
     */
    public int getLinkerFlagCount() {
      return linkerFlag_.size();
    }
    /**
     * <pre>
     * Linker flags that are added when compiling in a certain mode.
     * </pre>
     *
     * <code>repeated string linker_flag = 4;</code>
     */
    public java.lang.String getLinkerFlag(int index) {
      return linkerFlag_.get(index);
    }
    /**
     * <pre>
     * Linker flags that are added when compiling in a certain mode.
     * </pre>
     *
     * <code>repeated string linker_flag = 4;</code>
     */
    public com.google.protobuf.ByteString
        getLinkerFlagBytes(int index) {
      return linkerFlag_.getByteString(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasMode()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, mode_);
      }
      for (int i = 0; i < compilerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, compilerFlag_.getRaw(i));
      }
      for (int i = 0; i < cxxFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, cxxFlag_.getRaw(i));
      }
      for (int i = 0; i < linkerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, linkerFlag_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, mode_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < compilerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(compilerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getCompilerFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < cxxFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(cxxFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getCxxFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < linkerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(linkerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getLinkerFlagList().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags) obj;

      boolean result = true;
      result = result && (hasMode() == other.hasMode());
      if (hasMode()) {
        result = result && mode_ == other.mode_;
      }
      result = result && getCompilerFlagList()
          .equals(other.getCompilerFlagList());
      result = result && getCxxFlagList()
          .equals(other.getCxxFlagList());
      result = result && getLinkerFlagList()
          .equals(other.getLinkerFlagList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMode()) {
        hash = (37 * hash) + MODE_FIELD_NUMBER;
        hash = (53 * hash) + mode_;
      }
      if (getCompilerFlagCount() > 0) {
        hash = (37 * hash) + COMPILER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getCompilerFlagList().hashCode();
      }
      if (getCxxFlagCount() > 0) {
        hash = (37 * hash) + CXX_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getCxxFlagList().hashCode();
      }
      if (getLinkerFlagCount() > 0) {
        hash = (37 * hash) + LINKER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getLinkerFlagList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags)
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlagsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        mode_ = 1;
        bitField0_ = (bitField0_ & ~0x00000001);
        compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_descriptor;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags getDefaultInstanceForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.getDefaultInstance();
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags build() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags buildPartial() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.mode_ = mode_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          compilerFlag_ = compilerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.compilerFlag_ = compilerFlag_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          cxxFlag_ = cxxFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.cxxFlag_ = cxxFlag_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          linkerFlag_ = linkerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.linkerFlag_ = linkerFlag_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags) {
          return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags other) {
        if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags.getDefaultInstance()) return this;
        if (other.hasMode()) {
          setMode(other.getMode());
        }
        if (!other.compilerFlag_.isEmpty()) {
          if (compilerFlag_.isEmpty()) {
            compilerFlag_ = other.compilerFlag_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureCompilerFlagIsMutable();
            compilerFlag_.addAll(other.compilerFlag_);
          }
          onChanged();
        }
        if (!other.cxxFlag_.isEmpty()) {
          if (cxxFlag_.isEmpty()) {
            cxxFlag_ = other.cxxFlag_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureCxxFlagIsMutable();
            cxxFlag_.addAll(other.cxxFlag_);
          }
          onChanged();
        }
        if (!other.linkerFlag_.isEmpty()) {
          if (linkerFlag_.isEmpty()) {
            linkerFlag_ = other.linkerFlag_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureLinkerFlagIsMutable();
            linkerFlag_.addAll(other.linkerFlag_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasMode()) {
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int mode_ = 1;
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.CompilationMode mode = 1;</code>
       */
      public boolean hasMode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.CompilationMode mode = 1;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode getMode() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode result = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode.valueOf(mode_);
        return result == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode.FASTBUILD : result;
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.CompilationMode mode = 1;</code>
       */
      public Builder setMode(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        mode_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.CompilationMode mode = 1;</code>
       */
      public Builder clearMode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        mode_ = 1;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCompilerFlagIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          compilerFlag_ = new com.google.protobuf.LazyStringArrayList(compilerFlag_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getCompilerFlagList() {
        return compilerFlag_.getUnmodifiableView();
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public int getCompilerFlagCount() {
        return compilerFlag_.size();
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public java.lang.String getCompilerFlag(int index) {
        return compilerFlag_.get(index);
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public com.google.protobuf.ByteString
          getCompilerFlagBytes(int index) {
        return compilerFlag_.getByteString(index);
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder setCompilerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder addCompilerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder addAllCompilerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureCompilerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, compilerFlag_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder clearCompilerFlag() {
        compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder addCompilerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCxxFlagIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          cxxFlag_ = new com.google.protobuf.LazyStringArrayList(cxxFlag_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getCxxFlagList() {
        return cxxFlag_.getUnmodifiableView();
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public int getCxxFlagCount() {
        return cxxFlag_.size();
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public java.lang.String getCxxFlag(int index) {
        return cxxFlag_.get(index);
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public com.google.protobuf.ByteString
          getCxxFlagBytes(int index) {
        return cxxFlag_.getByteString(index);
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder setCxxFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder addCxxFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder addAllCxxFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureCxxFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, cxxFlag_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder clearCxxFlag() {
        cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder addCxxFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureLinkerFlagIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          linkerFlag_ = new com.google.protobuf.LazyStringArrayList(linkerFlag_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getLinkerFlagList() {
        return linkerFlag_.getUnmodifiableView();
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public int getLinkerFlagCount() {
        return linkerFlag_.size();
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public java.lang.String getLinkerFlag(int index) {
        return linkerFlag_.get(index);
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public com.google.protobuf.ByteString
          getLinkerFlagBytes(int index) {
        return linkerFlag_.getByteString(index);
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder setLinkerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder addLinkerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder addAllLinkerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureLinkerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, linkerFlag_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder clearLinkerFlag() {
        linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Linker flags that are added when compiling in a certain mode.
       * </pre>
       *
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder addLinkerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.add(value);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags)
    }

    // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CompilationModeFlags)
    private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags();
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CompilationModeFlags getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LinkingModeFlagsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.LinkingMode mode = 1;</code>
     */
    boolean hasMode();
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.LinkingMode mode = 1;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode getMode();

    /**
     * <code>repeated string linker_flag = 2;</code>
     */
    java.util.List<java.lang.String>
        getLinkerFlagList();
    /**
     * <code>repeated string linker_flag = 2;</code>
     */
    int getLinkerFlagCount();
    /**
     * <code>repeated string linker_flag = 2;</code>
     */
    java.lang.String getLinkerFlag(int index);
    /**
     * <code>repeated string linker_flag = 2;</code>
     */
    com.google.protobuf.ByteString
        getLinkerFlagBytes(int index);
  }
  /**
   * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags}
   */
  public  static final class LinkingModeFlags extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags)
      LinkingModeFlagsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LinkingModeFlags.newBuilder() to construct.
    private LinkingModeFlags(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LinkingModeFlags() {
      mode_ = 1;
      linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LinkingModeFlags(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      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;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode value = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                mode_ = rawValue;
              }
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                linkerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              linkerFlag_.add(bs);
              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_ & 0x00000002) == 0x00000002)) {
          linkerFlag_ = linkerFlag_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder.class);
    }

    private int bitField0_;
    public static final int MODE_FIELD_NUMBER = 1;
    private int mode_;
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.LinkingMode mode = 1;</code>
     */
    public boolean hasMode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.LinkingMode mode = 1;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode getMode() {
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode result = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode.valueOf(mode_);
      return result == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode.FULLY_STATIC : result;
    }

    public static final int LINKER_FLAG_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList linkerFlag_;
    /**
     * <code>repeated string linker_flag = 2;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getLinkerFlagList() {
      return linkerFlag_;
    }
    /**
     * <code>repeated string linker_flag = 2;</code>
     */
    public int getLinkerFlagCount() {
      return linkerFlag_.size();
    }
    /**
     * <code>repeated string linker_flag = 2;</code>
     */
    public java.lang.String getLinkerFlag(int index) {
      return linkerFlag_.get(index);
    }
    /**
     * <code>repeated string linker_flag = 2;</code>
     */
    public com.google.protobuf.ByteString
        getLinkerFlagBytes(int index) {
      return linkerFlag_.getByteString(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasMode()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, mode_);
      }
      for (int i = 0; i < linkerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, linkerFlag_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, mode_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < linkerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(linkerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getLinkerFlagList().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags) obj;

      boolean result = true;
      result = result && (hasMode() == other.hasMode());
      if (hasMode()) {
        result = result && mode_ == other.mode_;
      }
      result = result && getLinkerFlagList()
          .equals(other.getLinkerFlagList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMode()) {
        hash = (37 * hash) + MODE_FIELD_NUMBER;
        hash = (53 * hash) + mode_;
      }
      if (getLinkerFlagCount() > 0) {
        hash = (37 * hash) + LINKER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getLinkerFlagList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags)
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlagsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        mode_ = 1;
        bitField0_ = (bitField0_ & ~0x00000001);
        linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_descriptor;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags getDefaultInstanceForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.getDefaultInstance();
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags build() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags buildPartial() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.mode_ = mode_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          linkerFlag_ = linkerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.linkerFlag_ = linkerFlag_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags) {
          return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags other) {
        if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags.getDefaultInstance()) return this;
        if (other.hasMode()) {
          setMode(other.getMode());
        }
        if (!other.linkerFlag_.isEmpty()) {
          if (linkerFlag_.isEmpty()) {
            linkerFlag_ = other.linkerFlag_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureLinkerFlagIsMutable();
            linkerFlag_.addAll(other.linkerFlag_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasMode()) {
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int mode_ = 1;
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.LinkingMode mode = 1;</code>
       */
      public boolean hasMode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.LinkingMode mode = 1;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode getMode() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode result = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode.valueOf(mode_);
        return result == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode.FULLY_STATIC : result;
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.LinkingMode mode = 1;</code>
       */
      public Builder setMode(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        mode_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.LinkingMode mode = 1;</code>
       */
      public Builder clearMode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        mode_ = 1;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureLinkerFlagIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          linkerFlag_ = new com.google.protobuf.LazyStringArrayList(linkerFlag_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getLinkerFlagList() {
        return linkerFlag_.getUnmodifiableView();
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public int getLinkerFlagCount() {
        return linkerFlag_.size();
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public java.lang.String getLinkerFlag(int index) {
        return linkerFlag_.get(index);
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public com.google.protobuf.ByteString
          getLinkerFlagBytes(int index) {
        return linkerFlag_.getByteString(index);
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public Builder setLinkerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public Builder addLinkerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public Builder addAllLinkerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureLinkerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, linkerFlag_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public Builder clearLinkerFlag() {
        linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string linker_flag = 2;</code>
       */
      public Builder addLinkerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.add(value);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags)
    }

    // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.LinkingModeFlags)
    private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags();
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LinkingModeFlags getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LipoModeFlagsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.LipoMode mode = 1;</code>
     */
    boolean hasMode();
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.LipoMode mode = 1;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode getMode();

    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    java.util.List<java.lang.String>
        getCompilerFlagList();
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    int getCompilerFlagCount();
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    java.lang.String getCompilerFlag(int index);
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    com.google.protobuf.ByteString
        getCompilerFlagBytes(int index);

    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    java.util.List<java.lang.String>
        getCxxFlagList();
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    int getCxxFlagCount();
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    java.lang.String getCxxFlag(int index);
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    com.google.protobuf.ByteString
        getCxxFlagBytes(int index);

    /**
     * <code>repeated string linker_flag = 4;</code>
     */
    java.util.List<java.lang.String>
        getLinkerFlagList();
    /**
     * <code>repeated string linker_flag = 4;</code>
     */
    int getLinkerFlagCount();
    /**
     * <code>repeated string linker_flag = 4;</code>
     */
    java.lang.String getLinkerFlag(int index);
    /**
     * <code>repeated string linker_flag = 4;</code>
     */
    com.google.protobuf.ByteString
        getLinkerFlagBytes(int index);
  }
  /**
   * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags}
   */
  public  static final class LipoModeFlags extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags)
      LipoModeFlagsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LipoModeFlags.newBuilder() to construct.
    private LipoModeFlags(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LipoModeFlags() {
      mode_ = 1;
      compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LipoModeFlags(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      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;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              int rawValue = input.readEnum();
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode value = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                mode_ = rawValue;
              }
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                compilerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              compilerFlag_.add(bs);
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                cxxFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              cxxFlag_.add(bs);
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                linkerFlag_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              linkerFlag_.add(bs);
              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_ & 0x00000002) == 0x00000002)) {
          compilerFlag_ = compilerFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          cxxFlag_ = cxxFlag_.getUnmodifiableView();
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          linkerFlag_ = linkerFlag_.getUnmodifiableView();
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder.class);
    }

    private int bitField0_;
    public static final int MODE_FIELD_NUMBER = 1;
    private int mode_;
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.LipoMode mode = 1;</code>
     */
    public boolean hasMode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required .com.google.devtools.build.lib.view.config.crosstool.LipoMode mode = 1;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode getMode() {
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode result = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode.valueOf(mode_);
      return result == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode.OFF : result;
    }

    public static final int COMPILER_FLAG_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList compilerFlag_;
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getCompilerFlagList() {
      return compilerFlag_;
    }
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    public int getCompilerFlagCount() {
      return compilerFlag_.size();
    }
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    public java.lang.String getCompilerFlag(int index) {
      return compilerFlag_.get(index);
    }
    /**
     * <code>repeated string compiler_flag = 2;</code>
     */
    public com.google.protobuf.ByteString
        getCompilerFlagBytes(int index) {
      return compilerFlag_.getByteString(index);
    }

    public static final int CXX_FLAG_FIELD_NUMBER = 3;
    private com.google.protobuf.LazyStringList cxxFlag_;
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getCxxFlagList() {
      return cxxFlag_;
    }
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    public int getCxxFlagCount() {
      return cxxFlag_.size();
    }
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    public java.lang.String getCxxFlag(int index) {
      return cxxFlag_.get(index);
    }
    /**
     * <code>repeated string cxx_flag = 3;</code>
     */
    public com.google.protobuf.ByteString
        getCxxFlagBytes(int index) {
      return cxxFlag_.getByteString(index);
    }

    public static final int LINKER_FLAG_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList linkerFlag_;
    /**
     * <code>repeated string linker_flag = 4;</code>
     */
    public com.google.protobuf.ProtocolStringList
        getLinkerFlagList() {
      return linkerFlag_;
    }
    /**
     * <code>repeated string linker_flag = 4;</code>
     */
    public int getLinkerFlagCount() {
      return linkerFlag_.size();
    }
    /**
     * <code>repeated string linker_flag = 4;</code>
     */
    public java.lang.String getLinkerFlag(int index) {
      return linkerFlag_.get(index);
    }
    /**
     * <code>repeated string linker_flag = 4;</code>
     */
    public com.google.protobuf.ByteString
        getLinkerFlagBytes(int index) {
      return linkerFlag_.getByteString(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasMode()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(1, mode_);
      }
      for (int i = 0; i < compilerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, compilerFlag_.getRaw(i));
      }
      for (int i = 0; i < cxxFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, cxxFlag_.getRaw(i));
      }
      for (int i = 0; i < linkerFlag_.size(); i++) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, linkerFlag_.getRaw(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, mode_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < compilerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(compilerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getCompilerFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < cxxFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(cxxFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getCxxFlagList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < linkerFlag_.size(); i++) {
          dataSize += computeStringSizeNoTag(linkerFlag_.getRaw(i));
        }
        size += dataSize;
        size += 1 * getLinkerFlagList().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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags) obj;

      boolean result = true;
      result = result && (hasMode() == other.hasMode());
      if (hasMode()) {
        result = result && mode_ == other.mode_;
      }
      result = result && getCompilerFlagList()
          .equals(other.getCompilerFlagList());
      result = result && getCxxFlagList()
          .equals(other.getCxxFlagList());
      result = result && getLinkerFlagList()
          .equals(other.getLinkerFlagList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMode()) {
        hash = (37 * hash) + MODE_FIELD_NUMBER;
        hash = (53 * hash) + mode_;
      }
      if (getCompilerFlagCount() > 0) {
        hash = (37 * hash) + COMPILER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getCompilerFlagList().hashCode();
      }
      if (getCxxFlagCount() > 0) {
        hash = (37 * hash) + CXX_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getCxxFlagList().hashCode();
      }
      if (getLinkerFlagCount() > 0) {
        hash = (37 * hash) + LINKER_FLAG_FIELD_NUMBER;
        hash = (53 * hash) + getLinkerFlagList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags)
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlagsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        mode_ = 1;
        bitField0_ = (bitField0_ & ~0x00000001);
        compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_descriptor;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags getDefaultInstanceForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.getDefaultInstance();
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags build() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags buildPartial() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.mode_ = mode_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          compilerFlag_ = compilerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.compilerFlag_ = compilerFlag_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          cxxFlag_ = cxxFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.cxxFlag_ = cxxFlag_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          linkerFlag_ = linkerFlag_.getUnmodifiableView();
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.linkerFlag_ = linkerFlag_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags) {
          return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags other) {
        if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags.getDefaultInstance()) return this;
        if (other.hasMode()) {
          setMode(other.getMode());
        }
        if (!other.compilerFlag_.isEmpty()) {
          if (compilerFlag_.isEmpty()) {
            compilerFlag_ = other.compilerFlag_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureCompilerFlagIsMutable();
            compilerFlag_.addAll(other.compilerFlag_);
          }
          onChanged();
        }
        if (!other.cxxFlag_.isEmpty()) {
          if (cxxFlag_.isEmpty()) {
            cxxFlag_ = other.cxxFlag_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureCxxFlagIsMutable();
            cxxFlag_.addAll(other.cxxFlag_);
          }
          onChanged();
        }
        if (!other.linkerFlag_.isEmpty()) {
          if (linkerFlag_.isEmpty()) {
            linkerFlag_ = other.linkerFlag_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureLinkerFlagIsMutable();
            linkerFlag_.addAll(other.linkerFlag_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasMode()) {
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int mode_ = 1;
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.LipoMode mode = 1;</code>
       */
      public boolean hasMode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.LipoMode mode = 1;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode getMode() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode result = com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode.valueOf(mode_);
        return result == null ? com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode.OFF : result;
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.LipoMode mode = 1;</code>
       */
      public Builder setMode(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        mode_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>required .com.google.devtools.build.lib.view.config.crosstool.LipoMode mode = 1;</code>
       */
      public Builder clearMode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        mode_ = 1;
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCompilerFlagIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          compilerFlag_ = new com.google.protobuf.LazyStringArrayList(compilerFlag_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getCompilerFlagList() {
        return compilerFlag_.getUnmodifiableView();
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public int getCompilerFlagCount() {
        return compilerFlag_.size();
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public java.lang.String getCompilerFlag(int index) {
        return compilerFlag_.get(index);
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public com.google.protobuf.ByteString
          getCompilerFlagBytes(int index) {
        return compilerFlag_.getByteString(index);
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder setCompilerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder addCompilerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder addAllCompilerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureCompilerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, compilerFlag_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder clearCompilerFlag() {
        compilerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string compiler_flag = 2;</code>
       */
      public Builder addCompilerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCompilerFlagIsMutable();
        compilerFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCxxFlagIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          cxxFlag_ = new com.google.protobuf.LazyStringArrayList(cxxFlag_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getCxxFlagList() {
        return cxxFlag_.getUnmodifiableView();
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public int getCxxFlagCount() {
        return cxxFlag_.size();
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public java.lang.String getCxxFlag(int index) {
        return cxxFlag_.get(index);
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public com.google.protobuf.ByteString
          getCxxFlagBytes(int index) {
        return cxxFlag_.getByteString(index);
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder setCxxFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder addCxxFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder addAllCxxFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureCxxFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, cxxFlag_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder clearCxxFlag() {
        cxxFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string cxx_flag = 3;</code>
       */
      public Builder addCxxFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCxxFlagIsMutable();
        cxxFlag_.add(value);
        onChanged();
        return this;
      }

      private com.google.protobuf.LazyStringList linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureLinkerFlagIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          linkerFlag_ = new com.google.protobuf.LazyStringArrayList(linkerFlag_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public com.google.protobuf.ProtocolStringList
          getLinkerFlagList() {
        return linkerFlag_.getUnmodifiableView();
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public int getLinkerFlagCount() {
        return linkerFlag_.size();
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public java.lang.String getLinkerFlag(int index) {
        return linkerFlag_.get(index);
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public com.google.protobuf.ByteString
          getLinkerFlagBytes(int index) {
        return linkerFlag_.getByteString(index);
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder setLinkerFlag(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder addLinkerFlag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder addAllLinkerFlag(
          java.lang.Iterable<java.lang.String> values) {
        ensureLinkerFlagIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, linkerFlag_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder clearLinkerFlag() {
        linkerFlag_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string linker_flag = 4;</code>
       */
      public Builder addLinkerFlagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureLinkerFlagIsMutable();
        linkerFlag_.add(value);
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags)
    }

    // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.LipoModeFlags)
    private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags();
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.LipoModeFlags getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MakeVariableOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.MakeVariable)
      com.google.protobuf.MessageOrBuilder {

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

    /**
     * <code>required string value = 2;</code>
     */
    boolean hasValue();
    /**
     * <code>required string value = 2;</code>
     */
    java.lang.String getValue();
    /**
     * <code>required string value = 2;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.MakeVariable}
   */
  public  static final class MakeVariable extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.MakeVariable)
      MakeVariableOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MakeVariable.newBuilder() to construct.
    private MakeVariable(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MakeVariable() {
      name_ = "";
      value_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MakeVariable(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      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;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              name_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              value_ = bs;
              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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder.class);
    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <code>required string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private volatile java.lang.Object value_;
    /**
     * <code>required string value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required string value = 2;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string value = 2;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasName()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasValue()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
      }
      size += unknownFields.getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable) obj;

      boolean result = true;
      result = result && (hasName() == other.hasName());
      if (hasName()) {
        result = result && getName()
            .equals(other.getName());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && getValue()
            .equals(other.getValue());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasName()) {
        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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 com.google.devtools.build.lib.view.config.crosstool.MakeVariable}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.MakeVariable)
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariableOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_descriptor;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable getDefaultInstanceForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.getDefaultInstance();
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable build() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable buildPartial() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable) {
          return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable other) {
        if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000002;
          value_ = other.value_;
          onChanged();
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasName()) {
          return false;
        }
        if (!hasValue()) {
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <code>required string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>required string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

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

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


      // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.MakeVariable)
    }

    // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.MakeVariable)
    private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable();
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.MakeVariable getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DefaultCpuToolchainOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>required string cpu = 1;</code>
     */
    boolean hasCpu();
    /**
     * <code>required string cpu = 1;</code>
     */
    java.lang.String getCpu();
    /**
     * <code>required string cpu = 1;</code>
     */
    com.google.protobuf.ByteString
        getCpuBytes();

    /**
     * <code>required string toolchain_identifier = 2;</code>
     */
    boolean hasToolchainIdentifier();
    /**
     * <code>required string toolchain_identifier = 2;</code>
     */
    java.lang.String getToolchainIdentifier();
    /**
     * <code>required string toolchain_identifier = 2;</code>
     */
    com.google.protobuf.ByteString
        getToolchainIdentifierBytes();

    /**
     * <code>optional bool supports_lipo = 3 [default = true];</code>
     */
    boolean hasSupportsLipo();
    /**
     * <code>optional bool supports_lipo = 3 [default = true];</code>
     */
    boolean getSupportsLipo();
  }
  /**
   * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain}
   */
  public  static final class DefaultCpuToolchain extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain)
      DefaultCpuToolchainOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DefaultCpuToolchain.newBuilder() to construct.
    private DefaultCpuToolchain(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DefaultCpuToolchain() {
      cpu_ = "";
      toolchainIdentifier_ = "";
      supportsLipo_ = true;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DefaultCpuToolchain(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      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;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              cpu_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              toolchainIdentifier_ = bs;
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              supportsLipo_ = input.readBool();
              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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder.class);
    }

    private int bitField0_;
    public static final int CPU_FIELD_NUMBER = 1;
    private volatile java.lang.Object cpu_;
    /**
     * <code>required string cpu = 1;</code>
     */
    public boolean hasCpu() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>required string cpu = 1;</code>
     */
    public java.lang.String getCpu() {
      java.lang.Object ref = cpu_;
      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 (bs.isValidUtf8()) {
          cpu_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string cpu = 1;</code>
     */
    public com.google.protobuf.ByteString
        getCpuBytes() {
      java.lang.Object ref = cpu_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        cpu_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TOOLCHAIN_IDENTIFIER_FIELD_NUMBER = 2;
    private volatile java.lang.Object toolchainIdentifier_;
    /**
     * <code>required string toolchain_identifier = 2;</code>
     */
    public boolean hasToolchainIdentifier() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required string toolchain_identifier = 2;</code>
     */
    public java.lang.String getToolchainIdentifier() {
      java.lang.Object ref = toolchainIdentifier_;
      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 (bs.isValidUtf8()) {
          toolchainIdentifier_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string toolchain_identifier = 2;</code>
     */
    public com.google.protobuf.ByteString
        getToolchainIdentifierBytes() {
      java.lang.Object ref = toolchainIdentifier_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        toolchainIdentifier_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SUPPORTS_LIPO_FIELD_NUMBER = 3;
    private boolean supportsLipo_;
    /**
     * <code>optional bool supports_lipo = 3 [default = true];</code>
     */
    public boolean hasSupportsLipo() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool supports_lipo = 3 [default = true];</code>
     */
    public boolean getSupportsLipo() {
      return supportsLipo_;
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasCpu()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasToolchainIdentifier()) {
        memoizedIsInitialized = 0;
        return false;
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, cpu_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, toolchainIdentifier_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, supportsLipo_);
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, cpu_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, toolchainIdentifier_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, supportsLipo_);
      }
      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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain) obj;

      boolean result = true;
      result = result && (hasCpu() == other.hasCpu());
      if (hasCpu()) {
        result = result && getCpu()
            .equals(other.getCpu());
      }
      result = result && (hasToolchainIdentifier() == other.hasToolchainIdentifier());
      if (hasToolchainIdentifier()) {
        result = result && getToolchainIdentifier()
            .equals(other.getToolchainIdentifier());
      }
      result = result && (hasSupportsLipo() == other.hasSupportsLipo());
      if (hasSupportsLipo()) {
        result = result && (getSupportsLipo()
            == other.getSupportsLipo());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasCpu()) {
        hash = (37 * hash) + CPU_FIELD_NUMBER;
        hash = (53 * hash) + getCpu().hashCode();
      }
      if (hasToolchainIdentifier()) {
        hash = (37 * hash) + TOOLCHAIN_IDENTIFIER_FIELD_NUMBER;
        hash = (53 * hash) + getToolchainIdentifier().hashCode();
      }
      if (hasSupportsLipo()) {
        hash = (37 * hash) + SUPPORTS_LIPO_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getSupportsLipo());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    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 com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain)
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
        }
      }
      public Builder clear() {
        super.clear();
        cpu_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        toolchainIdentifier_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        supportsLipo_ = true;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_descriptor;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain getDefaultInstanceForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.getDefaultInstance();
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain build() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain buildPartial() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.cpu_ = cpu_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.toolchainIdentifier_ = toolchainIdentifier_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.supportsLipo_ = supportsLipo_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain) {
          return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain other) {
        if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.getDefaultInstance()) return this;
        if (other.hasCpu()) {
          bitField0_ |= 0x00000001;
          cpu_ = other.cpu_;
          onChanged();
        }
        if (other.hasToolchainIdentifier()) {
          bitField0_ |= 0x00000002;
          toolchainIdentifier_ = other.toolchainIdentifier_;
          onChanged();
        }
        if (other.hasSupportsLipo()) {
          setSupportsLipo(other.getSupportsLipo());
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasCpu()) {
          return false;
        }
        if (!hasToolchainIdentifier()) {
          return false;
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object cpu_ = "";
      /**
       * <code>required string cpu = 1;</code>
       */
      public boolean hasCpu() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>required string cpu = 1;</code>
       */
      public java.lang.String getCpu() {
        java.lang.Object ref = cpu_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            cpu_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string cpu = 1;</code>
       */
      public com.google.protobuf.ByteString
          getCpuBytes() {
        java.lang.Object ref = cpu_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          cpu_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string cpu = 1;</code>
       */
      public Builder setCpu(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        cpu_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string cpu = 1;</code>
       */
      public Builder clearCpu() {
        bitField0_ = (bitField0_ & ~0x00000001);
        cpu_ = getDefaultInstance().getCpu();
        onChanged();
        return this;
      }
      /**
       * <code>required string cpu = 1;</code>
       */
      public Builder setCpuBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        cpu_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object toolchainIdentifier_ = "";
      /**
       * <code>required string toolchain_identifier = 2;</code>
       */
      public boolean hasToolchainIdentifier() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string toolchain_identifier = 2;</code>
       */
      public java.lang.String getToolchainIdentifier() {
        java.lang.Object ref = toolchainIdentifier_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            toolchainIdentifier_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string toolchain_identifier = 2;</code>
       */
      public com.google.protobuf.ByteString
          getToolchainIdentifierBytes() {
        java.lang.Object ref = toolchainIdentifier_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          toolchainIdentifier_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string toolchain_identifier = 2;</code>
       */
      public Builder setToolchainIdentifier(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        toolchainIdentifier_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string toolchain_identifier = 2;</code>
       */
      public Builder clearToolchainIdentifier() {
        bitField0_ = (bitField0_ & ~0x00000002);
        toolchainIdentifier_ = getDefaultInstance().getToolchainIdentifier();
        onChanged();
        return this;
      }
      /**
       * <code>required string toolchain_identifier = 2;</code>
       */
      public Builder setToolchainIdentifierBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        toolchainIdentifier_ = value;
        onChanged();
        return this;
      }

      private boolean supportsLipo_ = true;
      /**
       * <code>optional bool supports_lipo = 3 [default = true];</code>
       */
      public boolean hasSupportsLipo() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool supports_lipo = 3 [default = true];</code>
       */
      public boolean getSupportsLipo() {
        return supportsLipo_;
      }
      /**
       * <code>optional bool supports_lipo = 3 [default = true];</code>
       */
      public Builder setSupportsLipo(boolean value) {
        bitField0_ |= 0x00000004;
        supportsLipo_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool supports_lipo = 3 [default = true];</code>
       */
      public Builder clearSupportsLipo() {
        bitField0_ = (bitField0_ & ~0x00000004);
        supportsLipo_ = true;
        onChanged();
        return this;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain)
    }

    // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain)
    private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain();
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CrosstoolReleaseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * The major and minor version of the crosstool release.
     * </pre>
     *
     * <code>required string major_version = 1;</code>
     */
    boolean hasMajorVersion();
    /**
     * <pre>
     * The major and minor version of the crosstool release.
     * </pre>
     *
     * <code>required string major_version = 1;</code>
     */
    java.lang.String getMajorVersion();
    /**
     * <pre>
     * The major and minor version of the crosstool release.
     * </pre>
     *
     * <code>required string major_version = 1;</code>
     */
    com.google.protobuf.ByteString
        getMajorVersionBytes();

    /**
     * <code>required string minor_version = 2;</code>
     */
    boolean hasMinorVersion();
    /**
     * <code>required string minor_version = 2;</code>
     */
    java.lang.String getMinorVersion();
    /**
     * <code>required string minor_version = 2;</code>
     */
    com.google.protobuf.ByteString
        getMinorVersionBytes();

    /**
     * <pre>
     * Deprecated. Used to be the default CPU if not otherwise specified, but it's
     * not used for that purpose (or anything else) anymore. Please also don't add
     * new uses of this field.
     * </pre>
     *
     * <code>required string default_target_cpu = 3;</code>
     */
    boolean hasDefaultTargetCpu();
    /**
     * <pre>
     * Deprecated. Used to be the default CPU if not otherwise specified, but it's
     * not used for that purpose (or anything else) anymore. Please also don't add
     * new uses of this field.
     * </pre>
     *
     * <code>required string default_target_cpu = 3;</code>
     */
    java.lang.String getDefaultTargetCpu();
    /**
     * <pre>
     * Deprecated. Used to be the default CPU if not otherwise specified, but it's
     * not used for that purpose (or anything else) anymore. Please also don't add
     * new uses of this field.
     * </pre>
     *
     * <code>required string default_target_cpu = 3;</code>
     */
    com.google.protobuf.ByteString
        getDefaultTargetCpuBytes();

    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain> 
        getDefaultToolchainList();
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain getDefaultToolchain(int index);
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    int getDefaultToolchainCount();
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder> 
        getDefaultToolchainOrBuilderList();
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder getDefaultToolchainOrBuilder(
        int index);

    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain> 
        getToolchainList();
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain getToolchain(int index);
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    int getToolchainCount();
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder> 
        getToolchainOrBuilderList();
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder getToolchainOrBuilder(
        int index);
  }
  /**
   * <pre>
   * An entire crosstool release, containing the version number, a default target
   * cpu, a default toolchain for each supported cpu type, and a set of
   * toolchains.
   * </pre>
   *
   * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease}
   */
  public  static final class CrosstoolRelease extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease)
      CrosstoolReleaseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CrosstoolRelease.newBuilder() to construct.
    private CrosstoolRelease(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CrosstoolRelease() {
      majorVersion_ = "";
      minorVersion_ = "";
      defaultTargetCpu_ = "";
      defaultToolchain_ = java.util.Collections.emptyList();
      toolchain_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CrosstoolRelease(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      this();
      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;
            default: {
              if (!parseUnknownField(
                  input, unknownFields, extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000001;
              majorVersion_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              minorVersion_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              defaultTargetCpu_ = bs;
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                defaultToolchain_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain>();
                mutable_bitField0_ |= 0x00000008;
              }
              defaultToolchain_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                toolchain_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain>();
                mutable_bitField0_ |= 0x00000010;
              }
              toolchain_.add(
                  input.readMessage(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.PARSER, extensionRegistry));
              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_ & 0x00000008) == 0x00000008)) {
          defaultToolchain_ = java.util.Collections.unmodifiableList(defaultToolchain_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          toolchain_ = java.util.Collections.unmodifiableList(toolchain_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_descriptor;
    }

    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease.Builder.class);
    }

    private int bitField0_;
    public static final int MAJOR_VERSION_FIELD_NUMBER = 1;
    private volatile java.lang.Object majorVersion_;
    /**
     * <pre>
     * The major and minor version of the crosstool release.
     * </pre>
     *
     * <code>required string major_version = 1;</code>
     */
    public boolean hasMajorVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * The major and minor version of the crosstool release.
     * </pre>
     *
     * <code>required string major_version = 1;</code>
     */
    public java.lang.String getMajorVersion() {
      java.lang.Object ref = majorVersion_;
      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 (bs.isValidUtf8()) {
          majorVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * The major and minor version of the crosstool release.
     * </pre>
     *
     * <code>required string major_version = 1;</code>
     */
    public com.google.protobuf.ByteString
        getMajorVersionBytes() {
      java.lang.Object ref = majorVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        majorVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MINOR_VERSION_FIELD_NUMBER = 2;
    private volatile java.lang.Object minorVersion_;
    /**
     * <code>required string minor_version = 2;</code>
     */
    public boolean hasMinorVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>required string minor_version = 2;</code>
     */
    public java.lang.String getMinorVersion() {
      java.lang.Object ref = minorVersion_;
      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 (bs.isValidUtf8()) {
          minorVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>required string minor_version = 2;</code>
     */
    public com.google.protobuf.ByteString
        getMinorVersionBytes() {
      java.lang.Object ref = minorVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        minorVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEFAULT_TARGET_CPU_FIELD_NUMBER = 3;
    private volatile java.lang.Object defaultTargetCpu_;
    /**
     * <pre>
     * Deprecated. Used to be the default CPU if not otherwise specified, but it's
     * not used for that purpose (or anything else) anymore. Please also don't add
     * new uses of this field.
     * </pre>
     *
     * <code>required string default_target_cpu = 3;</code>
     */
    public boolean hasDefaultTargetCpu() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Deprecated. Used to be the default CPU if not otherwise specified, but it's
     * not used for that purpose (or anything else) anymore. Please also don't add
     * new uses of this field.
     * </pre>
     *
     * <code>required string default_target_cpu = 3;</code>
     */
    public java.lang.String getDefaultTargetCpu() {
      java.lang.Object ref = defaultTargetCpu_;
      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 (bs.isValidUtf8()) {
          defaultTargetCpu_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Deprecated. Used to be the default CPU if not otherwise specified, but it's
     * not used for that purpose (or anything else) anymore. Please also don't add
     * new uses of this field.
     * </pre>
     *
     * <code>required string default_target_cpu = 3;</code>
     */
    public com.google.protobuf.ByteString
        getDefaultTargetCpuBytes() {
      java.lang.Object ref = defaultTargetCpu_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        defaultTargetCpu_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int DEFAULT_TOOLCHAIN_FIELD_NUMBER = 4;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain> defaultToolchain_;
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain> getDefaultToolchainList() {
      return defaultToolchain_;
    }
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder> 
        getDefaultToolchainOrBuilderList() {
      return defaultToolchain_;
    }
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    public int getDefaultToolchainCount() {
      return defaultToolchain_.size();
    }
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain getDefaultToolchain(int index) {
      return defaultToolchain_.get(index);
    }
    /**
     * <pre>
     * The default toolchain to use for each given cpu.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder getDefaultToolchainOrBuilder(
        int index) {
      return defaultToolchain_.get(index);
    }

    public static final int TOOLCHAIN_FIELD_NUMBER = 5;
    private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain> toolchain_;
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain> getToolchainList() {
      return toolchain_;
    }
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder> 
        getToolchainOrBuilderList() {
      return toolchain_;
    }
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    public int getToolchainCount() {
      return toolchain_.size();
    }
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain getToolchain(int index) {
      return toolchain_.get(index);
    }
    /**
     * <pre>
     * All the toolchains in this release.
     * </pre>
     *
     * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
     */
    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder getToolchainOrBuilder(
        int index) {
      return toolchain_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      if (!hasMajorVersion()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasMinorVersion()) {
        memoizedIsInitialized = 0;
        return false;
      }
      if (!hasDefaultTargetCpu()) {
        memoizedIsInitialized = 0;
        return false;
      }
      for (int i = 0; i < getDefaultToolchainCount(); i++) {
        if (!getDefaultToolchain(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      for (int i = 0; i < getToolchainCount(); i++) {
        if (!getToolchain(i).isInitialized()) {
          memoizedIsInitialized = 0;
          return false;
        }
      }
      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, majorVersion_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, minorVersion_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, defaultTargetCpu_);
      }
      for (int i = 0; i < defaultToolchain_.size(); i++) {
        output.writeMessage(4, defaultToolchain_.get(i));
      }
      for (int i = 0; i < toolchain_.size(); i++) {
        output.writeMessage(5, toolchain_.get(i));
      }
      unknownFields.writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, majorVersion_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, minorVersion_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, defaultTargetCpu_);
      }
      for (int i = 0; i < defaultToolchain_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, defaultToolchain_.get(i));
      }
      for (int i = 0; i < toolchain_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, toolchain_.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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease)) {
        return super.equals(obj);
      }
      com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease other = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease) obj;

      boolean result = true;
      result = result && (hasMajorVersion() == other.hasMajorVersion());
      if (hasMajorVersion()) {
        result = result && getMajorVersion()
            .equals(other.getMajorVersion());
      }
      result = result && (hasMinorVersion() == other.hasMinorVersion());
      if (hasMinorVersion()) {
        result = result && getMinorVersion()
            .equals(other.getMinorVersion());
      }
      result = result && (hasDefaultTargetCpu() == other.hasDefaultTargetCpu());
      if (hasDefaultTargetCpu()) {
        result = result && getDefaultTargetCpu()
            .equals(other.getDefaultTargetCpu());
      }
      result = result && getDefaultToolchainList()
          .equals(other.getDefaultToolchainList());
      result = result && getToolchainList()
          .equals(other.getToolchainList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasMajorVersion()) {
        hash = (37 * hash) + MAJOR_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getMajorVersion().hashCode();
      }
      if (hasMinorVersion()) {
        hash = (37 * hash) + MINOR_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getMinorVersion().hashCode();
      }
      if (hasDefaultTargetCpu()) {
        hash = (37 * hash) + DEFAULT_TARGET_CPU_FIELD_NUMBER;
        hash = (53 * hash) + getDefaultTargetCpu().hashCode();
      }
      if (getDefaultToolchainCount() > 0) {
        hash = (37 * hash) + DEFAULT_TOOLCHAIN_FIELD_NUMBER;
        hash = (53 * hash) + getDefaultToolchainList().hashCode();
      }
      if (getToolchainCount() > 0) {
        hash = (37 * hash) + TOOLCHAIN_FIELD_NUMBER;
        hash = (53 * hash) + getToolchainList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease 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 com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * <pre>
     * An entire crosstool release, containing the version number, a default target
     * cpu, a default toolchain for each supported cpu type, and a set of
     * toolchains.
     * </pre>
     *
     * Protobuf type {@code com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease)
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolReleaseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_descriptor;
      }

      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease.class, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease.Builder.class);
      }

      // Construct using com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getDefaultToolchainFieldBuilder();
          getToolchainFieldBuilder();
        }
      }
      public Builder clear() {
        super.clear();
        majorVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        minorVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        defaultTargetCpu_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        if (defaultToolchainBuilder_ == null) {
          defaultToolchain_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          defaultToolchainBuilder_.clear();
        }
        if (toolchainBuilder_ == null) {
          toolchain_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          toolchainBuilder_.clear();
        }
        return this;
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_descriptor;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease getDefaultInstanceForType() {
        return com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease.getDefaultInstance();
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease build() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease buildPartial() {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease result = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.majorVersion_ = majorVersion_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.minorVersion_ = minorVersion_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.defaultTargetCpu_ = defaultTargetCpu_;
        if (defaultToolchainBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            defaultToolchain_ = java.util.Collections.unmodifiableList(defaultToolchain_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.defaultToolchain_ = defaultToolchain_;
        } else {
          result.defaultToolchain_ = defaultToolchainBuilder_.build();
        }
        if (toolchainBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            toolchain_ = java.util.Collections.unmodifiableList(toolchain_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.toolchain_ = toolchain_;
        } else {
          result.toolchain_ = toolchainBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder clone() {
        return (Builder) super.clone();
      }
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease) {
          return mergeFrom((com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease other) {
        if (other == com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease.getDefaultInstance()) return this;
        if (other.hasMajorVersion()) {
          bitField0_ |= 0x00000001;
          majorVersion_ = other.majorVersion_;
          onChanged();
        }
        if (other.hasMinorVersion()) {
          bitField0_ |= 0x00000002;
          minorVersion_ = other.minorVersion_;
          onChanged();
        }
        if (other.hasDefaultTargetCpu()) {
          bitField0_ |= 0x00000004;
          defaultTargetCpu_ = other.defaultTargetCpu_;
          onChanged();
        }
        if (defaultToolchainBuilder_ == null) {
          if (!other.defaultToolchain_.isEmpty()) {
            if (defaultToolchain_.isEmpty()) {
              defaultToolchain_ = other.defaultToolchain_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureDefaultToolchainIsMutable();
              defaultToolchain_.addAll(other.defaultToolchain_);
            }
            onChanged();
          }
        } else {
          if (!other.defaultToolchain_.isEmpty()) {
            if (defaultToolchainBuilder_.isEmpty()) {
              defaultToolchainBuilder_.dispose();
              defaultToolchainBuilder_ = null;
              defaultToolchain_ = other.defaultToolchain_;
              bitField0_ = (bitField0_ & ~0x00000008);
              defaultToolchainBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getDefaultToolchainFieldBuilder() : null;
            } else {
              defaultToolchainBuilder_.addAllMessages(other.defaultToolchain_);
            }
          }
        }
        if (toolchainBuilder_ == null) {
          if (!other.toolchain_.isEmpty()) {
            if (toolchain_.isEmpty()) {
              toolchain_ = other.toolchain_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureToolchainIsMutable();
              toolchain_.addAll(other.toolchain_);
            }
            onChanged();
          }
        } else {
          if (!other.toolchain_.isEmpty()) {
            if (toolchainBuilder_.isEmpty()) {
              toolchainBuilder_.dispose();
              toolchainBuilder_ = null;
              toolchain_ = other.toolchain_;
              bitField0_ = (bitField0_ & ~0x00000010);
              toolchainBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getToolchainFieldBuilder() : null;
            } else {
              toolchainBuilder_.addAllMessages(other.toolchain_);
            }
          }
        }
        this.mergeUnknownFields(other.unknownFields);
        onChanged();
        return this;
      }

      public final boolean isInitialized() {
        if (!hasMajorVersion()) {
          return false;
        }
        if (!hasMinorVersion()) {
          return false;
        }
        if (!hasDefaultTargetCpu()) {
          return false;
        }
        for (int i = 0; i < getDefaultToolchainCount(); i++) {
          if (!getDefaultToolchain(i).isInitialized()) {
            return false;
          }
        }
        for (int i = 0; i < getToolchainCount(); i++) {
          if (!getToolchain(i).isInitialized()) {
            return false;
          }
        }
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object majorVersion_ = "";
      /**
       * <pre>
       * The major and minor version of the crosstool release.
       * </pre>
       *
       * <code>required string major_version = 1;</code>
       */
      public boolean hasMajorVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The major and minor version of the crosstool release.
       * </pre>
       *
       * <code>required string major_version = 1;</code>
       */
      public java.lang.String getMajorVersion() {
        java.lang.Object ref = majorVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            majorVersion_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * The major and minor version of the crosstool release.
       * </pre>
       *
       * <code>required string major_version = 1;</code>
       */
      public com.google.protobuf.ByteString
          getMajorVersionBytes() {
        java.lang.Object ref = majorVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          majorVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * The major and minor version of the crosstool release.
       * </pre>
       *
       * <code>required string major_version = 1;</code>
       */
      public Builder setMajorVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        majorVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The major and minor version of the crosstool release.
       * </pre>
       *
       * <code>required string major_version = 1;</code>
       */
      public Builder clearMajorVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        majorVersion_ = getDefaultInstance().getMajorVersion();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The major and minor version of the crosstool release.
       * </pre>
       *
       * <code>required string major_version = 1;</code>
       */
      public Builder setMajorVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        majorVersion_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object minorVersion_ = "";
      /**
       * <code>required string minor_version = 2;</code>
       */
      public boolean hasMinorVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>required string minor_version = 2;</code>
       */
      public java.lang.String getMinorVersion() {
        java.lang.Object ref = minorVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            minorVersion_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>required string minor_version = 2;</code>
       */
      public com.google.protobuf.ByteString
          getMinorVersionBytes() {
        java.lang.Object ref = minorVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          minorVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>required string minor_version = 2;</code>
       */
      public Builder setMinorVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        minorVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>required string minor_version = 2;</code>
       */
      public Builder clearMinorVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        minorVersion_ = getDefaultInstance().getMinorVersion();
        onChanged();
        return this;
      }
      /**
       * <code>required string minor_version = 2;</code>
       */
      public Builder setMinorVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        minorVersion_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object defaultTargetCpu_ = "";
      /**
       * <pre>
       * Deprecated. Used to be the default CPU if not otherwise specified, but it's
       * not used for that purpose (or anything else) anymore. Please also don't add
       * new uses of this field.
       * </pre>
       *
       * <code>required string default_target_cpu = 3;</code>
       */
      public boolean hasDefaultTargetCpu() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Deprecated. Used to be the default CPU if not otherwise specified, but it's
       * not used for that purpose (or anything else) anymore. Please also don't add
       * new uses of this field.
       * </pre>
       *
       * <code>required string default_target_cpu = 3;</code>
       */
      public java.lang.String getDefaultTargetCpu() {
        java.lang.Object ref = defaultTargetCpu_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            defaultTargetCpu_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Deprecated. Used to be the default CPU if not otherwise specified, but it's
       * not used for that purpose (or anything else) anymore. Please also don't add
       * new uses of this field.
       * </pre>
       *
       * <code>required string default_target_cpu = 3;</code>
       */
      public com.google.protobuf.ByteString
          getDefaultTargetCpuBytes() {
        java.lang.Object ref = defaultTargetCpu_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          defaultTargetCpu_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Deprecated. Used to be the default CPU if not otherwise specified, but it's
       * not used for that purpose (or anything else) anymore. Please also don't add
       * new uses of this field.
       * </pre>
       *
       * <code>required string default_target_cpu = 3;</code>
       */
      public Builder setDefaultTargetCpu(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        defaultTargetCpu_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Deprecated. Used to be the default CPU if not otherwise specified, but it's
       * not used for that purpose (or anything else) anymore. Please also don't add
       * new uses of this field.
       * </pre>
       *
       * <code>required string default_target_cpu = 3;</code>
       */
      public Builder clearDefaultTargetCpu() {
        bitField0_ = (bitField0_ & ~0x00000004);
        defaultTargetCpu_ = getDefaultInstance().getDefaultTargetCpu();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Deprecated. Used to be the default CPU if not otherwise specified, but it's
       * not used for that purpose (or anything else) anymore. Please also don't add
       * new uses of this field.
       * </pre>
       *
       * <code>required string default_target_cpu = 3;</code>
       */
      public Builder setDefaultTargetCpuBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        defaultTargetCpu_ = value;
        onChanged();
        return this;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain> defaultToolchain_ =
        java.util.Collections.emptyList();
      private void ensureDefaultToolchainIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          defaultToolchain_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain>(defaultToolchain_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder> defaultToolchainBuilder_;

      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain> getDefaultToolchainList() {
        if (defaultToolchainBuilder_ == null) {
          return java.util.Collections.unmodifiableList(defaultToolchain_);
        } else {
          return defaultToolchainBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public int getDefaultToolchainCount() {
        if (defaultToolchainBuilder_ == null) {
          return defaultToolchain_.size();
        } else {
          return defaultToolchainBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain getDefaultToolchain(int index) {
        if (defaultToolchainBuilder_ == null) {
          return defaultToolchain_.get(index);
        } else {
          return defaultToolchainBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder setDefaultToolchain(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain value) {
        if (defaultToolchainBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDefaultToolchainIsMutable();
          defaultToolchain_.set(index, value);
          onChanged();
        } else {
          defaultToolchainBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder setDefaultToolchain(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder builderForValue) {
        if (defaultToolchainBuilder_ == null) {
          ensureDefaultToolchainIsMutable();
          defaultToolchain_.set(index, builderForValue.build());
          onChanged();
        } else {
          defaultToolchainBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder addDefaultToolchain(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain value) {
        if (defaultToolchainBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDefaultToolchainIsMutable();
          defaultToolchain_.add(value);
          onChanged();
        } else {
          defaultToolchainBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder addDefaultToolchain(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain value) {
        if (defaultToolchainBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDefaultToolchainIsMutable();
          defaultToolchain_.add(index, value);
          onChanged();
        } else {
          defaultToolchainBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder addDefaultToolchain(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder builderForValue) {
        if (defaultToolchainBuilder_ == null) {
          ensureDefaultToolchainIsMutable();
          defaultToolchain_.add(builderForValue.build());
          onChanged();
        } else {
          defaultToolchainBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder addDefaultToolchain(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder builderForValue) {
        if (defaultToolchainBuilder_ == null) {
          ensureDefaultToolchainIsMutable();
          defaultToolchain_.add(index, builderForValue.build());
          onChanged();
        } else {
          defaultToolchainBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder addAllDefaultToolchain(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain> values) {
        if (defaultToolchainBuilder_ == null) {
          ensureDefaultToolchainIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, defaultToolchain_);
          onChanged();
        } else {
          defaultToolchainBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder clearDefaultToolchain() {
        if (defaultToolchainBuilder_ == null) {
          defaultToolchain_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          defaultToolchainBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public Builder removeDefaultToolchain(int index) {
        if (defaultToolchainBuilder_ == null) {
          ensureDefaultToolchainIsMutable();
          defaultToolchain_.remove(index);
          onChanged();
        } else {
          defaultToolchainBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder getDefaultToolchainBuilder(
          int index) {
        return getDefaultToolchainFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder getDefaultToolchainOrBuilder(
          int index) {
        if (defaultToolchainBuilder_ == null) {
          return defaultToolchain_.get(index);  } else {
          return defaultToolchainBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder> 
           getDefaultToolchainOrBuilderList() {
        if (defaultToolchainBuilder_ != null) {
          return defaultToolchainBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(defaultToolchain_);
        }
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder addDefaultToolchainBuilder() {
        return getDefaultToolchainFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.getDefaultInstance());
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder addDefaultToolchainBuilder(
          int index) {
        return getDefaultToolchainFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.getDefaultInstance());
      }
      /**
       * <pre>
       * The default toolchain to use for each given cpu.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.DefaultCpuToolchain default_toolchain = 4;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder> 
           getDefaultToolchainBuilderList() {
        return getDefaultToolchainFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder> 
          getDefaultToolchainFieldBuilder() {
        if (defaultToolchainBuilder_ == null) {
          defaultToolchainBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchain.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.DefaultCpuToolchainOrBuilder>(
                  defaultToolchain_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          defaultToolchain_ = null;
        }
        return defaultToolchainBuilder_;
      }

      private java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain> toolchain_ =
        java.util.Collections.emptyList();
      private void ensureToolchainIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          toolchain_ = new java.util.ArrayList<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain>(toolchain_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder> toolchainBuilder_;

      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain> getToolchainList() {
        if (toolchainBuilder_ == null) {
          return java.util.Collections.unmodifiableList(toolchain_);
        } else {
          return toolchainBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public int getToolchainCount() {
        if (toolchainBuilder_ == null) {
          return toolchain_.size();
        } else {
          return toolchainBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain getToolchain(int index) {
        if (toolchainBuilder_ == null) {
          return toolchain_.get(index);
        } else {
          return toolchainBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder setToolchain(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain value) {
        if (toolchainBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureToolchainIsMutable();
          toolchain_.set(index, value);
          onChanged();
        } else {
          toolchainBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder setToolchain(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder builderForValue) {
        if (toolchainBuilder_ == null) {
          ensureToolchainIsMutable();
          toolchain_.set(index, builderForValue.build());
          onChanged();
        } else {
          toolchainBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder addToolchain(com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain value) {
        if (toolchainBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureToolchainIsMutable();
          toolchain_.add(value);
          onChanged();
        } else {
          toolchainBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder addToolchain(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain value) {
        if (toolchainBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureToolchainIsMutable();
          toolchain_.add(index, value);
          onChanged();
        } else {
          toolchainBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder addToolchain(
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder builderForValue) {
        if (toolchainBuilder_ == null) {
          ensureToolchainIsMutable();
          toolchain_.add(builderForValue.build());
          onChanged();
        } else {
          toolchainBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder addToolchain(
          int index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder builderForValue) {
        if (toolchainBuilder_ == null) {
          ensureToolchainIsMutable();
          toolchain_.add(index, builderForValue.build());
          onChanged();
        } else {
          toolchainBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder addAllToolchain(
          java.lang.Iterable<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain> values) {
        if (toolchainBuilder_ == null) {
          ensureToolchainIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, toolchain_);
          onChanged();
        } else {
          toolchainBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder clearToolchain() {
        if (toolchainBuilder_ == null) {
          toolchain_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          toolchainBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public Builder removeToolchain(int index) {
        if (toolchainBuilder_ == null) {
          ensureToolchainIsMutable();
          toolchain_.remove(index);
          onChanged();
        } else {
          toolchainBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder getToolchainBuilder(
          int index) {
        return getToolchainFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder getToolchainOrBuilder(
          int index) {
        if (toolchainBuilder_ == null) {
          return toolchain_.get(index);  } else {
          return toolchainBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public java.util.List<? extends com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder> 
           getToolchainOrBuilderList() {
        if (toolchainBuilder_ != null) {
          return toolchainBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(toolchain_);
        }
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder addToolchainBuilder() {
        return getToolchainFieldBuilder().addBuilder(
            com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.getDefaultInstance());
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder addToolchainBuilder(
          int index) {
        return getToolchainFieldBuilder().addBuilder(
            index, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.getDefaultInstance());
      }
      /**
       * <pre>
       * All the toolchains in this release.
       * </pre>
       *
       * <code>repeated .com.google.devtools.build.lib.view.config.crosstool.CToolchain toolchain = 5;</code>
       */
      public java.util.List<com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder> 
           getToolchainBuilderList() {
        return getToolchainFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder> 
          getToolchainFieldBuilder() {
        if (toolchainBuilder_ == null) {
          toolchainBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain.Builder, com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchainOrBuilder>(
                  toolchain_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          toolchain_ = null;
        }
        return toolchainBuilder_;
      }
      public final Builder setUnknownFields(
          final com.google.protobuf.UnknownFieldSet unknownFields) {
        return super.setUnknownFields(unknownFields);
      }

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


      // @@protoc_insertion_point(builder_scope:com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease)
    }

    // @@protoc_insertion_point(class_scope:com.google.devtools.build.lib.view.config.crosstool.CrosstoolRelease)
    private static final com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease();
    }

    public static com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

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

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

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

    public com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CrosstoolRelease getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n(src/main/protobuf/crosstool_config.pro" +
      "to\0223com.google.devtools.build.lib.view.c" +
      "onfig.crosstool\"\372\037\n\nCToolchain\022X\n\007featur" +
      "e\0302 \003(\0132G.com.google.devtools.build.lib." +
      "view.config.crosstool.CToolchain.Feature" +
      "\022c\n\raction_config\0305 \003(\0132L.com.google.dev" +
      "tools.build.lib.view.config.crosstool.CT" +
      "oolchain.ActionConfig\022r\n\025artifact_name_p" +
      "attern\0306 \003(\0132S.com.google.devtools.build" +
      ".lib.view.config.crosstool.CToolchain.Ar",
      "tifactNamePattern\022\034\n\024toolchain_identifie" +
      "r\030\001 \002(\t\022\030\n\020host_system_name\030\002 \002(\t\022\032\n\022tar" +
      "get_system_name\030\003 \002(\t\022\022\n\ntarget_cpu\030\004 \002(" +
      "\t\022\023\n\013target_libc\030\005 \002(\t\022\020\n\010compiler\030\006 \002(\t" +
      "\022\023\n\013abi_version\030\007 \002(\t\022\030\n\020abi_libc_versio" +
      "n\030\010 \002(\t\022P\n\ttool_path\030\t \003(\0132=.com.google." +
      "devtools.build.lib.view.config.crosstool" +
      ".ToolPath\022#\n\024supports_gold_linker\030\n \001(\010:" +
      "\005false\022%\n\026supports_thin_archives\030\013 \001(\010:\005" +
      "false\022%\n\026supports_start_end_lib\030\034 \001(\010:\005f",
      "alse\0220\n!supports_interface_shared_object" +
      "s\030  \001(\010:\005false\022)\n\032supports_embedded_runt" +
      "imes\030( \001(\010:\005false\022!\n\031static_runtimes_fil" +
      "egroup\030- \001(\t\022\"\n\032dynamic_runtimes_filegro" +
      "up\030. \001(\t\022*\n\033supports_incremental_linker\030" +
      ") \001(\010:\005false\022&\n\027supports_normalizing_ar\030" +
      "\032 \001(\010:\005false\022\037\n\020supports_fission\030+ \001(\010:\005" +
      "false\022\034\n\rsupports_dsym\0303 \001(\010:\005false\022\027\n\010n" +
      "eedsPic\030\014 \001(\010:\005false\022\025\n\rcompiler_flag\030\r " +
      "\003(\t\022\020\n\010cxx_flag\030\016 \003(\t\022\033\n\023unfiltered_cxx_",
      "flag\030\031 \003(\t\022\023\n\013linker_flag\030\017 \003(\t\022#\n\033dynam" +
      "ic_library_linker_flag\030\033 \003(\t\022\035\n\025test_onl" +
      "y_linker_flag\0301 \003(\t\022\032\n\022objcopy_embed_fla" +
      "g\030\020 \003(\t\022\025\n\rld_embed_flag\030\027 \003(\t\022\017\n\007ar_fla" +
      "g\030/ \003(\t\022\035\n\025ar_thin_archives_flag\0300 \003(\t\022 " +
      "\n\030gcc_plugin_compiler_flag\030\" \003(\t\022i\n\026comp" +
      "ilation_mode_flags\030\021 \003(\0132I.com.google.de" +
      "vtools.build.lib.view.config.crosstool.C" +
      "ompilationModeFlags\022[\n\017lipo_mode_flags\030," +
      " \003(\0132B.com.google.devtools.build.lib.vie",
      "w.config.crosstool.LipoModeFlags\022a\n\022link" +
      "ing_mode_flags\030\022 \003(\0132E.com.google.devtoo" +
      "ls.build.lib.view.config.crosstool.Linki" +
      "ngModeFlags\022#\n\033gcc_plugin_header_directo" +
      "ry\030\023 \003(\t\022#\n\033mao_plugin_header_directory\030" +
      "\024 \003(\t\022X\n\rmake_variable\030\025 \003(\0132A.com.googl" +
      "e.devtools.build.lib.view.config.crossto" +
      "ol.MakeVariable\022%\n\035cxx_builtin_include_d" +
      "irectory\030\026 \003(\t\022\027\n\017builtin_sysroot\030\030 \001(\t\022" +
      "\032\n\022default_python_top\030\035 \001(\t\022\036\n\026default_p",
      "ython_version\030\036 \001(\t\022\037\n\027python_preload_sw" +
      "igdeps\030* \001(\010\022\030\n\020default_grte_top\030\037 \001(\t\022\035" +
      "\n\025debian_extra_requires\030! \003(\t\022\024\n\014cc_targ" +
      "et_os\0307 \001(\t\032\356\002\n\tFlagGroup\022\014\n\004flag\030\001 \003(\t\022" +
      "]\n\nflag_group\030\002 \003(\0132I.com.google.devtool" +
      "s.build.lib.view.config.crosstool.CToolc" +
      "hain.FlagGroup\022\024\n\014iterate_over\030\003 \001(\t\022\037\n\027" +
      "expand_if_all_available\030\004 \003(\t\022 \n\030expand_" +
      "if_none_available\030\005 \003(\t\022\026\n\016expand_if_tru" +
      "e\030\006 \001(\t\022\027\n\017expand_if_false\030\007 \001(\t\022j\n\017expa",
      "nd_if_equal\030\010 \001(\0132Q.com.google.devtools." +
      "build.lib.view.config.crosstool.CToolcha" +
      "in.VariableWithValue\0324\n\021VariableWithValu" +
      "e\022\020\n\010variable\030\001 \002(\t\022\r\n\005value\030\002 \002(\t\032&\n\010En" +
      "vEntry\022\013\n\003key\030\001 \002(\t\022\r\n\005value\030\002 \002(\t\032\035\n\nFe" +
      "atureSet\022\017\n\007feature\030\001 \003(\t\0326\n\016WithFeature" +
      "Set\022\017\n\007feature\030\001 \003(\t\022\023\n\013not_feature\030\002 \003(" +
      "\t\032\377\001\n\007FlagSet\022\016\n\006action\030\001 \003(\t\022]\n\nflag_gr" +
      "oup\030\002 \003(\0132I.com.google.devtools.build.li" +
      "b.view.config.crosstool.CToolchain.FlagG",
      "roup\022d\n\014with_feature\030\003 \003(\0132N.com.google." +
      "devtools.build.lib.view.config.crosstool" +
      ".CToolchain.WithFeatureSet\022\037\n\027expand_if_" +
      "all_available\030\004 \003(\t\032\333\001\n\006EnvSet\022\016\n\006action" +
      "\030\001 \003(\t\022[\n\tenv_entry\030\002 \003(\0132H.com.google.d" +
      "evtools.build.lib.view.config.crosstool." +
      "CToolchain.EnvEntry\022d\n\014with_feature\030\003 \003(" +
      "\0132N.com.google.devtools.build.lib.view.c" +
      "onfig.crosstool.CToolchain.WithFeatureSe" +
      "t\032\335\002\n\007Feature\022\014\n\004name\030\001 \001(\t\022\017\n\007enabled\030\007",
      " \001(\010\022Y\n\010flag_set\030\002 \003(\0132G.com.google.devt" +
      "ools.build.lib.view.config.crosstool.CTo" +
      "olchain.FlagSet\022W\n\007env_set\030\006 \003(\0132F.com.g" +
      "oogle.devtools.build.lib.view.config.cro" +
      "sstool.CToolchain.EnvSet\022\\\n\010requires\030\003 \003" +
      "(\0132J.com.google.devtools.build.lib.view." +
      "config.crosstool.CToolchain.FeatureSet\022\017" +
      "\n\007implies\030\004 \003(\t\022\020\n\010provides\030\005 \003(\t\032\236\001\n\004To" +
      "ol\022\021\n\ttool_path\030\001 \002(\t\022d\n\014with_feature\030\002 " +
      "\003(\0132N.com.google.devtools.build.lib.view",
      ".config.crosstool.CToolchain.WithFeature" +
      "Set\022\035\n\025execution_requirement\030\003 \003(\t\032=\n\023Ar" +
      "tifactNamePattern\022\025\n\rcategory_name\030\001 \002(\t" +
      "\022\017\n\007pattern\030\002 \002(\t\032\300\003\n\014ActionConfig\022\023\n\013co" +
      "nfig_name\030\001 \002(\t\022\023\n\013action_name\030\002 \002(\t\022\017\n\007" +
      "enabled\030\010 \001(\010\022R\n\004tool\030\003 \003(\0132D.com.google" +
      ".devtools.build.lib.view.config.crosstoo" +
      "l.CToolchain.Tool\022Y\n\010flag_set\030\004 \003(\0132G.co" +
      "m.google.devtools.build.lib.view.config." +
      "crosstool.CToolchain.FlagSet\022W\n\007env_set\030",
      "\005 \003(\0132F.com.google.devtools.build.lib.vi" +
      "ew.config.crosstool.CToolchain.EnvSet\022\\\n" +
      "\010requires\030\006 \003(\0132J.com.google.devtools.bu" +
      "ild.lib.view.config.crosstool.CToolchain" +
      ".FeatureSet\022\017\n\007implies\030\007 \003(\t\"&\n\010ToolPath" +
      "\022\014\n\004name\030\001 \002(\t\022\014\n\004path\030\002 \002(\t\"\250\001\n\024Compila" +
      "tionModeFlags\022R\n\004mode\030\001 \002(\0162D.com.google" +
      ".devtools.build.lib.view.config.crosstoo" +
      "l.CompilationMode\022\025\n\rcompiler_flag\030\002 \003(\t" +
      "\022\020\n\010cxx_flag\030\003 \003(\t\022\023\n\013linker_flag\030\004 \003(\t\"",
      "w\n\020LinkingModeFlags\022N\n\004mode\030\001 \002(\0162@.com." +
      "google.devtools.build.lib.view.config.cr" +
      "osstool.LinkingMode\022\023\n\013linker_flag\030\002 \003(\t" +
      "\"\232\001\n\rLipoModeFlags\022K\n\004mode\030\001 \002(\0162=.com.g" +
      "oogle.devtools.build.lib.view.config.cro" +
      "sstool.LipoMode\022\025\n\rcompiler_flag\030\002 \003(\t\022\020" +
      "\n\010cxx_flag\030\003 \003(\t\022\023\n\013linker_flag\030\004 \003(\t\"+\n" +
      "\014MakeVariable\022\014\n\004name\030\001 \002(\t\022\r\n\005value\030\002 \002" +
      "(\t\"]\n\023DefaultCpuToolchain\022\013\n\003cpu\030\001 \002(\t\022\034" +
      "\n\024toolchain_identifier\030\002 \002(\t\022\033\n\rsupports",
      "_lipo\030\003 \001(\010:\004true\"\225\002\n\020CrosstoolRelease\022\025" +
      "\n\rmajor_version\030\001 \002(\t\022\025\n\rminor_version\030\002" +
      " \002(\t\022\032\n\022default_target_cpu\030\003 \002(\t\022c\n\021defa" +
      "ult_toolchain\030\004 \003(\0132H.com.google.devtool" +
      "s.build.lib.view.config.crosstool.Defaul" +
      "tCpuToolchain\022R\n\ttoolchain\030\005 \003(\0132?.com.g" +
      "oogle.devtools.build.lib.view.config.cro" +
      "sstool.CToolchain*@\n\017CompilationMode\022\r\n\t" +
      "FASTBUILD\020\001\022\007\n\003DBG\020\002\022\007\n\003OPT\020\003\022\014\n\010COVERAG" +
      "E\020\004*\\\n\013LinkingMode\022\020\n\014FULLY_STATIC\020\001\022\021\n\r",
      "MOSTLY_STATIC\020\002\022\013\n\007DYNAMIC\020\003\022\033\n\027MOSTLY_S" +
      "TATIC_LIBRARIES\020\004*\037\n\010LipoMode\022\007\n\003OFF\020\001\022\n" +
      "\n\006BINARY\020\002B5\n3com.google.devtools.build." +
      "lib.view.config.crosstool"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor,
        new java.lang.String[] { "Feature", "ActionConfig", "ArtifactNamePattern", "ToolchainIdentifier", "HostSystemName", "TargetSystemName", "TargetCpu", "TargetLibc", "Compiler", "AbiVersion", "AbiLibcVersion", "ToolPath", "SupportsGoldLinker", "SupportsThinArchives", "SupportsStartEndLib", "SupportsInterfaceSharedObjects", "SupportsEmbeddedRuntimes", "StaticRuntimesFilegroup", "DynamicRuntimesFilegroup", "SupportsIncrementalLinker", "SupportsNormalizingAr", "SupportsFission", "SupportsDsym", "NeedsPic", "CompilerFlag", "CxxFlag", "UnfilteredCxxFlag", "LinkerFlag", "DynamicLibraryLinkerFlag", "TestOnlyLinkerFlag", "ObjcopyEmbedFlag", "LdEmbedFlag", "ArFlag", "ArThinArchivesFlag", "GccPluginCompilerFlag", "CompilationModeFlags", "LipoModeFlags", "LinkingModeFlags", "GccPluginHeaderDirectory", "MaoPluginHeaderDirectory", "MakeVariable", "CxxBuiltinIncludeDirectory", "BuiltinSysroot", "DefaultPythonTop", "DefaultPythonVersion", "PythonPreloadSwigdeps", "DefaultGrteTop", "DebianExtraRequires", "CcTargetOs", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(0);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagGroup_descriptor,
        new java.lang.String[] { "Flag", "FlagGroup", "IterateOver", "ExpandIfAllAvailable", "ExpandIfNoneAvailable", "ExpandIfTrue", "ExpandIfFalse", "ExpandIfEqual", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(1);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_VariableWithValue_descriptor,
        new java.lang.String[] { "Variable", "Value", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(2);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvEntry_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(3);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FeatureSet_descriptor,
        new java.lang.String[] { "Feature", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(4);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_WithFeatureSet_descriptor,
        new java.lang.String[] { "Feature", "NotFeature", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(5);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_FlagSet_descriptor,
        new java.lang.String[] { "Action", "FlagGroup", "WithFeature", "ExpandIfAllAvailable", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(6);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_EnvSet_descriptor,
        new java.lang.String[] { "Action", "EnvEntry", "WithFeature", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(7);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Feature_descriptor,
        new java.lang.String[] { "Name", "Enabled", "FlagSet", "EnvSet", "Requires", "Implies", "Provides", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(8);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_Tool_descriptor,
        new java.lang.String[] { "ToolPath", "WithFeature", "ExecutionRequirement", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(9);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ArtifactNamePattern_descriptor,
        new java.lang.String[] { "CategoryName", "Pattern", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_descriptor =
      internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_descriptor.getNestedTypes().get(10);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CToolchain_ActionConfig_descriptor,
        new java.lang.String[] { "ConfigName", "ActionName", "Enabled", "Tool", "FlagSet", "EnvSet", "Requires", "Implies", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_ToolPath_descriptor,
        new java.lang.String[] { "Name", "Path", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CompilationModeFlags_descriptor,
        new java.lang.String[] { "Mode", "CompilerFlag", "CxxFlag", "LinkerFlag", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_LinkingModeFlags_descriptor,
        new java.lang.String[] { "Mode", "LinkerFlag", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_LipoModeFlags_descriptor,
        new java.lang.String[] { "Mode", "CompilerFlag", "CxxFlag", "LinkerFlag", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_MakeVariable_descriptor,
        new java.lang.String[] { "Name", "Value", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_DefaultCpuToolchain_descriptor,
        new java.lang.String[] { "Cpu", "ToolchainIdentifier", "SupportsLipo", });
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_com_google_devtools_build_lib_view_config_crosstool_CrosstoolRelease_descriptor,
        new java.lang.String[] { "MajorVersion", "MinorVersion", "DefaultTargetCpu", "DefaultToolchain", "Toolchain", });
  }

  // @@protoc_insertion_point(outer_class_scope)
}
