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

package api

import (
	chromiumos "go.chromium.org/chromiumos/infra/proto/go/chromiumos"
	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)
)

// Sysroot information.
type Sysroot struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Sysroot location.
	Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"`
	// The build target used to create the sysroot.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,2,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
}

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

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

func (*Sysroot) ProtoMessage() {}

func (x *Sysroot) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 Sysroot.ProtoReflect.Descriptor instead.
func (*Sysroot) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{0}
}

func (x *Sysroot) GetPath() string {
	if x != nil {
		return x.Path
	}
	return ""
}

func (x *Sysroot) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

// Information about the sysroot's profile.
// TODO(crbug/1088059): Finish migrating this to chromiumos.Profile.
type Profile struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the profile.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}

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

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

func (*Profile) ProtoMessage() {}

func (x *Profile) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 Profile.ProtoReflect.Descriptor instead.
func (*Profile) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{1}
}

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

// Sysroot create request.
type SysrootCreateRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The target whose sysroot is being created.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// The sysroot create flags.
	Flags *SysrootCreateRequest_Flags `protobuf:"bytes,2,opt,name=flags,proto3" json:"flags,omitempty"`
	// The profile to select for the sysroot.
	Profile *Profile `protobuf:"bytes,3,opt,name=profile,proto3" json:"profile,omitempty"`
	// The chroot to use to execute the endpoint.
	Chroot *chromiumos.Chroot `protobuf:"bytes,4,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// Package index files available for use.  Added in R86.
	PackageIndexes []*chromiumos.PackageIndexInfo `protobuf:"bytes,5,rep,name=package_indexes,json=packageIndexes,proto3" json:"package_indexes,omitempty"`
}

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

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

func (*SysrootCreateRequest) ProtoMessage() {}

func (x *SysrootCreateRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 SysrootCreateRequest.ProtoReflect.Descriptor instead.
func (*SysrootCreateRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{2}
}

func (x *SysrootCreateRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

func (x *SysrootCreateRequest) GetFlags() *SysrootCreateRequest_Flags {
	if x != nil {
		return x.Flags
	}
	return nil
}

func (x *SysrootCreateRequest) GetProfile() *Profile {
	if x != nil {
		return x.Profile
	}
	return nil
}

func (x *SysrootCreateRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

func (x *SysrootCreateRequest) GetPackageIndexes() []*chromiumos.PackageIndexInfo {
	if x != nil {
		return x.PackageIndexes
	}
	return nil
}

// Create response.
type SysrootCreateResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Information about the created sysroot. This sysroot can be passed directly
	// to the InstallToolchainRequest.
	Sysroot *Sysroot `protobuf:"bytes,1,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
}

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

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

func (*SysrootCreateResponse) ProtoMessage() {}

