// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: chromiumos/builder_config.proto

package chromiumos

import (
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// Used to control running of special steps.
type BuilderConfig_RunSpec int32

const (
	BuilderConfig_RUN_SPEC_UNSPECIFIED BuilderConfig_RunSpec = 0
	// Do not run.
	BuilderConfig_NO_RUN BuilderConfig_RunSpec = 1
	// Run.
	BuilderConfig_RUN BuilderConfig_RunSpec = 2
	// Run and then exit.
	BuilderConfig_RUN_EXIT BuilderConfig_RunSpec = 3
)

// Enum value maps for BuilderConfig_RunSpec.
var (
	BuilderConfig_RunSpec_name = map[int32]string{
		0: "RUN_SPEC_UNSPECIFIED",
		1: "NO_RUN",
		2: "RUN",
		3: "RUN_EXIT",
	}
	BuilderConfig_RunSpec_value = map[string]int32{
		"RUN_SPEC_UNSPECIFIED": 0,
		"NO_RUN":               1,
		"RUN":                  2,
		"RUN_EXIT":             3,
	}
)

func (x BuilderConfig_RunSpec) Enum() *BuilderConfig_RunSpec {
	p := new(BuilderConfig_RunSpec)
	*p = x
	return p
}

func (x BuilderConfig_RunSpec) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_RunSpec) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[0].Descriptor()
}

func (BuilderConfig_RunSpec) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[0]
}

func (x BuilderConfig_RunSpec) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_RunSpec.Descriptor instead.
func (BuilderConfig_RunSpec) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 0}
}

// A rule describing which subset of dependencies should be used.
// When used in combination with a list of packages, the intersection of the
// two sets will be used.
type BuilderConfig_Dependencies int32

const (
	BuilderConfig_DEPENDENCIES_UNSPECIFIED BuilderConfig_Dependencies = 0
	// Use all dependencies.
	BuilderConfig_ALL_DEPENDENCIES BuilderConfig_Dependencies = 1
	// Only use dependencies affected by the changes applied to the build.
	BuilderConfig_CL_AFFECTED_DEPENDENCIES BuilderConfig_Dependencies = 2
)

// Enum value maps for BuilderConfig_Dependencies.
var (
	BuilderConfig_Dependencies_name = map[int32]string{
		0: "DEPENDENCIES_UNSPECIFIED",
		1: "ALL_DEPENDENCIES",
		2: "CL_AFFECTED_DEPENDENCIES",
	}
	BuilderConfig_Dependencies_value = map[string]int32{
		"DEPENDENCIES_UNSPECIFIED": 0,
		"ALL_DEPENDENCIES":         1,
		"CL_AFFECTED_DEPENDENCIES": 2,
	}
)

func (x BuilderConfig_Dependencies) Enum() *BuilderConfig_Dependencies {
	p := new(BuilderConfig_Dependencies)
	*p = x
	return p
}

func (x BuilderConfig_Dependencies) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_Dependencies) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[1].Descriptor()
}

func (BuilderConfig_Dependencies) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[1]
}

func (x BuilderConfig_Dependencies) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_Dependencies.Descriptor instead.
func (BuilderConfig_Dependencies) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 1}
}

// Type of build.
type BuilderConfig_Id_Type int32

const (
	BuilderConfig_Id_TYPE_UNSPECIFIED BuilderConfig_Id_Type = 0
	// Commit queue build.
	BuilderConfig_Id_CQ BuilderConfig_Id_Type = 1
	// Postsubmit build.
	BuilderConfig_Id_POSTSUBMIT BuilderConfig_Id_Type = 2
	// Toolchain build.
	BuilderConfig_Id_TOOLCHAIN BuilderConfig_Id_Type = 3
	// Informational build.
	BuilderConfig_Id_INFORMATIONAL BuilderConfig_Id_Type = 4
	// Release build.
	BuilderConfig_Id_RELEASE BuilderConfig_Id_Type = 5
)

// Enum value maps for BuilderConfig_Id_Type.
var (
	BuilderConfig_Id_Type_name = map[int32]string{
		0: "TYPE_UNSPECIFIED",
		1: "CQ",
		2: "POSTSUBMIT",
		3: "TOOLCHAIN",
		4: "INFORMATIONAL",
		5: "RELEASE",
	}
	BuilderConfig_Id_Type_value = map[string]int32{
		"TYPE_UNSPECIFIED": 0,
		"CQ":               1,
		"POSTSUBMIT":       2,
		"TOOLCHAIN":        3,
		"INFORMATIONAL":    4,
		"RELEASE":          5,
	}
)

func (x BuilderConfig_Id_Type) Enum() *BuilderConfig_Id_Type {
	p := new(BuilderConfig_Id_Type)
	*p = x
	return p
}

func (x BuilderConfig_Id_Type) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_Id_Type) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[2].Descriptor()
}

func (BuilderConfig_Id_Type) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[2]
}

func (x BuilderConfig_Id_Type) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_Id_Type.Descriptor instead.
func (BuilderConfig_Id_Type) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 0, 0}
}

type BuilderConfig_General_Environment int32

const (
	BuilderConfig_General_ENVIRONMENT_UNSPECIFIED BuilderConfig_General_Environment = 0
	BuilderConfig_General_PRODUCTION              BuilderConfig_General_Environment = 1
	BuilderConfig_General_STAGING                 BuilderConfig_General_Environment = 2
)

// Enum value maps for BuilderConfig_General_Environment.
var (
	BuilderConfig_General_Environment_name = map[int32]string{
		0: "ENVIRONMENT_UNSPECIFIED",
		1: "PRODUCTION",
		2: "STAGING",
	}
	BuilderConfig_General_Environment_value = map[string]int32{
		"ENVIRONMENT_UNSPECIFIED": 0,
		"PRODUCTION":              1,
		"STAGING":                 2,
	}
)

func (x BuilderConfig_General_Environment) Enum() *BuilderConfig_General_Environment {
	p := new(BuilderConfig_General_Environment)
	*p = x
	return p
}

func (x BuilderConfig_General_Environment) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_General_Environment) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[3].Descriptor()
}

func (BuilderConfig_General_Environment) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[3]
}

func (x BuilderConfig_General_Environment) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_General_Environment.Descriptor instead.
func (BuilderConfig_General_Environment) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 1, 0}
}

// Indicates which manifest a builder should sync to.
type BuilderConfig_General_Manifest int32

const (
	BuilderConfig_General_MANIFEST_UNSPECIFIED BuilderConfig_General_Manifest = 0
	BuilderConfig_General_PUBLIC               BuilderConfig_General_Manifest = 1
	BuilderConfig_General_PRIVATE              BuilderConfig_General_Manifest = 2
)

// Enum value maps for BuilderConfig_General_Manifest.
var (
	BuilderConfig_General_Manifest_name = map[int32]string{
		0: "MANIFEST_UNSPECIFIED",
		1: "PUBLIC",
		2: "PRIVATE",
	}
	BuilderConfig_General_Manifest_value = map[string]int32{
		"MANIFEST_UNSPECIFIED": 0,
		"PUBLIC":               1,
		"PRIVATE":              2,
	}
)

func (x BuilderConfig_General_Manifest) Enum() *BuilderConfig_General_Manifest {
	p := new(BuilderConfig_General_Manifest)
	*p = x
	return p
}

func (x BuilderConfig_General_Manifest) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_General_Manifest) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[4].Descriptor()
}

func (BuilderConfig_General_Manifest) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[4]
}

func (x BuilderConfig_General_Manifest) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_General_Manifest.Descriptor instead.
func (BuilderConfig_General_Manifest) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 1, 1}
}

type BuilderConfig_General_RunWhen_Mode int32

const (
	BuilderConfig_General_RunWhen_MODE_UNSPECIFIED BuilderConfig_General_RunWhen_Mode = 0
	// Always run this builder. The file_patterns field will be ignored
	// when this mode is selected.
	BuilderConfig_General_RunWhen_ALWAYS_RUN BuilderConfig_General_RunWhen_Mode = 1
	// Only run this builder if any file in the input gerrit_changes
	// matches any file_pattern specified below. If file_patterns is empty,
	// this option implies the builder will never run.
	BuilderConfig_General_RunWhen_ONLY_RUN_ON_FILE_MATCH BuilderConfig_General_RunWhen_Mode = 2
	// Do not run the builder if all files in the input gerrit_changes
	// match any file_pattern speicifed below. If file_patterns is empty,
	// this option implies the builder will always run.
	BuilderConfig_General_RunWhen_NO_RUN_ON_FILE_MATCH BuilderConfig_General_RunWhen_Mode = 3
)

// Enum value maps for BuilderConfig_General_RunWhen_Mode.
var (
	BuilderConfig_General_RunWhen_Mode_name = map[int32]string{
		0: "MODE_UNSPECIFIED",
		1: "ALWAYS_RUN",
		2: "ONLY_RUN_ON_FILE_MATCH",
		3: "NO_RUN_ON_FILE_MATCH",
	}
	BuilderConfig_General_RunWhen_Mode_value = map[string]int32{
		"MODE_UNSPECIFIED":       0,
		"ALWAYS_RUN":             1,
		"ONLY_RUN_ON_FILE_MATCH": 2,
		"NO_RUN_ON_FILE_MATCH":   3,
	}
)

func (x BuilderConfig_General_RunWhen_Mode) Enum() *BuilderConfig_General_RunWhen_Mode {
	p := new(BuilderConfig_General_RunWhen_Mode)
	*p = x
	return p
}

func (x BuilderConfig_General_RunWhen_Mode) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_General_RunWhen_Mode) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[5].Descriptor()
}

func (BuilderConfig_General_RunWhen_Mode) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[5]
}

func (x BuilderConfig_General_RunWhen_Mode) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_General_RunWhen_Mode.Descriptor instead.
func (BuilderConfig_General_RunWhen_Mode) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 1, 0, 0}
}

type BuilderConfig_Orchestrator_ChildSpec_CollectHandling int32

const (
	BuilderConfig_Orchestrator_ChildSpec_COLLECT_HANDLING_UNSPECIFIED BuilderConfig_Orchestrator_ChildSpec_CollectHandling = 0
	// Indicates the result should be collected PRIOR to updating the
	// 'build' manifest ref, and planning / running HW tests.
	// This also indicates that should the orchestrator terminate before
	// this child finishes the child will be terminated.
	BuilderConfig_Orchestrator_ChildSpec_COLLECT BuilderConfig_Orchestrator_ChildSpec_CollectHandling = 1
	// Indicates the result should not be collected. Currently also
	// indicates that should the orchestrator terminate before this child
	// finishes this child is allowed to continue.
	BuilderConfig_Orchestrator_ChildSpec_NO_COLLECT BuilderConfig_Orchestrator_ChildSpec_CollectHandling = 2
	// Indicates the result should be collected AFTER HW tests are complete.
	// The result is not relevant to the 'build' manifest ref being
	// published.
	// Otherwise no different than COLLECT above.
	BuilderConfig_Orchestrator_ChildSpec_COLLECT_AFTER_HW_TEST BuilderConfig_Orchestrator_ChildSpec_CollectHandling = 3
)

// Enum value maps for BuilderConfig_Orchestrator_ChildSpec_CollectHandling.
var (
	BuilderConfig_Orchestrator_ChildSpec_CollectHandling_name = map[int32]string{
		0: "COLLECT_HANDLING_UNSPECIFIED",
		1: "COLLECT",
		2: "NO_COLLECT",
		3: "COLLECT_AFTER_HW_TEST",
	}
	BuilderConfig_Orchestrator_ChildSpec_CollectHandling_value = map[string]int32{
		"COLLECT_HANDLING_UNSPECIFIED": 0,
		"COLLECT":                      1,
		"NO_COLLECT":                   2,
		"COLLECT_AFTER_HW_TEST":        3,
	}
)

func (x BuilderConfig_Orchestrator_ChildSpec_CollectHandling) Enum() *BuilderConfig_Orchestrator_ChildSpec_CollectHandling {
	p := new(BuilderConfig_Orchestrator_ChildSpec_CollectHandling)
	*p = x
	return p
}