func (x *SysrootCreateResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 SysrootCreateResponse.ProtoReflect.Descriptor instead.
func (*SysrootCreateResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{3}
}

func (x *SysrootCreateResponse) GetSysroot() *Sysroot {
	if x != nil {
		return x.Sysroot
	}
	return nil
}

// Sysroot generate archive request.
type SysrootGenerateArchiveRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The target whose sysroot is being created.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// The chroot to use to execute the endpoint.
	Chroot *chromiumos.Chroot `protobuf:"bytes,2,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// Packages to generate the sysroot for, such as 'virtual/target-fuzzers'.
	// This is passed in based on the informaitonal builder type, see
	// chromite/config/chromeos_config.py for examples.
	Packages []*chromiumos.PackageInfo `protobuf:"bytes,3,rep,name=packages,proto3" json:"packages,omitempty"`
	// Target directory for the sysroot tarball.
	TargetDir *chromiumos.ResultPath `protobuf:"bytes,4,opt,name=target_dir,json=targetDir,proto3" json:"target_dir,omitempty"`
}

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

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

func (*SysrootGenerateArchiveRequest) ProtoMessage() {}

func (x *SysrootGenerateArchiveRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 SysrootGenerateArchiveRequest.ProtoReflect.Descriptor instead.
func (*SysrootGenerateArchiveRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{4}
}

func (x *SysrootGenerateArchiveRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

func (x *SysrootGenerateArchiveRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

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

func (x *SysrootGenerateArchiveRequest) GetTargetDir() *chromiumos.ResultPath {
	if x != nil {
		return x.TargetDir
	}
	return nil
}

// Generate archive response.
type SysrootGenerateArchiveResponse struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Path where the sysroot tarball is written.
	SysrootArchive *chromiumos.Path `protobuf:"bytes,1,opt,name=sysroot_archive,json=sysrootArchive,proto3" json:"sysroot_archive,omitempty"`
}

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

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

func (*SysrootGenerateArchiveResponse) ProtoMessage() {}

func (x *SysrootGenerateArchiveResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 SysrootGenerateArchiveResponse.ProtoReflect.Descriptor instead.
func (*SysrootGenerateArchiveResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{5}
}

func (x *SysrootGenerateArchiveResponse) GetSysrootArchive() *chromiumos.Path {
	if x != nil {
		return x.SysrootArchive
	}
	return nil
}

// Request to install the toolchain into the sysroot.
type InstallToolchainRequest struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The sysroot where the toolchain is being installed.
	// The path and build_target are required.
	Sysroot *Sysroot `protobuf:"bytes,1,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
	// The flags for the install.
	Flags *InstallToolchainRequest_Flags `protobuf:"bytes,2,opt,name=flags,proto3" json:"flags,omitempty"`
	// The chroot to use to execute the endpoint.
	Chroot *chromiumos.Chroot `protobuf:"bytes,3,opt,name=chroot,proto3" json:"chroot,omitempty"`
}

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

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

func (*InstallToolchainRequest) ProtoMessage() {}