func (x BuilderConfig_Orchestrator_ChildSpec_CollectHandling) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_Orchestrator_ChildSpec_CollectHandling) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[6].Descriptor()
}

func (BuilderConfig_Orchestrator_ChildSpec_CollectHandling) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[6]
}

func (x BuilderConfig_Orchestrator_ChildSpec_CollectHandling) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_Orchestrator_ChildSpec_CollectHandling.Descriptor instead.
func (BuilderConfig_Orchestrator_ChildSpec_CollectHandling) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 2, 0, 0}
}

// How to handle the uploading of prebuilts.
type BuilderConfig_Artifacts_Prebuilts int32

const (
	BuilderConfig_Artifacts_PREBUILTS_UNSPECIFIED BuilderConfig_Artifacts_Prebuilts = 0
	BuilderConfig_Artifacts_PUBLIC                BuilderConfig_Artifacts_Prebuilts = 1
	BuilderConfig_Artifacts_PRIVATE               BuilderConfig_Artifacts_Prebuilts = 2
	BuilderConfig_Artifacts_NONE                  BuilderConfig_Artifacts_Prebuilts = 3
)

// Enum value maps for BuilderConfig_Artifacts_Prebuilts.
var (
	BuilderConfig_Artifacts_Prebuilts_name = map[int32]string{
		0: "PREBUILTS_UNSPECIFIED",
		1: "PUBLIC",
		2: "PRIVATE",
		3: "NONE",
	}
	BuilderConfig_Artifacts_Prebuilts_value = map[string]int32{
		"PREBUILTS_UNSPECIFIED": 0,
		"PUBLIC":                1,
		"PRIVATE":               2,
		"NONE":                  3,
	}
)

func (x BuilderConfig_Artifacts_Prebuilts) Enum() *BuilderConfig_Artifacts_Prebuilts {
	p := new(BuilderConfig_Artifacts_Prebuilts)
	*p = x
	return p
}

func (x BuilderConfig_Artifacts_Prebuilts) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_Artifacts_Prebuilts) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[7].Descriptor()
}

func (BuilderConfig_Artifacts_Prebuilts) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[7]
}

func (x BuilderConfig_Artifacts_Prebuilts) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_Artifacts_Prebuilts.Descriptor instead.
func (BuilderConfig_Artifacts_Prebuilts) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 3, 0}
}

// Used to indicate artifact types that should be uploaded by the builder.
// Must be kept in sync with the dictionary in:
// https://chromium.googlesource.com/chromiumos/infra/recipes/+/refs/heads/master/recipe_modules/cros_artifacts/api.py
// TODO(crbug/1034529): Being replaced by common.ArtifactsByService, to
// eliminate the need to update cros_artifacts every time an artifact type
// is added.
type BuilderConfig_Artifacts_ArtifactTypes int32

const (
	BuilderConfig_Artifacts_ARTIFACT_TYPES_UNSPECIFIED BuilderConfig_Artifacts_ArtifactTypes = 0
	// Indicates wanting a zip file of everything in the image directory.
	BuilderConfig_Artifacts_IMAGE_ZIP BuilderConfig_Artifacts_ArtifactTypes = 1
	// Indicates wanting update payloads.
	BuilderConfig_Artifacts_TEST_UPDATE_PAYLOAD BuilderConfig_Artifacts_ArtifactTypes = 2
	// Indicates wanting the autotest tarballs.
	BuilderConfig_Artifacts_AUTOTEST_FILES BuilderConfig_Artifacts_ArtifactTypes = 3
	// Indicates wanting a tarball containing private TAST test bundles.
	BuilderConfig_Artifacts_TAST_FILES BuilderConfig_Artifacts_ArtifactTypes = 4
	// Indicates wanting a tarball containing guest images and test bundles.
	BuilderConfig_Artifacts_PINNED_GUEST_IMAGES BuilderConfig_Artifacts_ArtifactTypes = 5
	// Indicates wanting an archive of firmware images built from source.
	BuilderConfig_Artifacts_FIRMWARE BuilderConfig_Artifacts_ArtifactTypes = 6
	// Indicates wanting a tarball of the Ebuilds logs.
	BuilderConfig_Artifacts_EBUILD_LOGS BuilderConfig_Artifacts_ArtifactTypes = 7
	// Indicates wanting an archive of the ChromeOS Config.
	BuilderConfig_Artifacts_CHROMEOS_CONFIG BuilderConfig_Artifacts_ArtifactTypes = 8
	// Indicates wanting the CPE report.
	BuilderConfig_Artifacts_CPE_REPORT BuilderConfig_Artifacts_ArtifactTypes = 9
	// Indicates wanting a tar.xz archive for each image that has been
	// created.
	BuilderConfig_Artifacts_IMAGE_ARCHIVES BuilderConfig_Artifacts_ArtifactTypes = 10
	// Artifacts used by the toolchain.
	//
	// Indicates an unvetted orderfile for Chrome.
	BuilderConfig_Artifacts_UNVERIFIED_CHROME_LLVM_ORDERFILE BuilderConfig_Artifacts_ArtifactTypes = 11
	// Indicates a vetted orderfile for Chrome.
	BuilderConfig_Artifacts_VERIFIED_CHROME_LLVM_ORDERFILE BuilderConfig_Artifacts_ArtifactTypes = 12
	// Indicates a clang-tidy artifact.
	BuilderConfig_Artifacts_CHROME_CLANG_WARNINGS_FILE BuilderConfig_Artifacts_ArtifactTypes = 13
	// Indicates a PGO artifact for the compiler.
	BuilderConfig_Artifacts_UNVERIFIED_LLVM_PGO_FILE BuilderConfig_Artifacts_ArtifactTypes = 14
	// Indicates an unvetted AFDO Chrome profile.  (Generated by HW Tests in
	// the benchmark-afdo-generate builder.)
	BuilderConfig_Artifacts_UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE BuilderConfig_Artifacts_ArtifactTypes = 15
	// Indicates a vetted AFDO Chrome profile.
	BuilderConfig_Artifacts_VERIFIED_CHROME_BENCHMARK_AFDO_FILE BuilderConfig_Artifacts_ArtifactTypes = 16
	// Indicates a vetted AFDO Kernel profile.
	BuilderConfig_Artifacts_VERIFIED_KERNEL_CWP_AFDO_FILE BuilderConfig_Artifacts_ArtifactTypes = 17
	// Indicates an unvetted AFDO Kernel CWP profile.
	BuilderConfig_Artifacts_UNVERIFIED_KERNEL_CWP_AFDO_FILE BuilderConfig_Artifacts_ArtifactTypes = 18
	// Indicates an unvetted AFDO Chrome CWP profile.
	BuilderConfig_Artifacts_UNVERIFIED_CHROME_CWP_AFDO_FILE BuilderConfig_Artifacts_ArtifactTypes = 19
	// Indicates a vetted AFDO Chrome CWP profile.
	BuilderConfig_Artifacts_VERIFIED_CHROME_CWP_AFDO_FILE BuilderConfig_Artifacts_ArtifactTypes = 20
	// Indicates a vetted AFDO profile for release.
	BuilderConfig_Artifacts_VERIFIED_RELEASE_AFDO_FILE BuilderConfig_Artifacts_ArtifactTypes = 21
	// Indicates an unvetted AFDO perf data file (from HW Test).
	BuilderConfig_Artifacts_UNVERIFIED_CHROME_BENCHMARK_PERF_FILE BuilderConfig_Artifacts_ArtifactTypes = 22
	// Indicates an unstripped Chrome binary.
	BuilderConfig_Artifacts_CHROME_DEBUG_BINARY BuilderConfig_Artifacts_ArtifactTypes = 23
	// Indicates toolchain logs for the compiler warnings for werror monitor
	BuilderConfig_Artifacts_TOOLCHAIN_WARNING_LOGS BuilderConfig_Artifacts_ArtifactTypes = 24
	// Indicates a prod Chrome AFDO profile for Android/Linux.
	BuilderConfig_Artifacts_CHROME_AFDO_PROFILE_FOR_ANDROID_LINUX BuilderConfig_Artifacts_ArtifactTypes = 25
	// Indicates diagnoses for Clang crashes
	BuilderConfig_Artifacts_CLANG_CRASH_DIAGNOSES BuilderConfig_Artifacts_ArtifactTypes = 26
	// Indicates wanting a tarball containing fingerprint MCU test binaries.
	BuilderConfig_Artifacts_FPMCU_UNITTESTS BuilderConfig_Artifacts_ArtifactTypes = 27
	// Indicates wanting a test image tarball suitable for importing into GCE.
	BuilderConfig_Artifacts_GCE_TARBALL BuilderConfig_Artifacts_ArtifactTypes = 28
	// Indicates Rusage logs from Compiler Invocations
	BuilderConfig_Artifacts_COMPILER_RUSAGE_LOG BuilderConfig_Artifacts_ArtifactTypes = 29
	// FirmwareService: Firmware artifacts in a tarball.
	BuilderConfig_Artifacts_FIRMWARE_TARBALL BuilderConfig_Artifacts_ArtifactTypes = 30
	// FirmwareService: Metadata about the firmware.
	BuilderConfig_Artifacts_FIRMWARE_TARBALL_INFO BuilderConfig_Artifacts_ArtifactTypes = 31
	// ArtifactsService: BundleDebugSymbols
	BuilderConfig_Artifacts_DEBUG_SYMBOLS BuilderConfig_Artifacts_ArtifactTypes = 32
	// FirmwareService: LCOV code coverage files.
	BuilderConfig_Artifacts_FIRMWARE_LCOV BuilderConfig_Artifacts_ArtifactTypes = 33
)

// Enum value maps for BuilderConfig_Artifacts_ArtifactTypes.
var (
	BuilderConfig_Artifacts_ArtifactTypes_name = map[int32]string{
		0:  "ARTIFACT_TYPES_UNSPECIFIED",
		1:  "IMAGE_ZIP",
		2:  "TEST_UPDATE_PAYLOAD",
		3:  "AUTOTEST_FILES",
		4:  "TAST_FILES",
		5:  "PINNED_GUEST_IMAGES",
		6:  "FIRMWARE",
		7:  "EBUILD_LOGS",
		8:  "CHROMEOS_CONFIG",
		9:  "CPE_REPORT",
		10: "IMAGE_ARCHIVES",
		11: "UNVERIFIED_CHROME_LLVM_ORDERFILE",
		12: "VERIFIED_CHROME_LLVM_ORDERFILE",
		13: "CHROME_CLANG_WARNINGS_FILE",
		14: "UNVERIFIED_LLVM_PGO_FILE",
		15: "UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE",
		16: "VERIFIED_CHROME_BENCHMARK_AFDO_FILE",
		17: "VERIFIED_KERNEL_CWP_AFDO_FILE",
		18: "UNVERIFIED_KERNEL_CWP_AFDO_FILE",
		19: "UNVERIFIED_CHROME_CWP_AFDO_FILE",
		20: "VERIFIED_CHROME_CWP_AFDO_FILE",
		21: "VERIFIED_RELEASE_AFDO_FILE",
		22: "UNVERIFIED_CHROME_BENCHMARK_PERF_FILE",
		23: "CHROME_DEBUG_BINARY",
		24: "TOOLCHAIN_WARNING_LOGS",
		25: "CHROME_AFDO_PROFILE_FOR_ANDROID_LINUX",
		26: "CLANG_CRASH_DIAGNOSES",
		27: "FPMCU_UNITTESTS",
		28: "GCE_TARBALL",
		29: "COMPILER_RUSAGE_LOG",
		30: "FIRMWARE_TARBALL",
		31: "FIRMWARE_TARBALL_INFO",
		32: "DEBUG_SYMBOLS",
		33: "FIRMWARE_LCOV",
	}
	BuilderConfig_Artifacts_ArtifactTypes_value = map[string]int32{
		"ARTIFACT_TYPES_UNSPECIFIED":            0,
		"IMAGE_ZIP":                             1,
		"TEST_UPDATE_PAYLOAD":                   2,
		"AUTOTEST_FILES":                        3,
		"TAST_FILES":                            4,
		"PINNED_GUEST_IMAGES":                   5,
		"FIRMWARE":                              6,
		"EBUILD_LOGS":                           7,
		"CHROMEOS_CONFIG":                       8,
		"CPE_REPORT":                            9,
		"IMAGE_ARCHIVES":                        10,
		"UNVERIFIED_CHROME_LLVM_ORDERFILE":      11,
		"VERIFIED_CHROME_LLVM_ORDERFILE":        12,
		"CHROME_CLANG_WARNINGS_FILE":            13,
		"UNVERIFIED_LLVM_PGO_FILE":              14,
		"UNVERIFIED_CHROME_BENCHMARK_AFDO_FILE": 15,
		"VERIFIED_CHROME_BENCHMARK_AFDO_FILE":   16,
		"VERIFIED_KERNEL_CWP_AFDO_FILE":         17,
		"UNVERIFIED_KERNEL_CWP_AFDO_FILE":       18,
		"UNVERIFIED_CHROME_CWP_AFDO_FILE":       19,
		"VERIFIED_CHROME_CWP_AFDO_FILE":         20,
		"VERIFIED_RELEASE_AFDO_FILE":            21,
		"UNVERIFIED_CHROME_BENCHMARK_PERF_FILE": 22,
		"CHROME_DEBUG_BINARY":                   23,
		"TOOLCHAIN_WARNING_LOGS":                24,
		"CHROME_AFDO_PROFILE_FOR_ANDROID_LINUX": 25,
		"CLANG_CRASH_DIAGNOSES":                 26,
		"FPMCU_UNITTESTS":                       27,
		"GCE_TARBALL":                           28,
		"COMPILER_RUSAGE_LOG":                   29,
		"FIRMWARE_TARBALL":                      30,
		"FIRMWARE_TARBALL_INFO":                 31,
		"DEBUG_SYMBOLS":                         32,
		"FIRMWARE_LCOV":                         33,
	}
)

func (x BuilderConfig_Artifacts_ArtifactTypes) Enum() *BuilderConfig_Artifacts_ArtifactTypes {
	p := new(BuilderConfig_Artifacts_ArtifactTypes)
	*p = x
	return p
}

func (x BuilderConfig_Artifacts_ArtifactTypes) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (BuilderConfig_Artifacts_ArtifactTypes) Descriptor() protoreflect.EnumDescriptor {
	return file_chromiumos_builder_config_proto_enumTypes[8].Descriptor()
}

func (BuilderConfig_Artifacts_ArtifactTypes) Type() protoreflect.EnumType {
	return &file_chromiumos_builder_config_proto_enumTypes[8]
}

func (x BuilderConfig_Artifacts_ArtifactTypes) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use BuilderConfig_Artifacts_ArtifactTypes.Descriptor instead.
func (BuilderConfig_Artifacts_ArtifactTypes) EnumDescriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 3, 1}
}

// Configuration used by a builder during execution.
type BuilderConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Id           *BuilderConfig_Id           `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	General      *BuilderConfig_General      `protobuf:"bytes,2,opt,name=general,proto3" json:"general,omitempty"`
	Orchestrator *BuilderConfig_Orchestrator `protobuf:"bytes,3,opt,name=orchestrator,proto3" json:"orchestrator,omitempty"`
	Artifacts    *BuilderConfig_Artifacts    `protobuf:"bytes,4,opt,name=artifacts,proto3" json:"artifacts,omitempty"`
	Chrome       *BuilderConfig_Chrome       `protobuf:"bytes,5,opt,name=chrome,proto3" json:"chrome,omitempty"`
	Build        *BuilderConfig_Build        `protobuf:"bytes,6,opt,name=build,proto3" json:"build,omitempty"`
	UnitTests    *BuilderConfig_UnitTests    `protobuf:"bytes,7,opt,name=unit_tests,json=unitTests,proto3" json:"unit_tests,omitempty"`
}

func (x *BuilderConfig) Reset() {
	*x = BuilderConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig) ProtoMessage() {}

func (x *BuilderConfig) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig.ProtoReflect.Descriptor instead.
func (*BuilderConfig) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0}
}

func (x *BuilderConfig) GetId() *BuilderConfig_Id {
	if x != nil {
		return x.Id
	}
	return nil
}

func (x *BuilderConfig) GetGeneral() *BuilderConfig_General {
	if x != nil {
		return x.General
	}
	return nil
}

func (x *BuilderConfig) GetOrchestrator() *BuilderConfig_Orchestrator {
	if x != nil {
		return x.Orchestrator
	}
	return nil
}

func (x *BuilderConfig) GetArtifacts() *BuilderConfig_Artifacts {
	if x != nil {
		return x.Artifacts
	}
	return nil
}

func (x *BuilderConfig) GetChrome() *BuilderConfig_Chrome {
	if x != nil {
		return x.Chrome
	}
	return nil
}

func (x *BuilderConfig) GetBuild() *BuilderConfig_Build {
	if x != nil {
		return x.Build
	}
	return nil
}

func (x *BuilderConfig) GetUnitTests() *BuilderConfig_UnitTests {
	if x != nil {
		return x.UnitTests
	}
	return nil
}

// List of builder configs. Intended to be serialized to / from disk.
type BuilderConfigs struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	BuilderConfigs []*BuilderConfig `protobuf:"bytes,1,rep,name=builder_configs,json=builderConfigs,proto3" json:"builder_configs,omitempty"`
}

func (x *BuilderConfigs) Reset() {
	*x = BuilderConfigs{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfigs) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfigs) ProtoMessage() {}

func (x *BuilderConfigs) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfigs.ProtoReflect.Descriptor instead.
func (*BuilderConfigs) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{1}
}

func (x *BuilderConfigs) GetBuilderConfigs() []*BuilderConfig {
	if x != nil {
		return x.BuilderConfigs
	}
	return nil
}

// Unique identifier of the builder configuration.
type BuilderConfig_Id struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the configuration such as "arm-generic-postsubmit".
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Branch the configuration applies to such as "release-R73-11647.B".
	Branch string                `protobuf:"bytes,2,opt,name=branch,proto3" json:"branch,omitempty"`
	Type   BuilderConfig_Id_Type `protobuf:"varint,3,opt,name=type,proto3,enum=chromiumos.BuilderConfig_Id_Type" json:"type,omitempty"`
}

func (x *BuilderConfig_Id) Reset() {
	*x = BuilderConfig_Id{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Id) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Id) ProtoMessage() {}

func (x *BuilderConfig_Id) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Id.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Id) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 0}
}

func (x *BuilderConfig_Id) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *BuilderConfig_Id) GetBranch() string {
	if x != nil {
		return x.Branch
	}
	return ""
}

func (x *BuilderConfig_Id) GetType() BuilderConfig_Id_Type {
	if x != nil {
		return x.Type
	}
	return BuilderConfig_Id_TYPE_UNSPECIFIED
}

// General configuration for the builder.
type BuilderConfig_General struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Whether or not the build is considered critical. A failure in a critical
	// build for a CQ builder may, for example, prevent submission of the CL.
	Critical    *wrappers.BoolValue               `protobuf:"bytes,1,opt,name=critical,proto3" json:"critical,omitempty"`
	Environment BuilderConfig_General_Environment `protobuf:"varint,2,opt,name=environment,proto3,enum=chromiumos.BuilderConfig_General_Environment" json:"environment,omitempty"`
	// A rule describing conditions under which this builder should be launched.
	RunWhen *BuilderConfig_General_RunWhen `protobuf:"bytes,3,opt,name=run_when,json=runWhen,proto3" json:"run_when,omitempty"`
	// Time before which ToT had a bug that would not manifest at the
	// build stage. The CQ orchestrator should NOT reuse successful builds
	// of the build_config before this.
	BrokenBefore *timestamp.Timestamp `protobuf:"bytes,4,opt,name=broken_before,json=brokenBefore,proto3" json:"broken_before,omitempty"`
	// If present, this version number will be written to a version file
	// alongside a bot's SDK Cache (chroot). On subsequent bot-run where an SDK
	// Cache already exists, the version number in config will be compared to
	// the number present in the version file, and the SDK Cache will be
	// invalidated if there is a mismatch.
	SdkCacheVersion int32 `protobuf:"varint,5,opt,name=sdk_cache_version,json=sdkCacheVersion,proto3" json:"sdk_cache_version,omitempty"`
	// Indicates whether the target is a unibuild.
	Unibuild bool                           `protobuf:"varint,6,opt,name=unibuild,proto3" json:"unibuild,omitempty"`
	Manifest BuilderConfig_General_Manifest `protobuf:"varint,7,opt,name=manifest,proto3,enum=chromiumos.BuilderConfig_General_Manifest" json:"manifest,omitempty"`
	// The Firmware Location, passed to FirmwareService calls.
	FirmwareLocation FwLocation `protobuf:"varint,8,opt,name=firmware_location,json=firmwareLocation,proto3,enum=chromiumos.FwLocation" json:"firmware_location,omitempty"`
}

func (x *BuilderConfig_General) Reset() {
	*x = BuilderConfig_General{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_General) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_General) ProtoMessage() {}

func (x *BuilderConfig_General) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_General.ProtoReflect.Descriptor instead.
func (*BuilderConfig_General) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 1}
}

func (x *BuilderConfig_General) GetCritical() *wrappers.BoolValue {
	if x != nil {
		return x.Critical
	}
	return nil
}

func (x *BuilderConfig_General) GetEnvironment() BuilderConfig_General_Environment {
	if x != nil {
		return x.Environment
	}
	return BuilderConfig_General_ENVIRONMENT_UNSPECIFIED
}

func (x *BuilderConfig_General) GetRunWhen() *BuilderConfig_General_RunWhen {
	if x != nil {
		return x.RunWhen
	}
	return nil
}

func (x *BuilderConfig_General) GetBrokenBefore() *timestamp.Timestamp {
	if x != nil {
		return x.BrokenBefore
	}
	return nil
}

func (x *BuilderConfig_General) GetSdkCacheVersion() int32 {
	if x != nil {
		return x.SdkCacheVersion
	}
	return 0
}

func (x *BuilderConfig_General) GetUnibuild() bool {
	if x != nil {
		return x.Unibuild
	}
	return false
}

func (x *BuilderConfig_General) GetManifest() BuilderConfig_General_Manifest {
	if x != nil {
		return x.Manifest
	}
	return BuilderConfig_General_MANIFEST_UNSPECIFIED
}

func (x *BuilderConfig_General) GetFirmwareLocation() FwLocation {
	if x != nil {
		return x.FirmwareLocation
	}
	return FwLocation_FW_LOCATION_UNKNOWN
}

// Configuration pertaining to builders operating as "orchestrators".
// Orchestrators orchestrate the running of other child builders.
type BuilderConfig_Orchestrator struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	ChildSpecs []*BuilderConfig_Orchestrator_ChildSpec `protobuf:"bytes,5,rep,name=child_specs,json=childSpecs,proto3" json:"child_specs,omitempty"`
	// GitilesCommit to use if not provided.
	GitilesCommit *GitilesCommit `protobuf:"bytes,2,opt,name=gitiles_commit,json=gitilesCommit,proto3" json:"gitiles_commit,omitempty"`
	// GerritChanges to apply.  To ignore these changes, use
	// $chromeos/cros_infra_config.ignore_config_changelist=True.
	GerritChanges        []*GerritChange                                  `protobuf:"bytes,3,rep,name=gerrit_changes,json=gerritChanges,proto3" json:"gerrit_changes,omitempty"`
	FollowOnOrchestrator *BuilderConfig_Orchestrator_FollowOnOrchestrator `protobuf:"bytes,4,opt,name=follow_on_orchestrator,json=followOnOrchestrator,proto3" json:"follow_on_orchestrator,omitempty"`
}

func (x *BuilderConfig_Orchestrator) Reset() {
	*x = BuilderConfig_Orchestrator{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Orchestrator) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Orchestrator) ProtoMessage() {}

func (x *BuilderConfig_Orchestrator) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[4]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Orchestrator.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Orchestrator) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 2}
}

func (x *BuilderConfig_Orchestrator) GetChildSpecs() []*BuilderConfig_Orchestrator_ChildSpec {
	if x != nil {
		return x.ChildSpecs
	}
	return nil
}

func (x *BuilderConfig_Orchestrator) GetGitilesCommit() *GitilesCommit {
	if x != nil {
		return x.GitilesCommit
	}
	return nil
}

func (x *BuilderConfig_Orchestrator) GetGerritChanges() []*GerritChange {
	if x != nil {
		return x.GerritChanges
	}
	return nil
}

func (x *BuilderConfig_Orchestrator) GetFollowOnOrchestrator() *BuilderConfig_Orchestrator_FollowOnOrchestrator {
	if x != nil {
		return x.FollowOnOrchestrator
	}
	return nil
}

// Configuration pertaining to artifacts produced during a build.
type BuilderConfig_Artifacts struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Prebuilts     BuilderConfig_Artifacts_Prebuilts       `protobuf:"varint,1,opt,name=prebuilts,proto3,enum=chromiumos.BuilderConfig_Artifacts_Prebuilts" json:"prebuilts,omitempty"`
	ArtifactTypes []BuilderConfig_Artifacts_ArtifactTypes `protobuf:"varint,2,rep,packed,name=artifact_types,json=artifactTypes,proto3,enum=chromiumos.BuilderConfig_Artifacts_ArtifactTypes" json:"artifact_types,omitempty"`
	// Google storage bucket to upload prebuilts to.
	PrebuiltsGsBucket string `protobuf:"bytes,3,opt,name=prebuilts_gs_bucket,json=prebuiltsGsBucket,proto3" json:"prebuilts_gs_bucket,omitempty"`
	// Google storage bucket to upload all artifacts to.
	ArtifactsGsBucket string `protobuf:"bytes,4,opt,name=artifacts_gs_bucket,json=artifactsGsBucket,proto3" json:"artifacts_gs_bucket,omitempty"`
	// There may be more than one set of publishing instructions.
	PublishArtifacts []*BuilderConfig_Artifacts_PublishInfo `protobuf:"bytes,5,rep,name=publish_artifacts,json=publishArtifacts,proto3" json:"publish_artifacts,omitempty"`
	// There may be more than one set of consumable artifacts.
	InputArtifacts []*BuilderConfig_Artifacts_InputArtifactInfo `protobuf:"bytes,6,rep,name=input_artifacts,json=inputArtifacts,proto3" json:"input_artifacts,omitempty"`
	// Profile information needed by artifact prepare/bundle endpoints.
	// TODO(crbug/1034529): DEPRECATED: see artifacts_info.
	ArtifactProfileInfo *ArtifactProfileInfo `protobuf:"bytes,7,opt,name=artifact_profile_info,json=artifactProfileInfo,proto3" json:"artifact_profile_info,omitempty"`
	// Artifacts separated by service.
	ArtifactsInfo *ArtifactsByService `protobuf:"bytes,8,opt,name=artifacts_info,json=artifactsInfo,proto3" json:"artifacts_info,omitempty"`
}

func (x *BuilderConfig_Artifacts) Reset() {
	*x = BuilderConfig_Artifacts{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Artifacts) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Artifacts) ProtoMessage() {}

func (x *BuilderConfig_Artifacts) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[5]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Artifacts.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Artifacts) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 3}
}

func (x *BuilderConfig_Artifacts) GetPrebuilts() BuilderConfig_Artifacts_Prebuilts {
	if x != nil {
		return x.Prebuilts
	}
	return BuilderConfig_Artifacts_PREBUILTS_UNSPECIFIED
}

func (x *BuilderConfig_Artifacts) GetArtifactTypes() []BuilderConfig_Artifacts_ArtifactTypes {
	if x != nil {
		return x.ArtifactTypes
	}
	return nil
}

func (x *BuilderConfig_Artifacts) GetPrebuiltsGsBucket() string {
	if x != nil {
		return x.PrebuiltsGsBucket
	}
	return ""
}

func (x *BuilderConfig_Artifacts) GetArtifactsGsBucket() string {
	if x != nil {
		return x.ArtifactsGsBucket
	}
	return ""
}

func (x *BuilderConfig_Artifacts) GetPublishArtifacts() []*BuilderConfig_Artifacts_PublishInfo {
	if x != nil {
		return x.PublishArtifacts
	}
	return nil
}

func (x *BuilderConfig_Artifacts) GetInputArtifacts() []*BuilderConfig_Artifacts_InputArtifactInfo {
	if x != nil {
		return x.InputArtifacts
	}
	return nil
}

func (x *BuilderConfig_Artifacts) GetArtifactProfileInfo() *ArtifactProfileInfo {
	if x != nil {
		return x.ArtifactProfileInfo
	}
	return nil
}

func (x *BuilderConfig_Artifacts) GetArtifactsInfo() *ArtifactsByService {
	if x != nil {
		return x.ArtifactsInfo
	}
	return nil
}

// Configuration pertaining to Chrome.
type BuilderConfig_Chrome struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Whether to build internal or external Chrome. Internal chrome adds
	// Chrome branding.
	Internal bool `protobuf:"varint,1,opt,name=internal,proto3" json:"internal,omitempty"`
}

func (x *BuilderConfig_Chrome) Reset() {
	*x = BuilderConfig_Chrome{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[6]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Chrome) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Chrome) ProtoMessage() {}

func (x *BuilderConfig_Chrome) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[6]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Chrome.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Chrome) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 4}
}

func (x *BuilderConfig_Chrome) GetInternal() bool {
	if x != nil {
		return x.Internal
	}
	return false
}

// Build specific configuration.
type BuilderConfig_Build struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// USE flags to use with the build.
	UseFlags       []*UseFlag                          `protobuf:"bytes,1,rep,name=use_flags,json=useFlags,proto3" json:"use_flags,omitempty"`
	PortageProfile *BuilderConfig_Build_PortageProfile `protobuf:"bytes,2,opt,name=portage_profile,json=portageProfile,proto3" json:"portage_profile,omitempty"`
	// Whether to apply gerrit changes, if any. Use case is to build without
	// changes after failure to identify the changes as the culprit.
	ApplyGerritChanges bool                                  `protobuf:"varint,6,opt,name=apply_gerrit_changes,json=applyGerritChanges,proto3" json:"apply_gerrit_changes,omitempty"`
	PrepareForBuild    *BuilderConfig_Build_PrepareForBuild  `protobuf:"bytes,17,opt,name=prepare_for_build,json=prepareForBuild,proto3" json:"prepare_for_build,omitempty"`
	SdkUpdate          *BuilderConfig_Build_SdkUpdate        `protobuf:"bytes,12,opt,name=sdk_update,json=sdkUpdate,proto3" json:"sdk_update,omitempty"`
	InstallToolchain   *BuilderConfig_Build_InstallToolchain `protobuf:"bytes,13,opt,name=install_toolchain,json=installToolchain,proto3" json:"install_toolchain,omitempty"`
	InstallPackages    *BuilderConfig_Build_InstallPackages  `protobuf:"bytes,16,opt,name=install_packages,json=installPackages,proto3" json:"install_packages,omitempty"`
	BuildImages        *BuilderConfig_Build_BuildImages      `protobuf:"bytes,15,opt,name=build_images,json=buildImages,proto3" json:"build_images,omitempty"`
}

func (x *BuilderConfig_Build) Reset() {
	*x = BuilderConfig_Build{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[7]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Build) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Build) ProtoMessage() {}

func (x *BuilderConfig_Build) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[7]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Build.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Build) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 5}
}

func (x *BuilderConfig_Build) GetUseFlags() []*UseFlag {
	if x != nil {
		return x.UseFlags
	}
	return nil
}

func (x *BuilderConfig_Build) GetPortageProfile() *BuilderConfig_Build_PortageProfile {
	if x != nil {
		return x.PortageProfile
	}
	return nil
}

func (x *BuilderConfig_Build) GetApplyGerritChanges() bool {
	if x != nil {
		return x.ApplyGerritChanges
	}
	return false
}

func (x *BuilderConfig_Build) GetPrepareForBuild() *BuilderConfig_Build_PrepareForBuild {
	if x != nil {
		return x.PrepareForBuild
	}
	return nil
}

func (x *BuilderConfig_Build) GetSdkUpdate() *BuilderConfig_Build_SdkUpdate {
	if x != nil {
		return x.SdkUpdate
	}
	return nil
}

func (x *BuilderConfig_Build) GetInstallToolchain() *BuilderConfig_Build_InstallToolchain {
	if x != nil {
		return x.InstallToolchain
	}
	return nil
}

func (x *BuilderConfig_Build) GetInstallPackages() *BuilderConfig_Build_InstallPackages {
	if x != nil {
		return x.InstallPackages
	}
	return nil
}

func (x *BuilderConfig_Build) GetBuildImages() *BuilderConfig_Build_BuildImages {
	if x != nil {
		return x.BuildImages
	}
	return nil
}

type BuilderConfig_UnitTests struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Skipped packages.
	PackageBlacklist []*PackageInfo `protobuf:"bytes,4,rep,name=package_blacklist,json=packageBlacklist,proto3" json:"package_blacklist,omitempty"`
	// Controls the running of ebuild tests with possible early exit.
	EbuildsRunSpec BuilderConfig_RunSpec `protobuf:"varint,5,opt,name=ebuilds_run_spec,json=ebuildsRunSpec,proto3,enum=chromiumos.BuilderConfig_RunSpec" json:"ebuilds_run_spec,omitempty"`
	// Whether to assume the sysroot is empty.
	EmptySysroot bool `protobuf:"varint,6,opt,name=empty_sysroot,json=emptySysroot,proto3" json:"empty_sysroot,omitempty"`
	// Packages to be tested.
	// Defaults to all testable packages when none are given.
	Packages []*PackageInfo `protobuf:"bytes,7,rep,name=packages,proto3" json:"packages,omitempty"`
	// Set of package dependencies to test.
	Dependencies BuilderConfig_Dependencies `protobuf:"varint,8,opt,name=dependencies,proto3,enum=chromiumos.BuilderConfig_Dependencies" json:"dependencies,omitempty"`
}

func (x *BuilderConfig_UnitTests) Reset() {
	*x = BuilderConfig_UnitTests{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[8]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_UnitTests) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_UnitTests) ProtoMessage() {}

func (x *BuilderConfig_UnitTests) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[8]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_UnitTests.ProtoReflect.Descriptor instead.
func (*BuilderConfig_UnitTests) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 6}
}

func (x *BuilderConfig_UnitTests) GetPackageBlacklist() []*PackageInfo {
	if x != nil {
		return x.PackageBlacklist
	}
	return nil
}

func (x *BuilderConfig_UnitTests) GetEbuildsRunSpec() BuilderConfig_RunSpec {
	if x != nil {
		return x.EbuildsRunSpec
	}
	return BuilderConfig_RUN_SPEC_UNSPECIFIED
}

func (x *BuilderConfig_UnitTests) GetEmptySysroot() bool {
	if x != nil {
		return x.EmptySysroot
	}
	return false
}

func (x *BuilderConfig_UnitTests) GetPackages() []*PackageInfo {
	if x != nil {
		return x.Packages
	}
	return nil
}

func (x *BuilderConfig_UnitTests) GetDependencies() BuilderConfig_Dependencies {
	if x != nil {
		return x.Dependencies
	}
	return BuilderConfig_DEPENDENCIES_UNSPECIFIED
}

// Rule describing conditions under which a builder should be launched.
type BuilderConfig_General_RunWhen struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Mode BuilderConfig_General_RunWhen_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=chromiumos.BuilderConfig_General_RunWhen_Mode" json:"mode,omitempty"`
	// chromiumos code file patterns, relative to chromiumos root, which may
	// use * or ** for globbing.
	// e.g.
	// chromite/myfile.txt
	// chromite/config/*
	// **/*.md
	FilePatterns []string `protobuf:"bytes,2,rep,name=file_patterns,json=filePatterns,proto3" json:"file_patterns,omitempty"`
}