func (x *InstallToolchainRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 InstallToolchainRequest.ProtoReflect.Descriptor instead.
func (*InstallToolchainRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{6}
}

func (x *InstallToolchainRequest) GetSysroot() *Sysroot {
	if x != nil {
		return x.Sysroot
	}
	return nil
}

func (x *InstallToolchainRequest) GetFlags() *InstallToolchainRequest_Flags {
	if x != nil {
		return x.Flags
	}
	return nil
}

func (x *InstallToolchainRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

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

	// The packages that failed to install. Will populate at least the category
	// and package fields for any failed packages.
	FailedPackages []*chromiumos.PackageInfo `protobuf:"bytes,1,rep,name=failed_packages,json=failedPackages,proto3" json:"failed_packages,omitempty"`
}

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

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

func (*InstallToolchainResponse) ProtoMessage() {}

func (x *InstallToolchainResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 InstallToolchainResponse.ProtoReflect.Descriptor instead.
func (*InstallToolchainResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{7}
}

func (x *InstallToolchainResponse) GetFailedPackages() []*chromiumos.PackageInfo {
	if x != nil {
		return x.FailedPackages
	}
	return nil
}

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

	// The sysroot into which the packages are being installed.
	// The path and build target are required.
	Sysroot *Sysroot `protobuf:"bytes,1,opt,name=sysroot,proto3" json:"sysroot,omitempty"`
	// The install packages flags.
	Flags *InstallPackagesRequest_Flags `protobuf:"bytes,2,opt,name=flags,proto3" json:"flags,omitempty"`
	// Optional.
	// A list of specific package atoms to install. Will generate
	// the list of packages for the build target if none are
	// specified. The version of the packages is ignored if provided.
	Packages []*chromiumos.PackageInfo `protobuf:"bytes,3,rep,name=packages,proto3" json:"packages,omitempty"`
	// The chroot to use to execute the endpoint.
	Chroot *chromiumos.Chroot `protobuf:"bytes,4,opt,name=chroot,proto3" json:"chroot,omitempty"`
	// USE flags to set before building the packages.
	UseFlags []*chromiumos.UseFlag `protobuf:"bytes,5,rep,name=use_flags,json=useFlags,proto3" json:"use_flags,omitempty"`
	// Goma Config.
	GomaConfig *chromiumos.GomaConfig `protobuf:"bytes,6,opt,name=goma_config,json=gomaConfig,proto3" json:"goma_config,omitempty"`
	// Package index files available for use.
	PackageIndexes []*chromiumos.PackageIndexInfo `protobuf:"bytes,7,rep,name=package_indexes,json=packageIndexes,proto3" json:"package_indexes,omitempty"`
}

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

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

func (*InstallPackagesRequest) ProtoMessage() {}

func (x *InstallPackagesRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 InstallPackagesRequest.ProtoReflect.Descriptor instead.
func (*InstallPackagesRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{8}
}

func (x *InstallPackagesRequest) GetSysroot() *Sysroot {
	if x != nil {
		return x.Sysroot
	}
	return nil
}

func (x *InstallPackagesRequest) GetFlags() *InstallPackagesRequest_Flags {
	if x != nil {
		return x.Flags
	}
	return nil
}

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

func (x *InstallPackagesRequest) GetChroot() *chromiumos.Chroot {
	if x != nil {
		return x.Chroot
	}
	return nil
}

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

func (x *InstallPackagesRequest) GetGomaConfig() *chromiumos.GomaConfig {
	if x != nil {
		return x.GomaConfig
	}
	return nil
}

func (x *InstallPackagesRequest) GetPackageIndexes() []*chromiumos.PackageIndexInfo {
	if x != nil {
		return x.PackageIndexes
	}
	return nil
}

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

	// The packages that failed to install. Will populate at least the category
	// and package fields for any failed packages.
	FailedPackages []*chromiumos.PackageInfo `protobuf:"bytes,1,rep,name=failed_packages,json=failedPackages,proto3" json:"failed_packages,omitempty"`
	// The metric events that occurred during the running of InstallPackages.
	Events []*chromiumos.MetricEvent `protobuf:"bytes,2,rep,name=events,proto3" json:"events,omitempty"`
	// Goma artifacts will only be populated if
	// InstallPackagesRequest.goma_config.log_dir was not empty.
	GomaArtifacts *chromiumos.GomaArtifacts `protobuf:"bytes,3,opt,name=goma_artifacts,json=gomaArtifacts,proto3" json:"goma_artifacts,omitempty"`
}

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

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

func (*InstallPackagesResponse) ProtoMessage() {}

func (x *InstallPackagesResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 InstallPackagesResponse.ProtoReflect.Descriptor instead.
func (*InstallPackagesResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{9}
}

func (x *InstallPackagesResponse) GetFailedPackages() []*chromiumos.PackageInfo {
	if x != nil {
		return x.FailedPackages
	}
	return nil
}

func (x *InstallPackagesResponse) GetEvents() []*chromiumos.MetricEvent {
	if x != nil {
		return x.Events
	}
	return nil
}

func (x *InstallPackagesResponse) GetGomaArtifacts() *chromiumos.GomaArtifacts {
	if x != nil {
		return x.GomaArtifacts
	}
	return nil
}

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

	// The board that is the build_target for the created sysroot.
	BuildTarget *chromiumos.BuildTarget `protobuf:"bytes,1,opt,name=build_target,json=buildTarget,proto3" json:"build_target,omitempty"`
	// Additional environment flags which are set via the ENV VAR 'USE'.
	UseFlags []string `protobuf:"bytes,2,rep,name=use_flags,json=useFlags,proto3" json:"use_flags,omitempty"`
	// Target directory for the sysroot tarball.
	TargetDir *chromiumos.ResultPath `protobuf:"bytes,3,opt,name=target_dir,json=targetDir,proto3" json:"target_dir,omitempty"`
}

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

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

func (*CreateSimpleChromeSysrootRequest) ProtoMessage() {}

func (x *CreateSimpleChromeSysrootRequest) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 CreateSimpleChromeSysrootRequest.ProtoReflect.Descriptor instead.
func (*CreateSimpleChromeSysrootRequest) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{10}
}

func (x *CreateSimpleChromeSysrootRequest) GetBuildTarget() *chromiumos.BuildTarget {
	if x != nil {
		return x.BuildTarget
	}
	return nil
}

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

func (x *CreateSimpleChromeSysrootRequest) GetTargetDir() *chromiumos.ResultPath {
	if x != nil {
		return x.TargetDir
	}
	return nil
}

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

	// Path where the sysroot tarball is written.
	SysrootArchive *chromiumos.Path `protobuf:"bytes,1,opt,name=sysroot_archive,json=sysrootArchive,proto3" json:"sysroot_archive,omitempty"`
}

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

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

func (*CreateSimpleChromeSysrootResponse) ProtoMessage() {}

func (x *CreateSimpleChromeSysrootResponse) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 CreateSimpleChromeSysrootResponse.ProtoReflect.Descriptor instead.
func (*CreateSimpleChromeSysrootResponse) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{11}
}

func (x *CreateSimpleChromeSysrootResponse) GetSysrootArchive() *chromiumos.Path {
	if x != nil {
		return x.SysrootArchive
	}
	return nil
}

// The Create flags.
type SysrootCreateRequest_Flags struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Triggers an update of the chroot unless the it is declared as current.
	ChrootCurrent bool `protobuf:"varint,1,opt,name=chroot_current,json=chrootCurrent,proto3" json:"chroot_current,omitempty"`
	// Replace the existing sysroot when one already exists when set to true,
	// otherwise keep the existing sysroot. No effect when the sysroot does not
	// exist.
	Replace bool `protobuf:"varint,2,opt,name=replace,proto3" json:"replace,omitempty"`
	// Whether a toolchain change has occurred.
	ToolchainChanged bool `protobuf:"varint,3,opt,name=toolchain_changed,json=toolchainChanged,proto3" json:"toolchain_changed,omitempty"`
}

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

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

func (*SysrootCreateRequest_Flags) ProtoMessage() {}

func (x *SysrootCreateRequest_Flags) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 SysrootCreateRequest_Flags.ProtoReflect.Descriptor instead.
func (*SysrootCreateRequest_Flags) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{2, 0}
}

func (x *SysrootCreateRequest_Flags) GetChrootCurrent() bool {
	if x != nil {
		return x.ChrootCurrent
	}
	return false
}

func (x *SysrootCreateRequest_Flags) GetReplace() bool {
	if x != nil {
		return x.Replace
	}
	return false
}

func (x *SysrootCreateRequest_Flags) GetToolchainChanged() bool {
	if x != nil {
		return x.ToolchainChanged
	}
	return false
}

// The install toolchain flags.
type InstallToolchainRequest_Flags struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Compile from source (true), or use bin packages (false).
	CompileSource bool `protobuf:"varint,1,opt,name=compile_source,json=compileSource,proto3" json:"compile_source,omitempty"`
	// Whether a toolchain change has occurred.
	ToolchainChanged bool `protobuf:"varint,2,opt,name=toolchain_changed,json=toolchainChanged,proto3" json:"toolchain_changed,omitempty"`
}

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

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

func (*InstallToolchainRequest_Flags) ProtoMessage() {}

func (x *InstallToolchainRequest_Flags) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 InstallToolchainRequest_Flags.ProtoReflect.Descriptor instead.
func (*InstallToolchainRequest_Flags) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{6, 0}
}

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

func (x *InstallToolchainRequest_Flags) GetToolchainChanged() bool {
	if x != nil {
		return x.ToolchainChanged
	}
	return false
}

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

	// Compile from source (true), or use bin packages (false).
	CompileSource bool `protobuf:"varint,1,opt,name=compile_source,json=compileSource,proto3" json:"compile_source,omitempty"`
	// Whether to start goma.
	UseGoma bool `protobuf:"varint,3,opt,name=use_goma,json=useGoma,proto3" json:"use_goma,omitempty"`
	// Whether a toolchain change has occurred.
	ToolchainChanged bool `protobuf:"varint,4,opt,name=toolchain_changed,json=toolchainChanged,proto3" json:"toolchain_changed,omitempty"`
}

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

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

func (*InstallPackagesRequest_Flags) ProtoMessage() {}