func (x *BuilderConfig_General_RunWhen) Reset() {
	*x = BuilderConfig_General_RunWhen{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[9]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_General_RunWhen) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_General_RunWhen) ProtoMessage() {}

func (x *BuilderConfig_General_RunWhen) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[9]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_General_RunWhen.ProtoReflect.Descriptor instead.
func (*BuilderConfig_General_RunWhen) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 1, 0}
}

func (x *BuilderConfig_General_RunWhen) GetMode() BuilderConfig_General_RunWhen_Mode {
	if x != nil {
		return x.Mode
	}
	return BuilderConfig_General_RunWhen_MODE_UNSPECIFIED
}

func (x *BuilderConfig_General_RunWhen) GetFilePatterns() []string {
	if x != nil {
		return x.FilePatterns
	}
	return nil
}

// Defines a child the orchestrator spawns and how it is handled.
type BuilderConfig_Orchestrator_ChildSpec struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// BuilderConfig.Id.name of the child build. Would be expected to match
	// this name and the BuilderConfig.Id.branch and BuilderConfig.Id.type of
	// this parent orchestrator builder.
	Name            string                                               `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	CollectHandling BuilderConfig_Orchestrator_ChildSpec_CollectHandling `protobuf:"varint,2,opt,name=collect_handling,json=collectHandling,proto3,enum=chromiumos.BuilderConfig_Orchestrator_ChildSpec_CollectHandling" json:"collect_handling,omitempty"`
}

func (x *BuilderConfig_Orchestrator_ChildSpec) Reset() {
	*x = BuilderConfig_Orchestrator_ChildSpec{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[10]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Orchestrator_ChildSpec) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Orchestrator_ChildSpec) ProtoMessage() {}

func (x *BuilderConfig_Orchestrator_ChildSpec) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[10]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Orchestrator_ChildSpec.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Orchestrator_ChildSpec) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 2, 0}
}

func (x *BuilderConfig_Orchestrator_ChildSpec) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *BuilderConfig_Orchestrator_ChildSpec) GetCollectHandling() BuilderConfig_Orchestrator_ChildSpec_CollectHandling {
	if x != nil {
		return x.CollectHandling
	}
	return BuilderConfig_Orchestrator_ChildSpec_COLLECT_HANDLING_UNSPECIFIED
}

// Follow on orchestrator to launch, and possibly wait for.
type BuilderConfig_Orchestrator_FollowOnOrchestrator struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// BuilderConfig.Id.name of the follow on orchestrator.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Whether to wait for the follow on orchestrator to finish.
	AwaitCompletion bool `protobuf:"varint,2,opt,name=await_completion,json=awaitCompletion,proto3" json:"await_completion,omitempty"`
}

func (x *BuilderConfig_Orchestrator_FollowOnOrchestrator) Reset() {
	*x = BuilderConfig_Orchestrator_FollowOnOrchestrator{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[11]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Orchestrator_FollowOnOrchestrator) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Orchestrator_FollowOnOrchestrator) ProtoMessage() {}

func (x *BuilderConfig_Orchestrator_FollowOnOrchestrator) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[11]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Orchestrator_FollowOnOrchestrator.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Orchestrator_FollowOnOrchestrator) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 2, 1}
}

func (x *BuilderConfig_Orchestrator_FollowOnOrchestrator) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *BuilderConfig_Orchestrator_FollowOnOrchestrator) GetAwaitCompletion() bool {
	if x != nil {
		return x.AwaitCompletion
	}
	return false
}

// TODO(crbug/1034529): DEPRECATED: see artifacts_info.
type BuilderConfig_Artifacts_PublishInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Artifact types to publish to this bucket.
	PublishTypes []BuilderConfig_Artifacts_ArtifactTypes `protobuf:"varint,2,rep,packed,name=publish_types,json=publishTypes,proto3,enum=chromiumos.BuilderConfig_Artifacts_ArtifactTypes" json:"publish_types,omitempty"`
	// GS location in which to publish artifacts ("gs://" is prepended).
	// Several fields can be logically specified:
	//   %(kind)s: BuilderConfig.Id.Type with underscores turned into hyphens.
	//   %(version)s: Chromeos version (e.g., R81-12813.0.0)
	//   %(build_id)s: Buildbucket job ID.
	//   %(target)s: build target name.
	//   %(builder_name)s: The builder name (e.g. octopus-cq), lowercase with
	//       underscores turned into hyphens.
	//   %(gs_path)s: "%(builder_name)s/%(version)s-%(build_id)s".
	//   %(artifact_name)s: The name of the artifact being published.
	PublishGsLocation string `protobuf:"bytes,3,opt,name=publish_gs_location,json=publishGsLocation,proto3" json:"publish_gs_location,omitempty"`
	// Any acl to apply, such as "public-read".
	AclName string `protobuf:"bytes,4,opt,name=acl_name,json=aclName,proto3" json:"acl_name,omitempty"`
}

func (x *BuilderConfig_Artifacts_PublishInfo) Reset() {
	*x = BuilderConfig_Artifacts_PublishInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[12]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Artifacts_PublishInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Artifacts_PublishInfo) ProtoMessage() {}

func (x *BuilderConfig_Artifacts_PublishInfo) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[12]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Artifacts_PublishInfo.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Artifacts_PublishInfo) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 3, 0}
}

func (x *BuilderConfig_Artifacts_PublishInfo) GetPublishTypes() []BuilderConfig_Artifacts_ArtifactTypes {
	if x != nil {
		return x.PublishTypes
	}
	return nil
}

func (x *BuilderConfig_Artifacts_PublishInfo) GetPublishGsLocation() string {
	if x != nil {
		return x.PublishGsLocation
	}
	return ""
}

func (x *BuilderConfig_Artifacts_PublishInfo) GetAclName() string {
	if x != nil {
		return x.AclName
	}
	return ""
}

// TODO(crbug/1034529): DEPRECATED: see artifacts_info.
type BuilderConfig_Artifacts_InputArtifactInfo struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Artifact type to seek in these buckets.  Use the first instance of the
	// artifact found in the list of locations.
	InputArtifactType BuilderConfig_Artifacts_ArtifactTypes `protobuf:"varint,1,opt,name=input_artifact_type,json=inputArtifactType,proto3,enum=chromiumos.BuilderConfig_Artifacts_ArtifactTypes" json:"input_artifact_type,omitempty"`
	// Google storage locations containing these artifacts.
	InputArtifactGsLocations []string `protobuf:"bytes,2,rep,name=input_artifact_gs_locations,json=inputArtifactGsLocations,proto3" json:"input_artifact_gs_locations,omitempty"`
}

func (x *BuilderConfig_Artifacts_InputArtifactInfo) Reset() {
	*x = BuilderConfig_Artifacts_InputArtifactInfo{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[13]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Artifacts_InputArtifactInfo) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Artifacts_InputArtifactInfo) ProtoMessage() {}

func (x *BuilderConfig_Artifacts_InputArtifactInfo) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[13]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Artifacts_InputArtifactInfo.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Artifacts_InputArtifactInfo) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 3, 1}
}

func (x *BuilderConfig_Artifacts_InputArtifactInfo) GetInputArtifactType() BuilderConfig_Artifacts_ArtifactTypes {
	if x != nil {
		return x.InputArtifactType
	}
	return BuilderConfig_Artifacts_ARTIFACT_TYPES_UNSPECIFIED
}

func (x *BuilderConfig_Artifacts_InputArtifactInfo) GetInputArtifactGsLocations() []string {
	if x != nil {
		return x.InputArtifactGsLocations
	}
	return nil
}

// The profile of the variant to set up and build.
type BuilderConfig_Build_PortageProfile struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Profile string `protobuf:"bytes,1,opt,name=profile,proto3" json:"profile,omitempty"`
}

func (x *BuilderConfig_Build_PortageProfile) Reset() {
	*x = BuilderConfig_Build_PortageProfile{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[14]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Build_PortageProfile) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Build_PortageProfile) ProtoMessage() {}

func (x *BuilderConfig_Build_PortageProfile) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[14]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Build_PortageProfile.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Build_PortageProfile) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 5, 0}
}

func (x *BuilderConfig_Build_PortageProfile) GetProfile() string {
	if x != nil {
		return x.Profile
	}
	return ""
}

// Controls for the call to cros_artifacts.prepare_for_build.
// TODO(crbug/1019868): Drop this after all users have switched to
// artifacts.artifactProfileInfo.
type BuilderConfig_Build_PrepareForBuild struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Additional arguments from common.proto, passed into any
	// PrepareFor*Build endpoint.
	AdditionalArgs *PrepareForBuildAdditionalArgs `protobuf:"bytes,1,opt,name=additional_args,json=additionalArgs,proto3" json:"additional_args,omitempty"`
}

func (x *BuilderConfig_Build_PrepareForBuild) Reset() {
	*x = BuilderConfig_Build_PrepareForBuild{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[15]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Build_PrepareForBuild) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Build_PrepareForBuild) ProtoMessage() {}

func (x *BuilderConfig_Build_PrepareForBuild) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[15]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Build_PrepareForBuild.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Build_PrepareForBuild) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 5, 1}
}

func (x *BuilderConfig_Build_PrepareForBuild) GetAdditionalArgs() *PrepareForBuildAdditionalArgs {
	if x != nil {
		return x.AdditionalArgs
	}
	return nil
}

// Controls for the call to SdkService.Update.
type BuilderConfig_Build_SdkUpdate struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Whether to compile from source (vs using prebuilts when able.)
	CompileSource bool `protobuf:"varint,1,opt,name=compile_source,json=compileSource,proto3" json:"compile_source,omitempty"`
}

func (x *BuilderConfig_Build_SdkUpdate) Reset() {
	*x = BuilderConfig_Build_SdkUpdate{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[16]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Build_SdkUpdate) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Build_SdkUpdate) ProtoMessage() {}

func (x *BuilderConfig_Build_SdkUpdate) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[16]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Build_SdkUpdate.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Build_SdkUpdate) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 5, 2}
}

func (x *BuilderConfig_Build_SdkUpdate) GetCompileSource() bool {
	if x != nil {
		return x.CompileSource
	}
	return false
}

// Controls for the call to SysrootService.InstallToolchain.
type BuilderConfig_Build_InstallToolchain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Whether to compile from source (vs using prebuilts when able.)
	CompileSource bool `protobuf:"varint,1,opt,name=compile_source,json=compileSource,proto3" json:"compile_source,omitempty"`
}

func (x *BuilderConfig_Build_InstallToolchain) Reset() {
	*x = BuilderConfig_Build_InstallToolchain{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[17]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Build_InstallToolchain) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Build_InstallToolchain) ProtoMessage() {}

func (x *BuilderConfig_Build_InstallToolchain) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[17]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Build_InstallToolchain.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Build_InstallToolchain) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 5, 3}
}

func (x *BuilderConfig_Build_InstallToolchain) GetCompileSource() bool {
	if x != nil {
		return x.CompileSource
	}
	return false
}

// Controls for the call to InstallPackages.
type BuilderConfig_Build_InstallPackages struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Whether to compile from source (vs using prebuilts when able.)
	CompileSource bool `protobuf:"varint,1,opt,name=compile_source,json=compileSource,proto3" json:"compile_source,omitempty"`
	// Controls the running of the install packages step.
	RunSpec BuilderConfig_RunSpec `protobuf:"varint,2,opt,name=run_spec,json=runSpec,proto3,enum=chromiumos.BuilderConfig_RunSpec" json:"run_spec,omitempty"`
	// Packages to build, or empty to build all packages.
	Packages []*PackageInfo `protobuf:"bytes,3,rep,name=packages,proto3" json:"packages,omitempty"`
	// Certain builders (e.g., clang-tidy-toolchain) need to build Chrome with
	// goma disabled.
	DisableGoma bool `protobuf:"varint,4,opt,name=disable_goma,json=disableGoma,proto3" json:"disable_goma,omitempty"`
	// Set of package dependencies to install.
	Dependencies BuilderConfig_Dependencies `protobuf:"varint,5,opt,name=dependencies,proto3,enum=chromiumos.BuilderConfig_Dependencies" json:"dependencies,omitempty"`
}

func (x *BuilderConfig_Build_InstallPackages) Reset() {
	*x = BuilderConfig_Build_InstallPackages{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[18]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Build_InstallPackages) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Build_InstallPackages) ProtoMessage() {}

func (x *BuilderConfig_Build_InstallPackages) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[18]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Build_InstallPackages.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Build_InstallPackages) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 5, 4}
}

func (x *BuilderConfig_Build_InstallPackages) GetCompileSource() bool {
	if x != nil {
		return x.CompileSource
	}
	return false
}

func (x *BuilderConfig_Build_InstallPackages) GetRunSpec() BuilderConfig_RunSpec {
	if x != nil {
		return x.RunSpec
	}
	return BuilderConfig_RUN_SPEC_UNSPECIFIED
}

func (x *BuilderConfig_Build_InstallPackages) GetPackages() []*PackageInfo {
	if x != nil {
		return x.Packages
	}
	return nil
}

func (x *BuilderConfig_Build_InstallPackages) GetDisableGoma() bool {
	if x != nil {
		return x.DisableGoma
	}
	return false
}

func (x *BuilderConfig_Build_InstallPackages) GetDependencies() BuilderConfig_Dependencies {
	if x != nil {
		return x.Dependencies
	}
	return BuilderConfig_DEPENDENCIES_UNSPECIFIED
}

type BuilderConfig_Build_BuildImages struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Image types to build.
	ImageTypes []ImageType `protobuf:"varint,1,rep,packed,name=image_types,json=imageTypes,proto3,enum=chromiumos.ImageType" json:"image_types,omitempty"`
	// Whether to disable rootfs verification.
	DisableRootfsVerification bool `protobuf:"varint,2,opt,name=disable_rootfs_verification,json=disableRootfsVerification,proto3" json:"disable_rootfs_verification,omitempty"`
	// Custom disk layout to use. Note that large images can damage the lab,
	// so don't use such images for hw testing.
	// e.g. 4gb-rootfs
	DiskLayout string `protobuf:"bytes,3,opt,name=disk_layout,json=diskLayout,proto3" json:"disk_layout,omitempty"`
}

func (x *BuilderConfig_Build_BuildImages) Reset() {
	*x = BuilderConfig_Build_BuildImages{}
	if protoimpl.UnsafeEnabled {
		mi := &file_chromiumos_builder_config_proto_msgTypes[19]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *BuilderConfig_Build_BuildImages) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*BuilderConfig_Build_BuildImages) ProtoMessage() {}

func (x *BuilderConfig_Build_BuildImages) ProtoReflect() protoreflect.Message {
	mi := &file_chromiumos_builder_config_proto_msgTypes[19]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use BuilderConfig_Build_BuildImages.ProtoReflect.Descriptor instead.
func (*BuilderConfig_Build_BuildImages) Descriptor() ([]byte, []int) {
	return file_chromiumos_builder_config_proto_rawDescGZIP(), []int{0, 5, 5}
}

func (x *BuilderConfig_Build_BuildImages) GetImageTypes() []ImageType {
	if x != nil {
		return x.ImageTypes
	}
	return nil
}

func (x *BuilderConfig_Build_BuildImages) GetDisableRootfsVerification() bool {
	if x != nil {
		return x.DisableRootfsVerification
	}
	return false
}

func (x *BuilderConfig_Build_BuildImages) GetDiskLayout() string {
	if x != nil {
		return x.DiskLayout
	}
	return ""
}

var File_chromiumos_builder_config_proto protoreflect.FileDescriptor

var file_chromiumos_builder_config_proto_rawDesc = []byte{
	0x0a, 0x1f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x62, 0x75, 0x69,
	0x6c, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x12, 0x0a, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x1a, 0x17, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
	0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72,
	0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xde, 0x2f, 0x0a, 0x0d, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x2e, 0x49, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72,
	0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x07, 0x67, 0x65, 0x6e,
	0x65, 0x72, 0x61, 0x6c, 0x12, 0x4a, 0x0a, 0x0c, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72,
	0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74,
	0x6f, 0x72, 0x52, 0x0c, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72,
	0x12, 0x41, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41,
	0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43,
	0x68, 0x72, 0x6f, 0x6d, 0x65, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x12, 0x35, 0x0a,
	0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65,
	0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x12, 0x42, 0x0a, 0x0a, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x65, 0x73,
	0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x65, 0x73, 0x74, 0x73, 0x52, 0x09, 0x75,
	0x6e, 0x69, 0x74, 0x54, 0x65, 0x73, 0x74, 0x73, 0x1a, 0xcc, 0x01, 0x0a, 0x02, 0x49, 0x64, 0x12,
	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
	0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x35, 0x0a, 0x04, 0x74,
	0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x49, 0x64, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79,
	0x70, 0x65, 0x22, 0x63, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59,
	0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
	0x12, 0x06, 0x0a, 0x02, 0x43, 0x51, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x4f, 0x53, 0x54,
	0x53, 0x55, 0x42, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x4f, 0x4c,
	0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4e, 0x46, 0x4f, 0x52,
	0x4d, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45,
	0x4c, 0x45, 0x41, 0x53, 0x45, 0x10, 0x05, 0x1a, 0xcf, 0x06, 0x0a, 0x07, 0x47, 0x65, 0x6e, 0x65,
	0x72, 0x61, 0x6c, 0x12, 0x36, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,
	0x65, 0x52, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x4f, 0x0a, 0x0b, 0x65,
	0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x2d, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75,
	0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65,
	0x72, 0x61, 0x6c, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52,
	0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x44, 0x0a, 0x08,
	0x72, 0x75, 0x6e, 0x5f, 0x77, 0x68, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
	0x6c, 0x2e, 0x52, 0x75, 0x6e, 0x57, 0x68, 0x65, 0x6e, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x57, 0x68,
	0x65, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x62, 0x65, 0x66,
	0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
	0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x65, 0x66,
	0x6f, 0x72, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x64, 0x6b, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65,
	0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f,
	0x73, 0x64, 0x6b, 0x43, 0x61, 0x63, 0x68, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
	0x1a, 0x0a, 0x08, 0x75, 0x6e, 0x69, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x46, 0x0a, 0x08, 0x6d,
	0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64,
	0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
	0x2e, 0x4d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x52, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66,
	0x65, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x11, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x5f,
	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x46, 0x77, 0x4c, 0x6f,
	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65,
	0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xd6, 0x01, 0x0a, 0x07, 0x52, 0x75, 0x6e,
	0x57, 0x68, 0x65, 0x6e, 0x12, 0x42, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65,
	0x6e, 0x65, 0x72, 0x61, 0x6c, 0x2e, 0x52, 0x75, 0x6e, 0x57, 0x68, 0x65, 0x6e, 0x2e, 0x4d, 0x6f,
	0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x65,
	0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x0c, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x22, 0x62, 0x0a,
	0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e,
	0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x41,
	0x4c, 0x57, 0x41, 0x59, 0x53, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x4f,
	0x4e, 0x4c, 0x59, 0x5f, 0x52, 0x55, 0x4e, 0x5f, 0x4f, 0x4e, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f,
	0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x4e, 0x4f, 0x5f, 0x52, 0x55,
	0x4e, 0x5f, 0x4f, 0x4e, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10,
	0x03, 0x22, 0x47, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
	0x12, 0x1b, 0x0a, 0x17, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x5f,
	0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a,
	0x0a, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a,
	0x07, 0x53, 0x54, 0x41, 0x47, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x22, 0x3d, 0x0a, 0x08, 0x4d, 0x61,
	0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x41, 0x4e, 0x49, 0x46, 0x45,
	0x53, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
	0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07,
	0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x02, 0x1a, 0xb0, 0x05, 0x0a, 0x0c, 0x4f, 0x72,
	0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x51, 0x0a, 0x0b, 0x63, 0x68,
	0x69, 0x6c, 0x64, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x30, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x72, 0x63, 0x68, 0x65,
	0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x53, 0x70, 0x65,
	0x63, 0x52, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x40, 0x0a,
	0x0e, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x6f, 0x73, 0x2e, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74,
	0x52, 0x0d, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12,
	0x3f, 0x0a, 0x0e, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67,
	0x65, 0x52, 0x0d, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73,
	0x12, 0x71, 0x0a, 0x16, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x6e, 0x5f, 0x6f, 0x72,
	0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x3b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75,
	0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x72, 0x63, 0x68,
	0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x4f,
	0x6e, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x14, 0x66,
	0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x6e, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61,
	0x74, 0x6f, 0x72, 0x1a, 0xf9, 0x01, 0x0a, 0x09, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x53, 0x70, 0x65,
	0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x6b, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
	0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x40, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x72, 0x63, 0x68, 0x65,
	0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x53, 0x70, 0x65,
	0x63, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e,
	0x67, 0x52, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x69,
	0x6e, 0x67, 0x22, 0x6b, 0x0a, 0x0f, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x48, 0x61, 0x6e,
	0x64, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x20, 0x0a, 0x1c, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54,
	0x5f, 0x48, 0x41, 0x4e, 0x44, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
	0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x4c, 0x4c, 0x45,
	0x43, 0x54, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x4f, 0x5f, 0x43, 0x4f, 0x4c, 0x4c, 0x45,
	0x43, 0x54, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x5f,
	0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x48, 0x57, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x10, 0x03, 0x1a,
	0x55, 0x0a, 0x14, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x6e, 0x4f, 0x72, 0x63, 0x68, 0x65,
	0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x61,
	0x77, 0x61, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x77, 0x61, 0x69, 0x74, 0x43, 0x6f, 0x6d, 0x70,
	0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x1a, 0xdf, 0x0f, 0x0a,
	0x09, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x09, 0x70, 0x72,
	0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64,
	0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x2e, 0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x73, 0x52, 0x09, 0x70, 0x72,
	0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x0e, 0x61, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32,
	0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66,
	0x61, 0x63, 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70,
	0x65, 0x73, 0x52, 0x0d, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65,
	0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x73, 0x5f, 0x67,
	0x73, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11,
	0x70, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x73, 0x47, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x5f, 0x67,
	0x73, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11,
	0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x47, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65,
	0x74, 0x12, 0x5c, 0x0a, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65,
	0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x70,
	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12,
	0x5e, 0x0a, 0x0f, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x2e, 0x49, 0x6e,
	0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52,
	0x0e, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12,
	0x53, 0x0a, 0x15, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x66,
	0x69, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52,
	0x13, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65,
	0x49, 0x6e, 0x66, 0x6f, 0x12, 0x45, 0x0a, 0x0e, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61,
	0x63, 0x74, 0x73, 0x42, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x0d, 0x61, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0xb6, 0x01, 0x0a, 0x0b,
	0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x56, 0x0a, 0x0d, 0x70,
	0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03,
	0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74,
	0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x54, 0x79,
	0x70, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x67,
	0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x47, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x63, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x4a, 0x04,
	0x08, 0x01, 0x10, 0x02, 0x1a, 0xb5, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x61, 0x0a, 0x13, 0x69, 0x6e,
	0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70,
	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x2e, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x11, 0x69, 0x6e, 0x70, 0x75,
	0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a,
	0x1b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x5f,
	0x67, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03,
	0x28, 0x09, 0x52, 0x18, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63,
	0x74, 0x47, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x49, 0x0a, 0x09,
	0x50, 0x72, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x15, 0x50, 0x52, 0x45,
	0x42, 0x55, 0x49, 0x4c, 0x54, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
	0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01,
	0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x08, 0x0a,
	0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x22, 0xb4, 0x07, 0x0a, 0x0d, 0x41, 0x72, 0x74, 0x69,
	0x66, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x1a, 0x41, 0x52, 0x54,
	0x49, 0x46, 0x41, 0x43, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50,
	0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4d, 0x41,
	0x47, 0x45, 0x5f, 0x5a, 0x49, 0x50, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x45, 0x53, 0x54,
	0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10,
	0x02, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x55, 0x54, 0x4f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x46, 0x49,
	0x4c, 0x45, 0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x41, 0x53, 0x54, 0x5f, 0x46, 0x49,
	0x4c, 0x45, 0x53, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x49, 0x4e, 0x4e, 0x45, 0x44, 0x5f,
	0x47, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x53, 0x10, 0x05, 0x12, 0x0c,
	0x0a, 0x08, 0x46, 0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b,
	0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x4c, 0x4f, 0x47, 0x53, 0x10, 0x07, 0x12, 0x13, 0x0a,
	0x0f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x4f, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47,
	0x10, 0x08, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54,
	0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x41, 0x52, 0x43, 0x48,
	0x49, 0x56, 0x45, 0x53, 0x10, 0x0a, 0x12, 0x24, 0x0a, 0x20, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49,
	0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x4c, 0x4c, 0x56, 0x4d,
	0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x0b, 0x12, 0x22, 0x0a, 0x1e,
	0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f,
	0x4c, 0x4c, 0x56, 0x4d, 0x5f, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x0c,
	0x12, 0x1e, 0x0a, 0x1a, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x4e, 0x47,
	0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x0d,
	0x12, 0x1c, 0x0a, 0x18, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x4c,
	0x4c, 0x56, 0x4d, 0x5f, 0x50, 0x47, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x0e, 0x12, 0x29,
	0x0a, 0x25, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52,
	0x4f, 0x4d, 0x45, 0x5f, 0x42, 0x45, 0x4e, 0x43, 0x48, 0x4d, 0x41, 0x52, 0x4b, 0x5f, 0x41, 0x46,
	0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x0f, 0x12, 0x27, 0x0a, 0x23, 0x56, 0x45, 0x52,
	0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x42, 0x45, 0x4e,
	0x43, 0x48, 0x4d, 0x41, 0x52, 0x4b, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45,
	0x10, 0x10, 0x12, 0x21, 0x0a, 0x1d, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x4b,
	0x45, 0x52, 0x4e, 0x45, 0x4c, 0x5f, 0x43, 0x57, 0x50, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46,
	0x49, 0x4c, 0x45, 0x10, 0x11, 0x12, 0x23, 0x0a, 0x1f, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46,
	0x49, 0x45, 0x44, 0x5f, 0x4b, 0x45, 0x52, 0x4e, 0x45, 0x4c, 0x5f, 0x43, 0x57, 0x50, 0x5f, 0x41,
	0x46, 0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x12, 0x12, 0x23, 0x0a, 0x1f, 0x55, 0x4e,
	0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f,
	0x43, 0x57, 0x50, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x13, 0x12,
	0x21, 0x0a, 0x1d, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x43, 0x48, 0x52, 0x4f,
	0x4d, 0x45, 0x5f, 0x43, 0x57, 0x50, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45,
	0x10, 0x14, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x52,
	0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x41, 0x46, 0x44, 0x4f, 0x5f, 0x46, 0x49, 0x4c, 0x45,
	0x10, 0x15, 0x12, 0x29, 0x0a, 0x25, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44,
	0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x42, 0x45, 0x4e, 0x43, 0x48, 0x4d, 0x41, 0x52,
	0x4b, 0x5f, 0x50, 0x45, 0x52, 0x46, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x16, 0x12, 0x17, 0x0a,
	0x13, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x42, 0x49,
	0x4e, 0x41, 0x52, 0x59, 0x10, 0x17, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x4f, 0x4f, 0x4c, 0x43, 0x48,
	0x41, 0x49, 0x4e, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x4f, 0x47, 0x53,
	0x10, 0x18, 0x12, 0x29, 0x0a, 0x25, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x5f, 0x41, 0x46, 0x44,
	0x4f, 0x5f, 0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x41, 0x4e,
	0x44, 0x52, 0x4f, 0x49, 0x44, 0x5f, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x10, 0x19, 0x12, 0x19, 0x0a,
	0x15, 0x43, 0x4c, 0x41, 0x4e, 0x47, 0x5f, 0x43, 0x52, 0x41, 0x53, 0x48, 0x5f, 0x44, 0x49, 0x41,
	0x47, 0x4e, 0x4f, 0x53, 0x45, 0x53, 0x10, 0x1a, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x50, 0x4d, 0x43,
	0x55, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x54, 0x45, 0x53, 0x54, 0x53, 0x10, 0x1b, 0x12, 0x0f, 0x0a,
	0x0b, 0x47, 0x43, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x42, 0x41, 0x4c, 0x4c, 0x10, 0x1c, 0x12, 0x17,
	0x0a, 0x13, 0x43, 0x4f, 0x4d, 0x50, 0x49, 0x4c, 0x45, 0x52, 0x5f, 0x52, 0x55, 0x53, 0x41, 0x47,
	0x45, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x1d, 0x12, 0x14, 0x0a, 0x10, 0x46, 0x49, 0x52, 0x4d, 0x57,
	0x41, 0x52, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x42, 0x41, 0x4c, 0x4c, 0x10, 0x1e, 0x12, 0x19, 0x0a,
	0x15, 0x46, 0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x54, 0x41, 0x52, 0x42, 0x41, 0x4c,
	0x4c, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x1f, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x42, 0x55,
	0x47, 0x5f, 0x53, 0x59, 0x4d, 0x42, 0x4f, 0x4c, 0x53, 0x10, 0x20, 0x12, 0x11, 0x0a, 0x0d, 0x46,
	0x49, 0x52, 0x4d, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x4c, 0x43, 0x4f, 0x56, 0x10, 0x21, 0x1a, 0x24,
	0x0a, 0x06, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65,
	0x72, 0x6e, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65,
	0x72, 0x6e, 0x61, 0x6c, 0x1a, 0xd0, 0x0a, 0x0a, 0x05, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x30,
	0x0a, 0x09, 0x75, 0x73, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0b, 0x32, 0x13, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x55,
	0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x08, 0x75, 0x73, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73,
	0x12, 0x57, 0x0a, 0x0f, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x66,
	0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x61,
	0x67, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x0e, 0x70, 0x6f, 0x72, 0x74, 0x61,
	0x67, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x70, 0x70,
	0x6c, 0x79, 0x5f, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
	0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x47, 0x65,
	0x72, 0x72, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x5b, 0x0a, 0x11, 0x70,
	0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x46,
	0x6f, 0x72, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65,
	0x46, 0x6f, 0x72, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x48, 0x0a, 0x0a, 0x73, 0x64, 0x6b, 0x5f,
	0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65,
	0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x53, 0x64,
	0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x09, 0x73, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61,
	0x74, 0x65, 0x12, 0x5d, 0x0a, 0x11, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x6f,
	0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64,
	0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x49,
	0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52,
	0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69,
	0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72,
	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x49, 0x6e, 0x73,
	0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x0f, 0x69, 0x6e,
	0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x4e, 0x0a,
	0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x0f, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73,
	0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x1a, 0x2a, 0x0a,
	0x0e, 0x50, 0x6f, 0x72, 0x74, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12,
	0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x65, 0x0a, 0x0f, 0x50, 0x72, 0x65,
	0x70, 0x61, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x52, 0x0a, 0x0f,
	0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x6f, 0x73, 0x2e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x46, 0x6f, 0x72, 0x42, 0x75, 0x69,
	0x6c, 0x64, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x67, 0x73,
	0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x72, 0x67, 0x73,
	0x1a, 0x32, 0x0a, 0x09, 0x53, 0x64, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a,
	0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x53, 0x6f,
	0x75, 0x72, 0x63, 0x65, 0x1a, 0x39, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54,
	0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70,
	0x69, 0x6c, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a,
	0x9a, 0x02, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x5f, 0x73,
	0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6f, 0x6d,
	0x70, 0x69, 0x6c, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x75,
	0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65,
	0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52,
	0x07, 0x72, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49,
	0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x21, 0x0a,
	0x0c, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x67, 0x6f, 0x6d, 0x61, 0x18, 0x04, 0x20,
	0x01, 0x28, 0x08, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x6f, 0x6d, 0x61,
	0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x0c,
	0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x1a, 0xa6, 0x01, 0x0a,
	0x0b, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x0b,
	0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
	0x0e, 0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x49,
	0x6d, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x54,
	0x79, 0x70, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x1b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f,
	0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x64, 0x69, 0x73, 0x61, 0x62,
	0x6c, 0x65, 0x52, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x6c, 0x61, 0x79,
	0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x6b, 0x4c,
	0x61, 0x79, 0x6f, 0x75, 0x74, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x07, 0x10,
	0x0c, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x1a, 0xc4, 0x02, 0x0a, 0x09, 0x55, 0x6e, 0x69, 0x74,
	0x54, 0x65, 0x73, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65,
	0x5f, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61,
	0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x70, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x65,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
	0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x2e, 0x52, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x65, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x73, 0x52, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x70, 0x74,
	0x79, 0x5f, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x0c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x33, 0x0a,
	0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67,
	0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69,
	0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73,
	0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x46,
	0x0a, 0x07, 0x52, 0x75, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x55, 0x4e,
	0x5f, 0x53, 0x50, 0x45, 0x43, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
	0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x5f, 0x52, 0x55, 0x4e, 0x10, 0x01, 0x12,
	0x07, 0x0a, 0x03, 0x52, 0x55, 0x4e, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x55, 0x4e, 0x5f,
	0x45, 0x58, 0x49, 0x54, 0x10, 0x03, 0x22, 0x60, 0x0a, 0x0c, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64,
	0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44,
	0x45, 0x4e, 0x43, 0x49, 0x45, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
	0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x4c, 0x4c, 0x5f, 0x44, 0x45, 0x50, 0x45,
	0x4e, 0x44, 0x45, 0x4e, 0x43, 0x49, 0x45, 0x53, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x4c,
	0x5f, 0x41, 0x46, 0x46, 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x50, 0x45, 0x4e, 0x44,
	0x45, 0x4e, 0x43, 0x49, 0x45, 0x53, 0x10, 0x02, 0x22, 0x54, 0x0a, 0x0e, 0x42, 0x75, 0x69, 0x6c,
	0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x62, 0x75,
	0x69, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x42, 0x36,
	0x5a, 0x34, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72,
	0x67, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66,
	0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_chromiumos_builder_config_proto_rawDescOnce sync.Once
	file_chromiumos_builder_config_proto_rawDescData = file_chromiumos_builder_config_proto_rawDesc
)

func file_chromiumos_builder_config_proto_rawDescGZIP() []byte {
	file_chromiumos_builder_config_proto_rawDescOnce.Do(func() {
		file_chromiumos_builder_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromiumos_builder_config_proto_rawDescData)
	})
	return file_chromiumos_builder_config_proto_rawDescData
}

var file_chromiumos_builder_config_proto_enumTypes = make([]protoimpl.EnumInfo, 9)
var file_chromiumos_builder_config_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_chromiumos_builder_config_proto_goTypes = []interface{}{
	(BuilderConfig_RunSpec)(0),                                // 0: chromiumos.BuilderConfig.RunSpec
	(BuilderConfig_Dependencies)(0),                           // 1: chromiumos.BuilderConfig.Dependencies
	(BuilderConfig_Id_Type)(0),                                // 2: chromiumos.BuilderConfig.Id.Type
	(BuilderConfig_General_Environment)(0),                    // 3: chromiumos.BuilderConfig.General.Environment
	(BuilderConfig_General_Manifest)(0),                       // 4: chromiumos.BuilderConfig.General.Manifest
	(BuilderConfig_General_RunWhen_Mode)(0),                   // 5: chromiumos.BuilderConfig.General.RunWhen.Mode
	(BuilderConfig_Orchestrator_ChildSpec_CollectHandling)(0), // 6: chromiumos.BuilderConfig.Orchestrator.ChildSpec.CollectHandling
	(BuilderConfig_Artifacts_Prebuilts)(0),                    // 7: chromiumos.BuilderConfig.Artifacts.Prebuilts
	(BuilderConfig_Artifacts_ArtifactTypes)(0),                // 8: chromiumos.BuilderConfig.Artifacts.ArtifactTypes
	(*BuilderConfig)(nil),                                     // 9: chromiumos.BuilderConfig
	(*BuilderConfigs)(nil),                                    // 10: chromiumos.BuilderConfigs
	(*BuilderConfig_Id)(nil),                                  // 11: chromiumos.BuilderConfig.Id
	(*BuilderConfig_General)(nil),                             // 12: chromiumos.BuilderConfig.General
	(*BuilderConfig_Orchestrator)(nil),                        // 13: chromiumos.BuilderConfig.Orchestrator
	(*BuilderConfig_Artifacts)(nil),                           // 14: chromiumos.BuilderConfig.Artifacts
	(*BuilderConfig_Chrome)(nil),                              // 15: chromiumos.BuilderConfig.Chrome
	(*BuilderConfig_Build)(nil),                               // 16: chromiumos.BuilderConfig.Build
	(*BuilderConfig_UnitTests)(nil),                           // 17: chromiumos.BuilderConfig.UnitTests
	(*BuilderConfig_General_RunWhen)(nil),                     // 18: chromiumos.BuilderConfig.General.RunWhen
	(*BuilderConfig_Orchestrator_ChildSpec)(nil),              // 19: chromiumos.BuilderConfig.Orchestrator.ChildSpec
	(*BuilderConfig_Orchestrator_FollowOnOrchestrator)(nil),   // 20: chromiumos.BuilderConfig.Orchestrator.FollowOnOrchestrator
	(*BuilderConfig_Artifacts_PublishInfo)(nil),               // 21: chromiumos.BuilderConfig.Artifacts.PublishInfo
	(*BuilderConfig_Artifacts_InputArtifactInfo)(nil),         // 22: chromiumos.BuilderConfig.Artifacts.InputArtifactInfo
	(*BuilderConfig_Build_PortageProfile)(nil),                // 23: chromiumos.BuilderConfig.Build.PortageProfile
	(*BuilderConfig_Build_PrepareForBuild)(nil),               // 24: chromiumos.BuilderConfig.Build.PrepareForBuild
	(*BuilderConfig_Build_SdkUpdate)(nil),                     // 25: chromiumos.BuilderConfig.Build.SdkUpdate
	(*BuilderConfig_Build_InstallToolchain)(nil),              // 26: chromiumos.BuilderConfig.Build.InstallToolchain
	(*BuilderConfig_Build_InstallPackages)(nil),               // 27: chromiumos.BuilderConfig.Build.InstallPackages
	(*BuilderConfig_Build_BuildImages)(nil),                   // 28: chromiumos.BuilderConfig.Build.BuildImages
	(*wrappers.BoolValue)(nil),                                // 29: google.protobuf.BoolValue
	(*timestamp.Timestamp)(nil),                               // 30: google.protobuf.Timestamp
	(FwLocation)(0),                                           // 31: chromiumos.FwLocation
	(*GitilesCommit)(nil),                                     // 32: chromiumos.GitilesCommit
	(*GerritChange)(nil),                                      // 33: chromiumos.GerritChange
	(*ArtifactProfileInfo)(nil),                               // 34: chromiumos.ArtifactProfileInfo
	(*ArtifactsByService)(nil),                                // 35: chromiumos.ArtifactsByService
	(*UseFlag)(nil),                                           // 36: chromiumos.UseFlag
	(*PackageInfo)(nil),                                       // 37: chromiumos.PackageInfo
	(*PrepareForBuildAdditionalArgs)(nil),                     // 38: chromiumos.PrepareForBuildAdditionalArgs
	(ImageType)(0),                                            // 39: chromiumos.ImageType
}
var file_chromiumos_builder_config_proto_depIdxs = []int32{
	11, // 0: chromiumos.BuilderConfig.id:type_name -> chromiumos.BuilderConfig.Id
	12, // 1: chromiumos.BuilderConfig.general:type_name -> chromiumos.BuilderConfig.General
	13, // 2: chromiumos.BuilderConfig.orchestrator:type_name -> chromiumos.BuilderConfig.Orchestrator
	14, // 3: chromiumos.BuilderConfig.artifacts:type_name -> chromiumos.BuilderConfig.Artifacts
	15, // 4: chromiumos.BuilderConfig.chrome:type_name -> chromiumos.BuilderConfig.Chrome
	16, // 5: chromiumos.BuilderConfig.build:type_name -> chromiumos.BuilderConfig.Build
	17, // 6: chromiumos.BuilderConfig.unit_tests:type_name -> chromiumos.BuilderConfig.UnitTests
	9,  // 7: chromiumos.BuilderConfigs.builder_configs:type_name -> chromiumos.BuilderConfig
	2,  // 8: chromiumos.BuilderConfig.Id.type:type_name -> chromiumos.BuilderConfig.Id.Type
	29, // 9: chromiumos.BuilderConfig.General.critical:type_name -> google.protobuf.BoolValue
	3,  // 10: chromiumos.BuilderConfig.General.environment:type_name -> chromiumos.BuilderConfig.General.Environment
	18, // 11: chromiumos.BuilderConfig.General.run_when:type_name -> chromiumos.BuilderConfig.General.RunWhen
	30, // 12: chromiumos.BuilderConfig.General.broken_before:type_name -> google.protobuf.Timestamp
	4,  // 13: chromiumos.BuilderConfig.General.manifest:type_name -> chromiumos.BuilderConfig.General.Manifest
	31, // 14: chromiumos.BuilderConfig.General.firmware_location:type_name -> chromiumos.FwLocation
	19, // 15: chromiumos.BuilderConfig.Orchestrator.child_specs:type_name -> chromiumos.BuilderConfig.Orchestrator.ChildSpec
	32, // 16: chromiumos.BuilderConfig.Orchestrator.gitiles_commit:type_name -> chromiumos.GitilesCommit
	33, // 17: chromiumos.BuilderConfig.Orchestrator.gerrit_changes:type_name -> chromiumos.GerritChange
	20, // 18: chromiumos.BuilderConfig.Orchestrator.follow_on_orchestrator:type_name -> chromiumos.BuilderConfig.Orchestrator.FollowOnOrchestrator
	7,  // 19: chromiumos.BuilderConfig.Artifacts.prebuilts:type_name -> chromiumos.BuilderConfig.Artifacts.Prebuilts
	8,  // 20: chromiumos.BuilderConfig.Artifacts.artifact_types:type_name -> chromiumos.BuilderConfig.Artifacts.ArtifactTypes
	21, // 21: chromiumos.BuilderConfig.Artifacts.publish_artifacts:type_name -> chromiumos.BuilderConfig.Artifacts.PublishInfo
	22, // 22: chromiumos.BuilderConfig.Artifacts.input_artifacts:type_name -> chromiumos.BuilderConfig.Artifacts.InputArtifactInfo
	34, // 23: chromiumos.BuilderConfig.Artifacts.artifact_profile_info:type_name -> chromiumos.ArtifactProfileInfo
	35, // 24: chromiumos.BuilderConfig.Artifacts.artifacts_info:type_name -> chromiumos.ArtifactsByService
	36, // 25: chromiumos.BuilderConfig.Build.use_flags:type_name -> chromiumos.UseFlag
	23, // 26: chromiumos.BuilderConfig.Build.portage_profile:type_name -> chromiumos.BuilderConfig.Build.PortageProfile
	24, // 27: chromiumos.BuilderConfig.Build.prepare_for_build:type_name -> chromiumos.BuilderConfig.Build.PrepareForBuild
	25, // 28: chromiumos.BuilderConfig.Build.sdk_update:type_name -> chromiumos.BuilderConfig.Build.SdkUpdate
	26, // 29: chromiumos.BuilderConfig.Build.install_toolchain:type_name -> chromiumos.BuilderConfig.Build.InstallToolchain
	27, // 30: chromiumos.BuilderConfig.Build.install_packages:type_name -> chromiumos.BuilderConfig.Build.InstallPackages
	28, // 31: chromiumos.BuilderConfig.Build.build_images:type_name -> chromiumos.BuilderConfig.Build.BuildImages
	37, // 32: chromiumos.BuilderConfig.UnitTests.package_blacklist:type_name -> chromiumos.PackageInfo
	0,  // 33: chromiumos.BuilderConfig.UnitTests.ebuilds_run_spec:type_name -> chromiumos.BuilderConfig.RunSpec
	37, // 34: chromiumos.BuilderConfig.UnitTests.packages:type_name -> chromiumos.PackageInfo
	1,  // 35: chromiumos.BuilderConfig.UnitTests.dependencies:type_name -> chromiumos.BuilderConfig.Dependencies
	5,  // 36: chromiumos.BuilderConfig.General.RunWhen.mode:type_name -> chromiumos.BuilderConfig.General.RunWhen.Mode
	6,  // 37: chromiumos.BuilderConfig.Orchestrator.ChildSpec.collect_handling:type_name -> chromiumos.BuilderConfig.Orchestrator.ChildSpec.CollectHandling
	8,  // 38: chromiumos.BuilderConfig.Artifacts.PublishInfo.publish_types:type_name -> chromiumos.BuilderConfig.Artifacts.ArtifactTypes
	8,  // 39: chromiumos.BuilderConfig.Artifacts.InputArtifactInfo.input_artifact_type:type_name -> chromiumos.BuilderConfig.Artifacts.ArtifactTypes
	38, // 40: chromiumos.BuilderConfig.Build.PrepareForBuild.additional_args:type_name -> chromiumos.PrepareForBuildAdditionalArgs
	0,  // 41: chromiumos.BuilderConfig.Build.InstallPackages.run_spec:type_name -> chromiumos.BuilderConfig.RunSpec
	37, // 42: chromiumos.BuilderConfig.Build.InstallPackages.packages:type_name -> chromiumos.PackageInfo
	1,  // 43: chromiumos.BuilderConfig.Build.InstallPackages.dependencies:type_name -> chromiumos.BuilderConfig.Dependencies
	39, // 44: chromiumos.BuilderConfig.Build.BuildImages.image_types:type_name -> chromiumos.ImageType
	45, // [45:45] is the sub-list for method output_type
	45, // [45:45] is the sub-list for method input_type
	45, // [45:45] is the sub-list for extension type_name
	45, // [45:45] is the sub-list for extension extendee
	0,  // [0:45] is the sub-list for field type_name
}

func init() { file_chromiumos_builder_config_proto_init() }
func file_chromiumos_builder_config_proto_init() {
	if File_chromiumos_builder_config_proto != nil {
		return
	}
	file_chromiumos_common_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_chromiumos_builder_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfigs); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Id); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_General); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Orchestrator); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Artifacts); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Chrome); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Build); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_UnitTests); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_General_RunWhen); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Orchestrator_ChildSpec); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Orchestrator_FollowOnOrchestrator); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Artifacts_PublishInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Artifacts_InputArtifactInfo); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Build_PortageProfile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Build_PrepareForBuild); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Build_SdkUpdate); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Build_InstallToolchain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Build_InstallPackages); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromiumos_builder_config_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuilderConfig_Build_BuildImages); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_chromiumos_builder_config_proto_rawDesc,
			NumEnums:      9,
			NumMessages:   20,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_chromiumos_builder_config_proto_goTypes,
		DependencyIndexes: file_chromiumos_builder_config_proto_depIdxs,
		EnumInfos:         file_chromiumos_builder_config_proto_enumTypes,
		MessageInfos:      file_chromiumos_builder_config_proto_msgTypes,
	}.Build()
	File_chromiumos_builder_config_proto = out.File
	file_chromiumos_builder_config_proto_rawDesc = nil
	file_chromiumos_builder_config_proto_goTypes = nil
	file_chromiumos_builder_config_proto_depIdxs = nil
}