func (x *InstallPackagesRequest_Flags) ProtoReflect() protoreflect.Message {
	mi := &file_chromite_api_sysroot_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 InstallPackagesRequest_Flags.ProtoReflect.Descriptor instead.
func (*InstallPackagesRequest_Flags) Descriptor() ([]byte, []int) {
	return file_chromite_api_sysroot_proto_rawDescGZIP(), []int{8, 0}
}

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

func (x *InstallPackagesRequest_Flags) GetUseGoma() bool {
	if x != nil {
		return x.UseGoma
	}
	return false
}

func (x *InstallPackagesRequest_Flags) GetToolchainChanged() bool {
	if x != nil {
		return x.ToolchainChanged
	}
	return false
}

var File_chromite_api_sysroot_proto protoreflect.FileDescriptor

var file_chromite_api_sysroot_proto_rawDesc = []byte{
	0x0a, 0x1a, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73,
	0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61,
	0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 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, 0x18, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2f, 0x6d, 0x65,
	0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x59, 0x0a, 0x07, 0x53,
	0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x3a, 0x0a, 0x0c, 0x62, 0x75,
	0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75,
	0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64,
	0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x1d, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
	0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xad, 0x03, 0x0a, 0x14, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f,
	0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a,
	0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f,
	0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x66, 0x6c,
	0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74,
	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6c,
	0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x72,
	0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69,
	0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x63,
	0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52,
	0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x45, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x1c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61,
	0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e,
	0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x1a, 0x75,
	0x0a, 0x05, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x68, 0x72, 0x6f, 0x6f,
	0x74, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x0d, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x18,
	0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52,
	0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x6f, 0x6f, 0x6c,
	0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x08, 0x52, 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68,
	0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x48, 0x0a, 0x15, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74,
	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f,
	0x0a, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53,
	0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x22,
	0xf3, 0x01, 0x0a, 0x1d, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72,
	0x61, 0x74, 0x65, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65,
	0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69,
	0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
	0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x2a, 0x0a,
	0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
	0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f,
	0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 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, 0x35,
	0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x74, 0x68, 0x52, 0x09, 0x74, 0x61, 0x72, 0x67,
	0x65, 0x74, 0x44, 0x69, 0x72, 0x22, 0x5b, 0x0a, 0x1e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74,
	0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52,
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0f, 0x73, 0x79, 0x73, 0x72, 0x6f,
	0x6f, 0x74, 0x5f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61,
	0x74, 0x68, 0x52, 0x0e, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69,
	0x76, 0x65, 0x22, 0x96, 0x02, 0x0a, 0x17, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54, 0x6f,
	0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f,
	0x0a, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53,
	0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x12,
	0x41, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b,
	0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e,
	0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65,
	0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x05, 0x66, 0x6c, 0x61,
	0x67, 0x73, 0x12, 0x2a, 0x0a, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e,
	0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x1a, 0x5b,
	0x0a, 0x05, 0x46, 0x6c, 0x61, 0x67, 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, 0x2b,
	0x0a, 0x11, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e,
	0x67, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x63,
	0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x5c, 0x0a, 0x18, 0x49,
	0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52,
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x65,
	0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 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, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x65,
	0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x22, 0xa9, 0x04, 0x0a, 0x16, 0x49, 0x6e,
	0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71,
	0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65,
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x07, 0x73, 0x79,
	0x73, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x40, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x73,
	0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 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, 0x2a, 0x0a, 0x06,
	0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x43, 0x68, 0x72, 0x6f, 0x6f, 0x74,
	0x52, 0x06, 0x63, 0x68, 0x72, 0x6f, 0x6f, 0x74, 0x12, 0x30, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x5f,
	0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x05, 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, 0x37, 0x0a, 0x0b, 0x67, 0x6f,
	0x6d, 0x61, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x6f, 0x6d,
	0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x67, 0x6f, 0x6d, 0x61, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x5f, 0x69,
	0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67,
	0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x1a, 0x88, 0x01, 0x0a, 0x05, 0x46,
	0x6c, 0x61, 0x67, 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, 0x19, 0x0a, 0x08, 0x75,
	0x73, 0x65, 0x5f, 0x67, 0x6f, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x75,
	0x73, 0x65, 0x47, 0x6f, 0x6d, 0x61, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68,
	0x61, 0x69, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x10, 0x74, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x68, 0x61, 0x6e,
	0x67, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74,
	0x5f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0xce, 0x01, 0x0a, 0x17, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c,
	0x6c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
	0x65, 0x12, 0x40, 0x0a, 0x0f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 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, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61,
	0x67, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73,
	0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76,
	0x65, 0x6e, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x67, 0x6f, 0x6d, 0x61, 0x5f, 0x61, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x47, 0x6f, 0x6d, 0x61, 0x41, 0x72,
	0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x0d, 0x67, 0x6f, 0x6d, 0x61, 0x41, 0x72, 0x74,
	0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74,
	0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x53, 0x79, 0x73,
	0x72, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x62,
	0x75, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x17, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x42,
	0x75, 0x69, 0x6c, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x5f, 0x66,
	0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x46,
	0x6c, 0x61, 0x67, 0x73, 0x12, 0x35, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x64,
	0x69, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x74, 0x68,
	0x52, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x44, 0x69, 0x72, 0x22, 0x5e, 0x0a, 0x21, 0x43,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x68, 0x72, 0x6f, 0x6d,
	0x65, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x12, 0x39, 0x0a, 0x0f, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x61, 0x72, 0x63, 0x68,
	0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x6f, 0x73, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0e, 0x73, 0x79, 0x73,
	0x72, 0x6f, 0x6f, 0x74, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x32, 0xa3, 0x04, 0x0a, 0x0e,
	0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51,
	0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d,
	0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x43,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63,
	0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x79, 0x73, 0x72,
	0x6f, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
	0x65, 0x12, 0x6c, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x41, 0x72, 0x63,
	0x68, 0x69, 0x76, 0x65, 0x12, 0x2b, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e,
	0x61, 0x70, 0x69, 0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72,
	0x61, 0x74, 0x65, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
	0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69,
	0x2e, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,
	0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
	0x61, 0x0a, 0x10, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68,
	0x61, 0x69, 0x6e, 0x12, 0x25, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61,
	0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68,
	0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x68, 0x72,
	0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c,
	0x6c, 0x54, 0x6f, 0x6f, 0x6c, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
	0x73, 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63,
	0x6b, 0x61, 0x67, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65,
	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b,
	0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x68,
	0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61,
	0x6c, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
	0x73, 0x65, 0x12, 0x7c, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6d, 0x70,
	0x6c, 0x65, 0x43, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x12,
	0x2e, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x68, 0x72, 0x6f, 0x6d,
	0x65, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
	0x2f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x74, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
	0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x68, 0x72, 0x6f, 0x6d,
	0x65, 0x53, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
	0x1a, 0x0f, 0xc2, 0xed, 0x1a, 0x0b, 0x0a, 0x07, 0x73, 0x79, 0x73, 0x72, 0x6f, 0x6f, 0x74, 0x10,
	0x01, 0x42, 0x38, 0x5a, 0x36, 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, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x33,
}

var (
	file_chromite_api_sysroot_proto_rawDescOnce sync.Once
	file_chromite_api_sysroot_proto_rawDescData = file_chromite_api_sysroot_proto_rawDesc
)

func file_chromite_api_sysroot_proto_rawDescGZIP() []byte {
	file_chromite_api_sysroot_proto_rawDescOnce.Do(func() {
		file_chromite_api_sysroot_proto_rawDescData = protoimpl.X.CompressGZIP(file_chromite_api_sysroot_proto_rawDescData)
	})
	return file_chromite_api_sysroot_proto_rawDescData
}

var file_chromite_api_sysroot_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
var file_chromite_api_sysroot_proto_goTypes = []interface{}{
	(*Sysroot)(nil),                           // 0: chromite.api.Sysroot
	(*Profile)(nil),                           // 1: chromite.api.Profile
	(*SysrootCreateRequest)(nil),              // 2: chromite.api.SysrootCreateRequest
	(*SysrootCreateResponse)(nil),             // 3: chromite.api.SysrootCreateResponse
	(*SysrootGenerateArchiveRequest)(nil),     // 4: chromite.api.SysrootGenerateArchiveRequest
	(*SysrootGenerateArchiveResponse)(nil),    // 5: chromite.api.SysrootGenerateArchiveResponse
	(*InstallToolchainRequest)(nil),           // 6: chromite.api.InstallToolchainRequest
	(*InstallToolchainResponse)(nil),          // 7: chromite.api.InstallToolchainResponse
	(*InstallPackagesRequest)(nil),            // 8: chromite.api.InstallPackagesRequest
	(*InstallPackagesResponse)(nil),           // 9: chromite.api.InstallPackagesResponse
	(*CreateSimpleChromeSysrootRequest)(nil),  // 10: chromite.api.CreateSimpleChromeSysrootRequest
	(*CreateSimpleChromeSysrootResponse)(nil), // 11: chromite.api.CreateSimpleChromeSysrootResponse
	(*SysrootCreateRequest_Flags)(nil),        // 12: chromite.api.SysrootCreateRequest.Flags
	(*InstallToolchainRequest_Flags)(nil),     // 13: chromite.api.InstallToolchainRequest.Flags
	(*InstallPackagesRequest_Flags)(nil),      // 14: chromite.api.InstallPackagesRequest.Flags
	(*chromiumos.BuildTarget)(nil),            // 15: chromiumos.BuildTarget
	(*chromiumos.Chroot)(nil),                 // 16: chromiumos.Chroot
	(*chromiumos.PackageIndexInfo)(nil),       // 17: chromiumos.PackageIndexInfo
	(*chromiumos.PackageInfo)(nil),            // 18: chromiumos.PackageInfo
	(*chromiumos.ResultPath)(nil),             // 19: chromiumos.ResultPath
	(*chromiumos.Path)(nil),                   // 20: chromiumos.Path
	(*chromiumos.UseFlag)(nil),                // 21: chromiumos.UseFlag
	(*chromiumos.GomaConfig)(nil),             // 22: chromiumos.GomaConfig
	(*chromiumos.MetricEvent)(nil),            // 23: chromiumos.MetricEvent
	(*chromiumos.GomaArtifacts)(nil),          // 24: chromiumos.GomaArtifacts
}
var file_chromite_api_sysroot_proto_depIdxs = []int32{
	15, // 0: chromite.api.Sysroot.build_target:type_name -> chromiumos.BuildTarget
	15, // 1: chromite.api.SysrootCreateRequest.build_target:type_name -> chromiumos.BuildTarget
	12, // 2: chromite.api.SysrootCreateRequest.flags:type_name -> chromite.api.SysrootCreateRequest.Flags
	1,  // 3: chromite.api.SysrootCreateRequest.profile:type_name -> chromite.api.Profile
	16, // 4: chromite.api.SysrootCreateRequest.chroot:type_name -> chromiumos.Chroot
	17, // 5: chromite.api.SysrootCreateRequest.package_indexes:type_name -> chromiumos.PackageIndexInfo
	0,  // 6: chromite.api.SysrootCreateResponse.sysroot:type_name -> chromite.api.Sysroot
	15, // 7: chromite.api.SysrootGenerateArchiveRequest.build_target:type_name -> chromiumos.BuildTarget
	16, // 8: chromite.api.SysrootGenerateArchiveRequest.chroot:type_name -> chromiumos.Chroot
	18, // 9: chromite.api.SysrootGenerateArchiveRequest.packages:type_name -> chromiumos.PackageInfo
	19, // 10: chromite.api.SysrootGenerateArchiveRequest.target_dir:type_name -> chromiumos.ResultPath
	20, // 11: chromite.api.SysrootGenerateArchiveResponse.sysroot_archive:type_name -> chromiumos.Path
	0,  // 12: chromite.api.InstallToolchainRequest.sysroot:type_name -> chromite.api.Sysroot
	13, // 13: chromite.api.InstallToolchainRequest.flags:type_name -> chromite.api.InstallToolchainRequest.Flags
	16, // 14: chromite.api.InstallToolchainRequest.chroot:type_name -> chromiumos.Chroot
	18, // 15: chromite.api.InstallToolchainResponse.failed_packages:type_name -> chromiumos.PackageInfo
	0,  // 16: chromite.api.InstallPackagesRequest.sysroot:type_name -> chromite.api.Sysroot
	14, // 17: chromite.api.InstallPackagesRequest.flags:type_name -> chromite.api.InstallPackagesRequest.Flags
	18, // 18: chromite.api.InstallPackagesRequest.packages:type_name -> chromiumos.PackageInfo
	16, // 19: chromite.api.InstallPackagesRequest.chroot:type_name -> chromiumos.Chroot
	21, // 20: chromite.api.InstallPackagesRequest.use_flags:type_name -> chromiumos.UseFlag
	22, // 21: chromite.api.InstallPackagesRequest.goma_config:type_name -> chromiumos.GomaConfig
	17, // 22: chromite.api.InstallPackagesRequest.package_indexes:type_name -> chromiumos.PackageIndexInfo
	18, // 23: chromite.api.InstallPackagesResponse.failed_packages:type_name -> chromiumos.PackageInfo
	23, // 24: chromite.api.InstallPackagesResponse.events:type_name -> chromiumos.MetricEvent
	24, // 25: chromite.api.InstallPackagesResponse.goma_artifacts:type_name -> chromiumos.GomaArtifacts
	15, // 26: chromite.api.CreateSimpleChromeSysrootRequest.build_target:type_name -> chromiumos.BuildTarget
	19, // 27: chromite.api.CreateSimpleChromeSysrootRequest.target_dir:type_name -> chromiumos.ResultPath
	20, // 28: chromite.api.CreateSimpleChromeSysrootResponse.sysroot_archive:type_name -> chromiumos.Path
	2,  // 29: chromite.api.SysrootService.Create:input_type -> chromite.api.SysrootCreateRequest
	4,  // 30: chromite.api.SysrootService.GenerateArchive:input_type -> chromite.api.SysrootGenerateArchiveRequest
	6,  // 31: chromite.api.SysrootService.InstallToolchain:input_type -> chromite.api.InstallToolchainRequest
	8,  // 32: chromite.api.SysrootService.InstallPackages:input_type -> chromite.api.InstallPackagesRequest
	10, // 33: chromite.api.SysrootService.CreateSimpleChromeSysroot:input_type -> chromite.api.CreateSimpleChromeSysrootRequest
	3,  // 34: chromite.api.SysrootService.Create:output_type -> chromite.api.SysrootCreateResponse
	5,  // 35: chromite.api.SysrootService.GenerateArchive:output_type -> chromite.api.SysrootGenerateArchiveResponse
	7,  // 36: chromite.api.SysrootService.InstallToolchain:output_type -> chromite.api.InstallToolchainResponse
	9,  // 37: chromite.api.SysrootService.InstallPackages:output_type -> chromite.api.InstallPackagesResponse
	11, // 38: chromite.api.SysrootService.CreateSimpleChromeSysroot:output_type -> chromite.api.CreateSimpleChromeSysrootResponse
	34, // [34:39] is the sub-list for method output_type
	29, // [29:34] is the sub-list for method input_type
	29, // [29:29] is the sub-list for extension type_name
	29, // [29:29] is the sub-list for extension extendee
	0,  // [0:29] is the sub-list for field type_name
}

func init() { file_chromite_api_sysroot_proto_init() }
func file_chromite_api_sysroot_proto_init() {
	if File_chromite_api_sysroot_proto != nil {
		return
	}
	file_chromite_api_build_api_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_chromite_api_sysroot_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Sysroot); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Profile); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SysrootCreateRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SysrootCreateResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SysrootGenerateArchiveRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SysrootGenerateArchiveResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InstallToolchainRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InstallToolchainResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InstallPackagesRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InstallPackagesResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateSimpleChromeSysrootRequest); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CreateSimpleChromeSysrootResponse); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SysrootCreateRequest_Flags); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InstallToolchainRequest_Flags); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_chromite_api_sysroot_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InstallPackagesRequest_Flags); 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_chromite_api_sysroot_proto_rawDesc,
			NumEnums:      0,
			NumMessages:   15,
			NumExtensions: 0,
			NumServices:   1,
		},
		GoTypes:           file_chromite_api_sysroot_proto_goTypes,
		DependencyIndexes: file_chromite_api_sysroot_proto_depIdxs,
		MessageInfos:      file_chromite_api_sysroot_proto_msgTypes,
	}.Build()
	File_chromite_api_sysroot_proto = out.File
	file_chromite_api_sysroot_proto_rawDesc = nil
	file_chromite_api_sysroot_proto_goTypes = nil
	file_chromite_api_sysroot_proto_depIdxs = nil
}
