// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.28.0
// 	protoc        v3.3.0
// source: config.proto

package config

import (
	reflect "reflect"
	sync "sync"

	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)

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)
)

// PreUploadStep lists the known pre-upload steps which may be run before roll
// CLs are uploaded. These must be kept in sync with
// go/repo_manager/parent/pre_upload_steps.go.
type PreUploadStep int32

const (
	PreUploadStep_ANGLE_CODE_GENERATION               PreUploadStep = 0
	PreUploadStep_ANGLE_GN_TO_BP                      PreUploadStep = 1
	PreUploadStep_ANGLE_ROLL_CHROMIUM                 PreUploadStep = 2
	PreUploadStep_GO_GENERATE_CIPD                    PreUploadStep = 3
	PreUploadStep_FLUTTER_LICENSE_SCRIPTS             PreUploadStep = 4
	PreUploadStep_FLUTTER_LICENSE_SCRIPTS_FOR_DART    PreUploadStep = 5
	PreUploadStep_FLUTTER_LICENSE_SCRIPTS_FOR_FUCHSIA PreUploadStep = 6
	PreUploadStep_SKIA_GN_TO_BP                       PreUploadStep = 7
	PreUploadStep_TRAIN_INFRA                         PreUploadStep = 8
	PreUploadStep_UPDATE_FLUTTER_DEPS_FOR_DART        PreUploadStep = 9
	PreUploadStep_VULKAN_DEPS_UPDATE_COMMIT_MESSAGE   PreUploadStep = 10
	PreUploadStep_UPDATE_BORINGSSL                    PreUploadStep = 11
	PreUploadStep_CHROMIUM_ROLL_WEBGPU_CTS            PreUploadStep = 12
)

// Enum value maps for PreUploadStep.
var (
	PreUploadStep_name = map[int32]string{
		0:  "ANGLE_CODE_GENERATION",
		1:  "ANGLE_GN_TO_BP",
		2:  "ANGLE_ROLL_CHROMIUM",
		3:  "GO_GENERATE_CIPD",
		4:  "FLUTTER_LICENSE_SCRIPTS",
		5:  "FLUTTER_LICENSE_SCRIPTS_FOR_DART",
		6:  "FLUTTER_LICENSE_SCRIPTS_FOR_FUCHSIA",
		7:  "SKIA_GN_TO_BP",
		8:  "TRAIN_INFRA",
		9:  "UPDATE_FLUTTER_DEPS_FOR_DART",
		10: "VULKAN_DEPS_UPDATE_COMMIT_MESSAGE",
		11: "UPDATE_BORINGSSL",
		12: "CHROMIUM_ROLL_WEBGPU_CTS",
	}
	PreUploadStep_value = map[string]int32{
		"ANGLE_CODE_GENERATION":               0,
		"ANGLE_GN_TO_BP":                      1,
		"ANGLE_ROLL_CHROMIUM":                 2,
		"GO_GENERATE_CIPD":                    3,
		"FLUTTER_LICENSE_SCRIPTS":             4,
		"FLUTTER_LICENSE_SCRIPTS_FOR_DART":    5,
		"FLUTTER_LICENSE_SCRIPTS_FOR_FUCHSIA": 6,
		"SKIA_GN_TO_BP":                       7,
		"TRAIN_INFRA":                         8,
		"UPDATE_FLUTTER_DEPS_FOR_DART":        9,
		"VULKAN_DEPS_UPDATE_COMMIT_MESSAGE":   10,
		"UPDATE_BORINGSSL":                    11,
		"CHROMIUM_ROLL_WEBGPU_CTS":            12,
	}
)

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

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

func (PreUploadStep) Descriptor() protoreflect.EnumDescriptor {
	return file_config_proto_enumTypes[0].Descriptor()
}

func (PreUploadStep) Type() protoreflect.EnumType {
	return &file_config_proto_enumTypes[0]
}

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

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

// BuiltIn lists the built-in commit message templates.
type CommitMsgConfig_BuiltIn int32

const (
	// DEFAULT is the default commit message template.
	CommitMsgConfig_DEFAULT CommitMsgConfig_BuiltIn = 0
	// ANDROID is the commit message template used for Android rollers.
	CommitMsgConfig_ANDROID CommitMsgConfig_BuiltIn = 1
	// ANDROID_NO_CR is the commit message template used for Android rollers
	// where the service account does not have CR+2 access.
	CommitMsgConfig_ANDROID_NO_CR CommitMsgConfig_BuiltIn = 2
	// CANARY is the commit message template used for canary rolls.
	CommitMsgConfig_CANARY CommitMsgConfig_BuiltIn = 3
)

// Enum value maps for CommitMsgConfig_BuiltIn.
var (
	CommitMsgConfig_BuiltIn_name = map[int32]string{
		0: "DEFAULT",
		1: "ANDROID",
		2: "ANDROID_NO_CR",
		3: "CANARY",
	}
	CommitMsgConfig_BuiltIn_value = map[string]int32{
		"DEFAULT":       0,
		"ANDROID":       1,
		"ANDROID_NO_CR": 2,
		"CANARY":        3,
	}
)

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

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

func (CommitMsgConfig_BuiltIn) Descriptor() protoreflect.EnumDescriptor {
	return file_config_proto_enumTypes[1].Descriptor()
}

func (CommitMsgConfig_BuiltIn) Type() protoreflect.EnumType {
	return &file_config_proto_enumTypes[1]
}

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

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

// Config lists the built-in Gerrit configs, named for the projects which
// use them.
type GerritConfig_Config int32

const (
	GerritConfig_ANDROID                   GerritConfig_Config = 0
	GerritConfig_ANGLE                     GerritConfig_Config = 1
	GerritConfig_CHROMIUM                  GerritConfig_Config = 2
	GerritConfig_CHROMIUM_NO_CQ            GerritConfig_Config = 3
	GerritConfig_LIBASSISTANT              GerritConfig_Config = 4
	GerritConfig_CHROMIUM_BOT_COMMIT       GerritConfig_Config = 5
	GerritConfig_CHROMIUM_BOT_COMMIT_NO_CQ GerritConfig_Config = 6
	GerritConfig_ANDROID_NO_CR             GerritConfig_Config = 7
	GerritConfig_ANDROID_NO_CR_NO_PR       GerritConfig_Config = 8
	GerritConfig_CHROMIUM_NO_CR            GerritConfig_Config = 9
)

// Enum value maps for GerritConfig_Config.
var (
	GerritConfig_Config_name = map[int32]string{
		0: "ANDROID",
		1: "ANGLE",
		2: "CHROMIUM",
		3: "CHROMIUM_NO_CQ",
		4: "LIBASSISTANT",
		5: "CHROMIUM_BOT_COMMIT",
		6: "CHROMIUM_BOT_COMMIT_NO_CQ",
		7: "ANDROID_NO_CR",
		8: "ANDROID_NO_CR_NO_PR",
		9: "CHROMIUM_NO_CR",
	}
	GerritConfig_Config_value = map[string]int32{
		"ANDROID":                   0,
		"ANGLE":                     1,
		"CHROMIUM":                  2,
		"CHROMIUM_NO_CQ":            3,
		"LIBASSISTANT":              4,
		"CHROMIUM_BOT_COMMIT":       5,
		"CHROMIUM_BOT_COMMIT_NO_CQ": 6,
		"ANDROID_NO_CR":             7,
		"ANDROID_NO_CR_NO_PR":       8,
		"CHROMIUM_NO_CR":            9,
	}
)

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

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

func (GerritConfig_Config) Descriptor() protoreflect.EnumDescriptor {
	return file_config_proto_enumTypes[2].Descriptor()
}

func (GerritConfig_Config) Type() protoreflect.EnumType {
	return &file_config_proto_enumTypes[2]
}

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

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

// LogLevel categorizes messages similarly to log severity.
type NotifierConfig_LogLevel int32

const (
	NotifierConfig_SILENT  NotifierConfig_LogLevel = 0
	NotifierConfig_ERROR   NotifierConfig_LogLevel = 1
	NotifierConfig_WARNING NotifierConfig_LogLevel = 2
	NotifierConfig_INFO    NotifierConfig_LogLevel = 3
	NotifierConfig_DEBUG   NotifierConfig_LogLevel = 4
)

// Enum value maps for NotifierConfig_LogLevel.
var (
	NotifierConfig_LogLevel_name = map[int32]string{
		0: "SILENT",
		1: "ERROR",
		2: "WARNING",
		3: "INFO",
		4: "DEBUG",
	}
	NotifierConfig_LogLevel_value = map[string]int32{
		"SILENT":  0,
		"ERROR":   1,
		"WARNING": 2,
		"INFO":    3,
		"DEBUG":   4,
	}
)

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

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

func (NotifierConfig_LogLevel) Descriptor() protoreflect.EnumDescriptor {
	return file_config_proto_enumTypes[3].Descriptor()
}

func (NotifierConfig_LogLevel) Type() protoreflect.EnumType {
	return &file_config_proto_enumTypes[3]
}

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

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

// MsgType categorizes notifications based on their type.
type NotifierConfig_MsgType int32

const (
	NotifierConfig_ISSUE_UPDATE         NotifierConfig_MsgType = 0
	NotifierConfig_LAST_N_FAILED        NotifierConfig_MsgType = 1
	NotifierConfig_MODE_CHANGE          NotifierConfig_MsgType = 2
	NotifierConfig_NEW_FAILURE          NotifierConfig_MsgType = 3
	NotifierConfig_NEW_SUCCESS          NotifierConfig_MsgType = 4
	NotifierConfig_ROLL_CREATION_FAILED NotifierConfig_MsgType = 5
	NotifierConfig_SAFETY_THROTTLE      NotifierConfig_MsgType = 6
	NotifierConfig_STRATEGY_CHANGE      NotifierConfig_MsgType = 7
	NotifierConfig_SUCCESS_THROTTLE     NotifierConfig_MsgType = 8
)

// Enum value maps for NotifierConfig_MsgType.
var (
	NotifierConfig_MsgType_name = map[int32]string{
		0: "ISSUE_UPDATE",
		1: "LAST_N_FAILED",
		2: "MODE_CHANGE",
		3: "NEW_FAILURE",
		4: "NEW_SUCCESS",
		5: "ROLL_CREATION_FAILED",
		6: "SAFETY_THROTTLE",
		7: "STRATEGY_CHANGE",
		8: "SUCCESS_THROTTLE",
	}
	NotifierConfig_MsgType_value = map[string]int32{
		"ISSUE_UPDATE":         0,
		"LAST_N_FAILED":        1,
		"MODE_CHANGE":          2,
		"NEW_FAILURE":          3,
		"NEW_SUCCESS":          4,
		"ROLL_CREATION_FAILED": 5,
		"SAFETY_THROTTLE":      6,
		"STRATEGY_CHANGE":      7,
		"SUCCESS_THROTTLE":     8,
	}
)

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

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

func (NotifierConfig_MsgType) Descriptor() protoreflect.EnumDescriptor {
	return file_config_proto_enumTypes[4].Descriptor()
}

func (NotifierConfig_MsgType) Type() protoreflect.EnumType {
	return &file_config_proto_enumTypes[4]
}

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

// Deprecated: Use NotifierConfig_MsgType.Descriptor instead.
func (NotifierConfig_MsgType) EnumDescriptor() ([]byte, []int) {
	return file_config_proto_rawDescGZIP(), []int{29, 1}
}

// Config provides configuration for one AutoRoller.
type Config struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// roller_name is the name for this roller. It is used as the unique ID for
	// the roller.
	// TODO(borenet): Use an actual DB-generated ID for the roller.
	RollerName string `protobuf:"bytes,1,opt,name=roller_name,json=rollerName,proto3" json:"roller_name,omitempty"`
	// child_bug_link is a link to file a bug for the child project.
	ChildBugLink string `protobuf:"bytes,29,opt,name=child_bug_link,json=childBugLink,proto3" json:"child_bug_link,omitempty"`
	// child_display_name is the human-readable display name of the child.
	ChildDisplayName string `protobuf:"bytes,2,opt,name=child_display_name,json=childDisplayName,proto3" json:"child_display_name,omitempty"`
	// parent_bug_link is a link to file a bug for the parent project.
	ParentBugLink string `protobuf:"bytes,30,opt,name=parent_bug_link,json=parentBugLink,proto3" json:"parent_bug_link,omitempty"`
	// parent_display_name is the human-readable display name of the parent.
	ParentDisplayName string `protobuf:"bytes,3,opt,name=parent_display_name,json=parentDisplayName,proto3" json:"parent_display_name,omitempty"`
	// parent_waterfall is the URL of the waterfall display of the parent repo.
	ParentWaterfall string `protobuf:"bytes,4,opt,name=parent_waterfall,json=parentWaterfall,proto3" json:"parent_waterfall,omitempty"`
	// owner_primary is the primary owner of this roller.
	OwnerPrimary string `protobuf:"bytes,5,opt,name=owner_primary,json=ownerPrimary,proto3" json:"owner_primary,omitempty"`
	// owner_secondary is the secondary owner of this roller.
	OwnerSecondary string `protobuf:"bytes,6,opt,name=owner_secondary,json=ownerSecondary,proto3" json:"owner_secondary,omitempty"`
	// contacts is a list of email addresses of contacts for this roller, used
	// for sending PSAs, asking questions, etc.
	Contacts []string `protobuf:"bytes,7,rep,name=contacts,proto3" json:"contacts,omitempty"`
	// service_account is the full email address of the service account for this
	// roller.
	ServiceAccount string `protobuf:"bytes,8,opt,name=service_account,json=serviceAccount,proto3" json:"service_account,omitempty"`
	// is_internal indicates whether this roller is internal, ie. only visible
	// to Googlers.
	// TODO(borenet): Is this necessary?
	IsInternal bool `protobuf:"varint,9,opt,name=is_internal,json=isInternal,proto3" json:"is_internal,omitempty"`
	// reviewer are the email addresses to add as reviewers on rolls, or URL(s)
	// from which to obtain those email addresses.
	Reviewer []string `protobuf:"bytes,10,rep,name=reviewer,proto3" json:"reviewer,omitempty"`
	// reviewer_backup are backup email addresses to add as reviewers on rolls,
	// in case obtaining the email addresses from the URL fails. Only required
	// if a URL is specified for the reviewer.
	ReviewerBackup []string `protobuf:"bytes,11,rep,name=reviewer_backup,json=reviewerBackup,proto3" json:"reviewer_backup,omitempty"`
	// roll_cooldown is a period of time after a successful roll attempt during
	// which no new roll attempts will be created. Optional.
	RollCooldown string `protobuf:"bytes,12,opt,name=roll_cooldown,json=rollCooldown,proto3" json:"roll_cooldown,omitempty"`
	// time_window in which the roller is allowed to upload roll CLs. See the
	// go/time_window package for supported format.
	TimeWindow string `protobuf:"bytes,13,opt,name=time_window,json=timeWindow,proto3" json:"time_window,omitempty"`
	// supports_manual_rolls indicates whether this roller supports manual
	// rolls.
	SupportsManualRolls bool `protobuf:"varint,14,opt,name=supports_manual_rolls,json=supportsManualRolls,proto3" json:"supports_manual_rolls,omitempty"`
	// commit_msg provides configuration for the commit message.
	CommitMsg *CommitMsgConfig `protobuf:"bytes,15,opt,name=commit_msg,json=commitMsg,proto3" json:"commit_msg,omitempty"`
	// code_review provides configuration for code review.
	//
	// Types that are assignable to CodeReview:
	//	*Config_Gerrit
	//	*Config_Github
	//	*Config_Google3
	CodeReview isConfig_CodeReview `protobuf_oneof:"code_review"`
	// kubernetes provides configuration for Kubernetes.
	Kubernetes *KubernetesConfig `protobuf:"bytes,19,opt,name=kubernetes,proto3" json:"kubernetes,omitempty"`
	// repo_manager provides configuration for the repo manager.
	//
	// Types that are assignable to RepoManager:
	//	*Config_ParentChildRepoManager
	//	*Config_AndroidRepoManager
	//	*Config_CommandRepoManager
	//	*Config_FreetypeRepoManager
	//	*Config_FuchsiaSdkAndroidRepoManager
	//	*Config_Google3RepoManager
	RepoManager isConfig_RepoManager `protobuf_oneof:"repo_manager"`
	// notifiers configures any extra notifications used by this roller.
	Notifiers []*NotifierConfig `protobuf:"bytes,26,rep,name=notifiers,proto3" json:"notifiers,omitempty"`
	// safety_throttle provides configuration for safety-throttling the roller
	// in case of persistent errors.
	SafetyThrottle *ThrottleConfig `protobuf:"bytes,27,opt,name=safety_throttle,json=safetyThrottle,proto3" json:"safety_throttle,omitempty"`
	// transitive_deps is an optional mapping of dependency ID (eg. repo URL)
	// to the paths within the parent and child repo, respectively, where
	// those dependencies are versioned, eg. "DEPS".
	// TODO(borenet): Where is this used? Why isn't it nested within the repo
	// manager config?
	TransitiveDeps []*TransitiveDepConfig `protobuf:"bytes,28,rep,name=transitive_deps,json=transitiveDeps,proto3" json:"transitive_deps,omitempty"`
	// use_workload_identity indicates whether the roller uses workload
	// identity. See skbug.com/12323
	UseWorkloadIdentity bool `protobuf:"varint,31,opt,name=use_workload_identity,json=useWorkloadIdentity,proto3" json:"use_workload_identity,omitempty"`
}

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

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

func (*Config) ProtoMessage() {}

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

func (x *Config) GetRollerName() string {
	if x != nil {
		return x.RollerName
	}
	return ""
}

func (x *Config) GetChildBugLink() string {
	if x != nil {
		return x.ChildBugLink
	}
	return ""
}

func (x *Config) GetChildDisplayName() string {
	if x != nil {
		return x.ChildDisplayName
	}
	return ""
}

func (x *Config) GetParentBugLink() string {
	if x != nil {
		return x.ParentBugLink
	}
	return ""
}

func (x *Config) GetParentDisplayName() string {
	if x != nil {
		return x.ParentDisplayName
	}
	return ""
}

func (x *Config) GetParentWaterfall() string {
	if x != nil {
		return x.ParentWaterfall
	}
	return ""
}

func (x *Config) GetOwnerPrimary() string {
	if x != nil {
		return x.OwnerPrimary
	}
	return ""
}

func (x *Config) GetOwnerSecondary() string {
	if x != nil {
		return x.OwnerSecondary
	}
	return ""
}

func (x *Config) GetContacts() []string {
	if x != nil {
		return x.Contacts
	}
	return nil
}

func (x *Config) GetServiceAccount() string {
	if x != nil {
		return x.ServiceAccount
	}
	return ""
}

func (x *Config) GetIsInternal() bool {
	if x != nil {
		return x.IsInternal
	}
	return false
}

func (x *Config) GetReviewer() []string {
	if x != nil {
		return x.Reviewer
	}
	return nil
}

func (x *Config) GetReviewerBackup() []string {
	if x != nil {
		return x.ReviewerBackup
	}
	return nil
}

func (x *Config) GetRollCooldown() string {
	if x != nil {
		return x.RollCooldown
	}
	return ""
}

func (x *Config) GetTimeWindow() string {
	if x != nil {
		return x.TimeWindow
	}
	return ""
}

func (x *Config) GetSupportsManualRolls() bool {
	if x != nil {
		return x.SupportsManualRolls
	}
	return false
}

func (x *Config) GetCommitMsg() *CommitMsgConfig {
	if x != nil {
		return x.CommitMsg
	}
	return nil
}

func (m *Config) GetCodeReview() isConfig_CodeReview {
	if m != nil {
		return m.CodeReview
	}
	return nil
}

func (x *Config) GetGerrit() *GerritConfig {
	if x, ok := x.GetCodeReview().(*Config_Gerrit); ok {
		return x.Gerrit
	}
	return nil
}

func (x *Config) GetGithub() *GitHubConfig {
	if x, ok := x.GetCodeReview().(*Config_Github); ok {
		return x.Github
	}
	return nil
}

func (x *Config) GetGoogle3() *Google3Config {
	if x, ok := x.GetCodeReview().(*Config_Google3); ok {
		return x.Google3
	}
	return nil
}

func (x *Config) GetKubernetes() *KubernetesConfig {
	if x != nil {
		return x.Kubernetes
	}
	return nil
}

func (m *Config) GetRepoManager() isConfig_RepoManager {
	if m != nil {
		return m.RepoManager
	}
	return nil
}

func (x *Config) GetParentChildRepoManager() *ParentChildRepoManagerConfig {
	if x, ok := x.GetRepoManager().(*Config_ParentChildRepoManager); ok {
		return x.ParentChildRepoManager
	}
	return nil
}

func (x *Config) GetAndroidRepoManager() *AndroidRepoManagerConfig {
	if x, ok := x.GetRepoManager().(*Config_AndroidRepoManager); ok {
		return x.AndroidRepoManager
	}
	return nil
}

func (x *Config) GetCommandRepoManager() *CommandRepoManagerConfig {
	if x, ok := x.GetRepoManager().(*Config_CommandRepoManager); ok {
		return x.CommandRepoManager
	}
	return nil
}

func (x *Config) GetFreetypeRepoManager() *FreeTypeRepoManagerConfig {
	if x, ok := x.GetRepoManager().(*Config_FreetypeRepoManager); ok {
		return x.FreetypeRepoManager
	}
	return nil
}

func (x *Config) GetFuchsiaSdkAndroidRepoManager() *FuchsiaSDKAndroidRepoManagerConfig {
	if x, ok := x.GetRepoManager().(*Config_FuchsiaSdkAndroidRepoManager); ok {
		return x.FuchsiaSdkAndroidRepoManager
	}
	return nil
}

func (x *Config) GetGoogle3RepoManager() *Google3RepoManagerConfig {
	if x, ok := x.GetRepoManager().(*Config_Google3RepoManager); ok {
		return x.Google3RepoManager
	}
	return nil
}

func (x *Config) GetNotifiers() []*NotifierConfig {
	if x != nil {
		return x.Notifiers
	}
	return nil
}

func (x *Config) GetSafetyThrottle() *ThrottleConfig {
	if x != nil {
		return x.SafetyThrottle
	}
	return nil
}

func (x *Config) GetTransitiveDeps() []*TransitiveDepConfig {
	if x != nil {
		return x.TransitiveDeps
	}
	return nil
}

func (x *Config) GetUseWorkloadIdentity() bool {
	if x != nil {
		return x.UseWorkloadIdentity
	}
	return false
}

type isConfig_CodeReview interface {
	isConfig_CodeReview()
}

type Config_Gerrit struct {
	// gerrit provides configuration for code review using Gerrit.
	Gerrit *GerritConfig `protobuf:"bytes,16,opt,name=gerrit,proto3,oneof"`
}

type Config_Github struct {
	// github provides configuration for code review using GitHub.
	Github *GitHubConfig `protobuf:"bytes,17,opt,name=github,proto3,oneof"`
}

type Config_Google3 struct {
	// google3 provides configuration for code review using Google3.
	Google3 *Google3Config `protobuf:"bytes,18,opt,name=google3,proto3,oneof"`
}

func (*Config_Gerrit) isConfig_CodeReview() {}

func (*Config_Github) isConfig_CodeReview() {}

func (*Config_Google3) isConfig_CodeReview() {}

type isConfig_RepoManager interface {
	isConfig_RepoManager()
}

type Config_ParentChildRepoManager struct {
	ParentChildRepoManager *ParentChildRepoManagerConfig `protobuf:"bytes,20,opt,name=parent_child_repo_manager,json=parentChildRepoManager,proto3,oneof"`
}

type Config_AndroidRepoManager struct {
	AndroidRepoManager *AndroidRepoManagerConfig `protobuf:"bytes,21,opt,name=android_repo_manager,json=androidRepoManager,proto3,oneof"`
}

type Config_CommandRepoManager struct {
	CommandRepoManager *CommandRepoManagerConfig `protobuf:"bytes,22,opt,name=command_repo_manager,json=commandRepoManager,proto3,oneof"`
}

type Config_FreetypeRepoManager struct {
	FreetypeRepoManager *FreeTypeRepoManagerConfig `protobuf:"bytes,23,opt,name=freetype_repo_manager,json=freetypeRepoManager,proto3,oneof"`
}

type Config_FuchsiaSdkAndroidRepoManager struct {
	FuchsiaSdkAndroidRepoManager *FuchsiaSDKAndroidRepoManagerConfig `protobuf:"bytes,24,opt,name=fuchsia_sdk_android_repo_manager,json=fuchsiaSdkAndroidRepoManager,proto3,oneof"`
}

type Config_Google3RepoManager struct {
	Google3RepoManager *Google3RepoManagerConfig `protobuf:"bytes,25,opt,name=google3_repo_manager,json=google3RepoManager,proto3,oneof"`
}

func (*Config_ParentChildRepoManager) isConfig_RepoManager() {}

func (*Config_AndroidRepoManager) isConfig_RepoManager() {}

func (*Config_CommandRepoManager) isConfig_RepoManager() {}

func (*Config_FreetypeRepoManager) isConfig_RepoManager() {}

func (*Config_FuchsiaSdkAndroidRepoManager) isConfig_RepoManager() {}

func (*Config_Google3RepoManager) isConfig_RepoManager() {}

// CommitMsgConfig provides configuration for commit messages.
type CommitMsgConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// bug_project indicates which project (eg. in Monorail) the bugs attached
	// to various revisions are associated with.  If provided, any "Bug: " lines
	// from revisions in the roll which match the given project name will be
	// included in the roll itself.
	BugProject string `protobuf:"bytes,1,opt,name=bug_project,json=bugProject,proto3" json:"bug_project,omitempty"`
	// child_log_url_tmpl is a template for building log URLs using the IDs of
	// the from- and to-revisions of the child for a given roll.
	ChildLogUrlTmpl string `protobuf:"bytes,2,opt,name=child_log_url_tmpl,json=childLogUrlTmpl,proto3" json:"child_log_url_tmpl,omitempty"`
	// cq_extra_trybots are additional tryjobs to trigger as part of the commit
	// queue for every roll.
	CqExtraTrybots []string `protobuf:"bytes,3,rep,name=cq_extra_trybots,json=cqExtraTrybots,proto3" json:"cq_extra_trybots,omitempty"`
	// cq_do_not_cancel_trybots indicates that the commit queue should not
	// cancel tryjobs from old patch sets when a new patch set is uploaded.
	CqDoNotCancelTrybots bool `protobuf:"varint,4,opt,name=cq_do_not_cancel_trybots,json=cqDoNotCancelTrybots,proto3" json:"cq_do_not_cancel_trybots,omitempty"`
	// include_log indicates whether the list of revisions contained in the roll
	// should be included as part of the commit message.
	IncludeLog bool `protobuf:"varint,5,opt,name=include_log,json=includeLog,proto3" json:"include_log,omitempty"`
	// include_revision_count indicates whether the number of revisions
	// contained in the roll should be included in the subject line of the
	// commit message.
	IncludeRevisionCount bool `protobuf:"varint,6,opt,name=include_revision_count,json=includeRevisionCount,proto3" json:"include_revision_count,omitempty"`
	// include_tbr_line indicates whether the "TBR:" line should be included in
	// the commit message. This is required for some commit queues.
	IncludeTbrLine bool `protobuf:"varint,7,opt,name=include_tbr_line,json=includeTbrLine,proto3" json:"include_tbr_line,omitempty"`
	// include_tests indicates whether the "Test: " lines from the revisions in
	// the roll should be propagated through to the roll itself.
	IncludeTests bool `protobuf:"varint,8,opt,name=include_tests,json=includeTests,proto3" json:"include_tests,omitempty"`
	// extra_footers are any extra footers which should be added to all roll
	// commit messages.
	ExtraFooters []string `protobuf:"bytes,11,rep,name=extra_footers,json=extraFooters,proto3" json:"extra_footers,omitempty"`
	// template specifies exactly how the commit message should be structured.
	// If not specified, the default template is used.
	//
	// Types that are assignable to Template:
	//	*CommitMsgConfig_BuiltIn_
	//	*CommitMsgConfig_Custom
	Template isCommitMsgConfig_Template `protobuf_oneof:"template"`
}

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

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

func (*CommitMsgConfig) ProtoMessage() {}

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

func (x *CommitMsgConfig) GetBugProject() string {
	if x != nil {
		return x.BugProject
	}
	return ""
}

func (x *CommitMsgConfig) GetChildLogUrlTmpl() string {
	if x != nil {
		return x.ChildLogUrlTmpl
	}
	return ""
}

func (x *CommitMsgConfig) GetCqExtraTrybots() []string {
	if x != nil {
		return x.CqExtraTrybots
	}
	return nil
}

func (x *CommitMsgConfig) GetCqDoNotCancelTrybots() bool {
	if x != nil {
		return x.CqDoNotCancelTrybots
	}
	return false
}

func (x *CommitMsgConfig) GetIncludeLog() bool {
	if x != nil {
		return x.IncludeLog
	}
	return false
}

func (x *CommitMsgConfig) GetIncludeRevisionCount() bool {
	if x != nil {
		return x.IncludeRevisionCount
	}
	return false
}

func (x *CommitMsgConfig) GetIncludeTbrLine() bool {
	if x != nil {
		return x.IncludeTbrLine
	}
	return false
}

func (x *CommitMsgConfig) GetIncludeTests() bool {
	if x != nil {
		return x.IncludeTests
	}
	return false
}

func (x *CommitMsgConfig) GetExtraFooters() []string {
	if x != nil {
		return x.ExtraFooters
	}
	return nil
}

func (m *CommitMsgConfig) GetTemplate() isCommitMsgConfig_Template {
	if m != nil {
		return m.Template
	}
	return nil
}

func (x *CommitMsgConfig) GetBuiltIn() CommitMsgConfig_BuiltIn {
	if x, ok := x.GetTemplate().(*CommitMsgConfig_BuiltIn_); ok {
		return x.BuiltIn
	}
	return CommitMsgConfig_DEFAULT
}

func (x *CommitMsgConfig) GetCustom() string {
	if x, ok := x.GetTemplate().(*CommitMsgConfig_Custom); ok {
		return x.Custom
	}
	return ""
}

type isCommitMsgConfig_Template interface {
	isCommitMsgConfig_Template()
}

type CommitMsgConfig_BuiltIn_ struct {
	// built_in is the name of a built-in commit message template.
	BuiltIn CommitMsgConfig_BuiltIn `protobuf:"varint,9,opt,name=built_in,json=builtIn,proto3,enum=autoroll.config.CommitMsgConfig_BuiltIn,oneof"`
}

type CommitMsgConfig_Custom struct {
	// custom is a full custom commit message template string.
	Custom string `protobuf:"bytes,10,opt,name=custom,proto3,oneof"`
}

func (*CommitMsgConfig_BuiltIn_) isCommitMsgConfig_Template() {}

func (*CommitMsgConfig_Custom) isCommitMsgConfig_Template() {}

// GerritConfig provides configuration for code review using Gerrit.
type GerritConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// url of the Gerrit host.
	Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"`
	// project name for uploaded CLs.
	Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"`
	// config indicates the mode of operation used by the Gerrit host, which
	// informs the roller of, for example, which labels to set. See the
	// autoroll/go/codereview package for possible values.
	Config GerritConfig_Config `protobuf:"varint,3,opt,name=config,proto3,enum=autoroll.config.GerritConfig_Config" json:"config,omitempty"`
}

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

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

func (*GerritConfig) ProtoMessage() {}

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

func (x *GerritConfig) GetUrl() string {
	if x != nil {
		return x.Url
	}
	return ""
}

func (x *GerritConfig) GetProject() string {
	if x != nil {
		return x.Project
	}
	return ""
}

func (x *GerritConfig) GetConfig() GerritConfig_Config {
	if x != nil {
		return x.Config
	}
	return GerritConfig_ANDROID
}

// GitHubConfig provides configuration for code review using GitHub.
type GitHubConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// repo_owner is the owner of the GitHub repo.
	RepoOwner string `protobuf:"bytes,1,opt,name=repo_owner,json=repoOwner,proto3" json:"repo_owner,omitempty"`
	// repo_name is the name of the GitHub repo.
	RepoName string `protobuf:"bytes,2,opt,name=repo_name,json=repoName,proto3" json:"repo_name,omitempty"`
	// checks_wait_for indicates which GitHub checks must succeed before a pull
	// request may be merged. If they are failing, we wait for them to succeed
	// (eg. tree-status checks). Note: These checks are ignored during dry runs
	// because the PR is not going to be submitted so the tree-status checks
	// will not be important in that case.
	ChecksWaitFor []string `protobuf:"bytes,3,rep,name=checks_wait_for,json=checksWaitFor,proto3" json:"checks_wait_for,omitempty"`
	// token_secret is the name of the secret containing the auth token used to
	// access the GitHub API.
	TokenSecret string `protobuf:"bytes,4,opt,name=token_secret,json=tokenSecret,proto3" json:"token_secret,omitempty"`
	// ssh_key_secret is the name of the secret containing the SSH key used to
	// access GitHub repos.
	SshKeySecret string `protobuf:"bytes,5,opt,name=ssh_key_secret,json=sshKeySecret,proto3" json:"ssh_key_secret,omitempty"`
}

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

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

func (*GitHubConfig) ProtoMessage() {}

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

func (x *GitHubConfig) GetRepoOwner() string {
	if x != nil {
		return x.RepoOwner
	}
	return ""
}

func (x *GitHubConfig) GetRepoName() string {
	if x != nil {
		return x.RepoName
	}
	return ""
}

func (x *GitHubConfig) GetChecksWaitFor() []string {
	if x != nil {
		return x.ChecksWaitFor
	}
	return nil
}

func (x *GitHubConfig) GetTokenSecret() string {
	if x != nil {
		return x.TokenSecret
	}
	return ""
}

func (x *GitHubConfig) GetSshKeySecret() string {
	if x != nil {
		return x.SshKeySecret
	}
	return ""
}

// Google3Config is an empty configuration object for Google3.
type Google3Config struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*Google3Config) ProtoMessage() {}

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

// KubernetesConfig provides Kubernetes configuration for the autoroll backend
// service for this roller.
type KubernetesConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// cpu is the requested number of CPUs, eg. "250m".
	Cpu string `protobuf:"bytes,1,opt,name=cpu,proto3" json:"cpu,omitempty"`
	// memory is the requested memory, eg. "2Gi".
	Memory string `protobuf:"bytes,2,opt,name=memory,proto3" json:"memory,omitempty"`
	// readiness_failure_threshold indicates how many times the ready check may
	// fail.
	ReadinessFailureThreshold int32 `protobuf:"varint,3,opt,name=readiness_failure_threshold,json=readinessFailureThreshold,proto3" json:"readiness_failure_threshold,omitempty"`
	// readiness_initial_delay_seconds indicates how long to wait before
	// performing the ready check for the first time.
	ReadinessInitialDelaySeconds int32 `protobuf:"varint,4,opt,name=readiness_initial_delay_seconds,json=readinessInitialDelaySeconds,proto3" json:"readiness_initial_delay_seconds,omitempty"`
	// readiness_period_seconds indicates how often to perform the ready check.
	ReadinessPeriodSeconds int32 `protobuf:"varint,5,opt,name=readiness_period_seconds,json=readinessPeriodSeconds,proto3" json:"readiness_period_seconds,omitempty"`
	// disk indicates the size of the requested persistent disk.  If not
	// specified, no persistent disk is used.
	Disk string `protobuf:"bytes,6,opt,name=disk,proto3" json:"disk,omitempty"`
	// image used for the autoroll backend container.
	Image string `protobuf:"bytes,8,opt,name=image,proto3" json:"image,omitempty"`
}

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

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

func (*KubernetesConfig) ProtoMessage() {}

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

func (x *KubernetesConfig) GetCpu() string {
	if x != nil {
		return x.Cpu
	}
	return ""
}

func (x *KubernetesConfig) GetMemory() string {
	if x != nil {
		return x.Memory
	}
	return ""
}

func (x *KubernetesConfig) GetReadinessFailureThreshold() int32 {
	if x != nil {
		return x.ReadinessFailureThreshold
	}
	return 0
}

func (x *KubernetesConfig) GetReadinessInitialDelaySeconds() int32 {
	if x != nil {
		return x.ReadinessInitialDelaySeconds
	}
	return 0
}

func (x *KubernetesConfig) GetReadinessPeriodSeconds() int32 {
	if x != nil {
		return x.ReadinessPeriodSeconds
	}
	return 0
}

func (x *KubernetesConfig) GetDisk() string {
	if x != nil {
		return x.Disk
	}
	return ""
}

func (x *KubernetesConfig) GetImage() string {
	if x != nil {
		return x.Image
	}
	return ""
}

// AndroidRepoManagerConfig provides configuration for a roller which rolls into
// Android.
type AndroidRepoManagerConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// child_repo_url is the URL of the child repo.
	ChildRepoUrl string `protobuf:"bytes,1,opt,name=child_repo_url,json=childRepoUrl,proto3" json:"child_repo_url,omitempty"`
	// child_branch is the Git branch of the child repo to track.
	ChildBranch string `protobuf:"bytes,2,opt,name=child_branch,json=childBranch,proto3" json:"child_branch,omitempty"`
	// child_path is the path to the child repo within the parent.
	ChildPath string `protobuf:"bytes,3,opt,name=child_path,json=childPath,proto3" json:"child_path,omitempty"`
	// parent_repo_url is the URL of the parent repo.
	ParentRepoUrl string `protobuf:"bytes,4,opt,name=parent_repo_url,json=parentRepoUrl,proto3" json:"parent_repo_url,omitempty"`
	// parent_branch is the Git branch of the parent repo to track.
	ParentBranch string `protobuf:"bytes,5,opt,name=parent_branch,json=parentBranch,proto3" json:"parent_branch,omitempty"`
	// child_rev_link_tmpl is a template used to create links to revisions of
	// the child repo. If not supplied, no links will be created.
	ChildRevLinkTmpl string `protobuf:"bytes,6,opt,name=child_rev_link_tmpl,json=childRevLinkTmpl,proto3" json:"child_rev_link_tmpl,omitempty"`
	// child_subdir indicates the subdirectory of the working directory (not the
	// parent repo) in which the child_path should be rooted. In most cases this
	// should be empty, but if child_path is relative to the parent repo dir
	// (eg. when DEPS specifies use_relative_paths), then this is required.
	ChildSubdir string `protobuf:"bytes,7,opt,name=child_subdir,json=childSubdir,proto3" json:"child_subdir,omitempty"`
	// pre_upload_steps are named steps to run before uploading roll CLs.
	PreUploadSteps []PreUploadStep `protobuf:"varint,8,rep,packed,name=pre_upload_steps,json=preUploadSteps,proto3,enum=autoroll.config.PreUploadStep" json:"pre_upload_steps,omitempty"`
	// metadata about the child project which should be updated in a file
	// checked into the parent repo.
	Metadata *AndroidRepoManagerConfig_ProjectMetadataFileConfig `protobuf:"bytes,9,opt,name=metadata,proto3" json:"metadata,omitempty"`
	// include_authors_as_reviewers determines whether the authors of rolled
	// changes should be included as change reviewers.
	IncludeAuthorsAsReviewers bool `protobuf:"varint,10,opt,name=include_authors_as_reviewers,json=includeAuthorsAsReviewers,proto3" json:"include_authors_as_reviewers,omitempty"`
	// pre_upload describes command(s) to run before uploading roll CLs.
	PreUploadCommands *PreUploadConfig `protobuf:"bytes,11,opt,name=pre_upload_commands,json=preUploadCommands,proto3" json:"pre_upload_commands,omitempty"`
	// auto_approver_secret indicates that the roller should use the given
	// secret containing an auto-approver service account key to approve its own
	// changes.
	AutoApproverSecret string `protobuf:"bytes,12,opt,name=auto_approver_secret,json=autoApproverSecret,proto3" json:"auto_approver_secret,omitempty"`
}

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

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

func (*AndroidRepoManagerConfig) ProtoMessage() {}

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

func (x *AndroidRepoManagerConfig) GetChildRepoUrl() string {
	if x != nil {
		return x.ChildRepoUrl
	}
	return ""
}

func (x *AndroidRepoManagerConfig) GetChildBranch() string {
	if x != nil {
		return x.ChildBranch
	}
	return ""
}

func (x *AndroidRepoManagerConfig) GetChildPath() string {
	if x != nil {
		return x.ChildPath
	}
	return ""
}

func (x *AndroidRepoManagerConfig) GetParentRepoUrl() string {
	if x != nil {
		return x.ParentRepoUrl
	}
	return ""
}

func (x *AndroidRepoManagerConfig) GetParentBranch() string {
	if x != nil {
		return x.ParentBranch
	}
	return ""
}

func (x *AndroidRepoManagerConfig) GetChildRevLinkTmpl() string {
	if x != nil {
		return x.ChildRevLinkTmpl
	}
	return ""
}

func (x *AndroidRepoManagerConfig) GetChildSubdir() string {
	if x != nil {
		return x.ChildSubdir
	}
	return ""
}

func (x *AndroidRepoManagerConfig) GetPreUploadSteps() []PreUploadStep {
	if x != nil {
		return x.PreUploadSteps
	}
	return nil
}

func (x *AndroidRepoManagerConfig) GetMetadata() *AndroidRepoManagerConfig_ProjectMetadataFileConfig {
	if x != nil {
		return x.Metadata
	}
	return nil
}

func (x *AndroidRepoManagerConfig) GetIncludeAuthorsAsReviewers() bool {
	if x != nil {
		return x.IncludeAuthorsAsReviewers
	}
	return false
}

func (x *AndroidRepoManagerConfig) GetPreUploadCommands() *PreUploadConfig {
	if x != nil {
		return x.PreUploadCommands
	}
	return nil
}

func (x *AndroidRepoManagerConfig) GetAutoApproverSecret() string {
	if x != nil {
		return x.AutoApproverSecret
	}
	return ""
}

// CommandRepoManagerConfig provides configuration for a roller which runs
// specified commands to perform different functions.
type CommandRepoManagerConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// git_checkout configures the Git checkout of the parent repo.
	GitCheckout *GitCheckoutConfig `protobuf:"bytes,1,opt,name=git_checkout,json=gitCheckout,proto3" json:"git_checkout,omitempty"`
	// short_rev_regex is a regular expression used to shorten revision IDs for
	// display.
	ShortRevRegex string `protobuf:"bytes,2,opt,name=short_rev_regex,json=shortRevRegex,proto3" json:"short_rev_regex,omitempty"`
	// get_tip_rev is a command used to obtain the latest revision of the Child.
	GetTipRev *CommandRepoManagerConfig_CommandConfig `protobuf:"bytes,3,opt,name=get_tip_rev,json=getTipRev,proto3" json:"get_tip_rev,omitempty"`
	// get_pinned_rev is a command used to obtain the currently-pinned revision
	// of the Child.
	GetPinnedRev *CommandRepoManagerConfig_CommandConfig `protobuf:"bytes,4,opt,name=get_pinned_rev,json=getPinnedRev,proto3" json:"get_pinned_rev,omitempty"`
	// set_pinned_rev is a command used to update the currently-pinned revision
	// of the Child.
	SetPinnedRev *CommandRepoManagerConfig_CommandConfig `protobuf:"bytes,5,opt,name=set_pinned_rev,json=setPinnedRev,proto3" json:"set_pinned_rev,omitempty"`
}

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

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

func (*CommandRepoManagerConfig) ProtoMessage() {}

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

func (x *CommandRepoManagerConfig) GetGitCheckout() *GitCheckoutConfig {
	if x != nil {
		return x.GitCheckout
	}
	return nil
}

func (x *CommandRepoManagerConfig) GetShortRevRegex() string {
	if x != nil {
		return x.ShortRevRegex
	}
	return ""
}

func (x *CommandRepoManagerConfig) GetGetTipRev() *CommandRepoManagerConfig_CommandConfig {
	if x != nil {
		return x.GetTipRev
	}
	return nil
}

func (x *CommandRepoManagerConfig) GetGetPinnedRev() *CommandRepoManagerConfig_CommandConfig {
	if x != nil {
		return x.GetPinnedRev
	}
	return nil
}

func (x *CommandRepoManagerConfig) GetSetPinnedRev() *CommandRepoManagerConfig_CommandConfig {
	if x != nil {
		return x.SetPinnedRev
	}
	return nil
}

// FreeTypeRepoManagerConfig provides configuration for the FreeType roller.
type FreeTypeRepoManagerConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Parent *FreeTypeParentConfig `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
	Child  *GitilesChildConfig   `protobuf:"bytes,2,opt,name=child,proto3" json:"child,omitempty"`
}

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

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

func (*FreeTypeRepoManagerConfig) ProtoMessage() {}

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

func (x *FreeTypeRepoManagerConfig) GetParent() *FreeTypeParentConfig {
	if x != nil {
		return x.Parent
	}
	return nil
}

func (x *FreeTypeRepoManagerConfig) GetChild() *GitilesChildConfig {
	if x != nil {
		return x.Child
	}
	return nil
}

// FuchsiaSDKAndroidRepoManagerConfig provides configuration for the Fuchsia SDK
// into Android roller.
type FuchsiaSDKAndroidRepoManagerConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Parent *GitCheckoutParentConfig `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
	Child  *FuchsiaSDKChildConfig   `protobuf:"bytes,2,opt,name=child,proto3" json:"child,omitempty"`
	// gen_sdk_bp_repo is the repo URL for the generation script.
	GenSdkBpRepo string `protobuf:"bytes,3,opt,name=gen_sdk_bp_repo,json=genSdkBpRepo,proto3" json:"gen_sdk_bp_repo,omitempty"`
	// gen_sdk_bp_branch is the branch of the generation script.
	GenSdkBpBranch string `protobuf:"bytes,4,opt,name=gen_sdk_bp_branch,json=genSdkBpBranch,proto3" json:"gen_sdk_bp_branch,omitempty"`
}

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

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

func (*FuchsiaSDKAndroidRepoManagerConfig) ProtoMessage() {}

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

func (x *FuchsiaSDKAndroidRepoManagerConfig) GetParent() *GitCheckoutParentConfig {
	if x != nil {
		return x.Parent
	}
	return nil
}

func (x *FuchsiaSDKAndroidRepoManagerConfig) GetChild() *FuchsiaSDKChildConfig {
	if x != nil {
		return x.Child
	}
	return nil
}

func (x *FuchsiaSDKAndroidRepoManagerConfig) GetGenSdkBpRepo() string {
	if x != nil {
		return x.GenSdkBpRepo
	}
	return ""
}

func (x *FuchsiaSDKAndroidRepoManagerConfig) GetGenSdkBpBranch() string {
	if x != nil {
		return x.GenSdkBpBranch
	}
	return ""
}

// Google3RepoManagerConfig provides configuration for a roller into Google3.
type Google3RepoManagerConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// child_branch is the branch of the child repo to track.
	ChildBranch string `protobuf:"bytes,1,opt,name=child_branch,json=childBranch,proto3" json:"child_branch,omitempty"`
	// child_repo is the URL of the child repo.
	ChildRepo string `protobuf:"bytes,2,opt,name=child_repo,json=childRepo,proto3" json:"child_repo,omitempty"`
}

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

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

func (*Google3RepoManagerConfig) ProtoMessage() {}

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

func (x *Google3RepoManagerConfig) GetChildBranch() string {
	if x != nil {
		return x.ChildBranch
	}
	return ""
}

func (x *Google3RepoManagerConfig) GetChildRepo() string {
	if x != nil {
		return x.ChildRepo
	}
	return ""
}

// ParentChildRepoManagerConfig provides configuration for a roller which
// combines a pre-defined Parent and Child type.
type ParentChildRepoManagerConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// parent is the entity which depends on the child and receives the rolls.
	//
	// Types that are assignable to Parent:
	//	*ParentChildRepoManagerConfig_CopyParent
	//	*ParentChildRepoManagerConfig_DepsLocalGithubParent
	//	*ParentChildRepoManagerConfig_DepsLocalGerritParent
	//	*ParentChildRepoManagerConfig_GitCheckoutGithubFileParent
	//	*ParentChildRepoManagerConfig_GitilesParent
	Parent isParentChildRepoManagerConfig_Parent `protobuf_oneof:"parent"`
	// child is the entity which is depended on by the parent and is rolled.
	//
	// Types that are assignable to Child:
	//	*ParentChildRepoManagerConfig_CipdChild
	//	*ParentChildRepoManagerConfig_FuchsiaSdkChild
	//	*ParentChildRepoManagerConfig_GitCheckoutChild
	//	*ParentChildRepoManagerConfig_GitCheckoutGithubChild
	//	*ParentChildRepoManagerConfig_GitilesChild
	//	*ParentChildRepoManagerConfig_SemverGcsChild
	Child isParentChildRepoManagerConfig_Child `protobuf_oneof:"child"`
	// revision_filter filters out revisions of the child which should not be
	// considered as roll candidates.
	//
	// Types that are assignable to RevisionFilter:
	//	*ParentChildRepoManagerConfig_BuildbucketRevisionFilter
	//	*ParentChildRepoManagerConfig_CipdRevisionFilter
	RevisionFilter isParentChildRepoManagerConfig_RevisionFilter `protobuf_oneof:"revision_filter"`
}

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

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

func (*ParentChildRepoManagerConfig) ProtoMessage() {}

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

func (m *ParentChildRepoManagerConfig) GetParent() isParentChildRepoManagerConfig_Parent {
	if m != nil {
		return m.Parent
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetCopyParent() *CopyParentConfig {
	if x, ok := x.GetParent().(*ParentChildRepoManagerConfig_CopyParent); ok {
		return x.CopyParent
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetDepsLocalGithubParent() *DEPSLocalGitHubParentConfig {
	if x, ok := x.GetParent().(*ParentChildRepoManagerConfig_DepsLocalGithubParent); ok {
		return x.DepsLocalGithubParent
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetDepsLocalGerritParent() *DEPSLocalGerritParentConfig {
	if x, ok := x.GetParent().(*ParentChildRepoManagerConfig_DepsLocalGerritParent); ok {
		return x.DepsLocalGerritParent
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetGitCheckoutGithubFileParent() *GitCheckoutGitHubFileParentConfig {
	if x, ok := x.GetParent().(*ParentChildRepoManagerConfig_GitCheckoutGithubFileParent); ok {
		return x.GitCheckoutGithubFileParent
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetGitilesParent() *GitilesParentConfig {
	if x, ok := x.GetParent().(*ParentChildRepoManagerConfig_GitilesParent); ok {
		return x.GitilesParent
	}
	return nil
}

func (m *ParentChildRepoManagerConfig) GetChild() isParentChildRepoManagerConfig_Child {
	if m != nil {
		return m.Child
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetCipdChild() *CIPDChildConfig {
	if x, ok := x.GetChild().(*ParentChildRepoManagerConfig_CipdChild); ok {
		return x.CipdChild
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetFuchsiaSdkChild() *FuchsiaSDKChildConfig {
	if x, ok := x.GetChild().(*ParentChildRepoManagerConfig_FuchsiaSdkChild); ok {
		return x.FuchsiaSdkChild
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetGitCheckoutChild() *GitCheckoutChildConfig {
	if x, ok := x.GetChild().(*ParentChildRepoManagerConfig_GitCheckoutChild); ok {
		return x.GitCheckoutChild
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetGitCheckoutGithubChild() *GitCheckoutGitHubChildConfig {
	if x, ok := x.GetChild().(*ParentChildRepoManagerConfig_GitCheckoutGithubChild); ok {
		return x.GitCheckoutGithubChild
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetGitilesChild() *GitilesChildConfig {
	if x, ok := x.GetChild().(*ParentChildRepoManagerConfig_GitilesChild); ok {
		return x.GitilesChild
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetSemverGcsChild() *SemVerGCSChildConfig {
	if x, ok := x.GetChild().(*ParentChildRepoManagerConfig_SemverGcsChild); ok {
		return x.SemverGcsChild
	}
	return nil
}

func (m *ParentChildRepoManagerConfig) GetRevisionFilter() isParentChildRepoManagerConfig_RevisionFilter {
	if m != nil {
		return m.RevisionFilter
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetBuildbucketRevisionFilter() *BuildbucketRevisionFilterConfig {
	if x, ok := x.GetRevisionFilter().(*ParentChildRepoManagerConfig_BuildbucketRevisionFilter); ok {
		return x.BuildbucketRevisionFilter
	}
	return nil
}

func (x *ParentChildRepoManagerConfig) GetCipdRevisionFilter() *CIPDRevisionFilterConfig {
	if x, ok := x.GetRevisionFilter().(*ParentChildRepoManagerConfig_CipdRevisionFilter); ok {
		return x.CipdRevisionFilter
	}
	return nil
}

type isParentChildRepoManagerConfig_Parent interface {
	isParentChildRepoManagerConfig_Parent()
}

type ParentChildRepoManagerConfig_CopyParent struct {
	CopyParent *CopyParentConfig `protobuf:"bytes,1,opt,name=copy_parent,json=copyParent,proto3,oneof"`
}

type ParentChildRepoManagerConfig_DepsLocalGithubParent struct {
	DepsLocalGithubParent *DEPSLocalGitHubParentConfig `protobuf:"bytes,2,opt,name=deps_local_github_parent,json=depsLocalGithubParent,proto3,oneof"`
}

type ParentChildRepoManagerConfig_DepsLocalGerritParent struct {
	DepsLocalGerritParent *DEPSLocalGerritParentConfig `protobuf:"bytes,3,opt,name=deps_local_gerrit_parent,json=depsLocalGerritParent,proto3,oneof"`
}

type ParentChildRepoManagerConfig_GitCheckoutGithubFileParent struct {
	GitCheckoutGithubFileParent *GitCheckoutGitHubFileParentConfig `protobuf:"bytes,4,opt,name=git_checkout_github_file_parent,json=gitCheckoutGithubFileParent,proto3,oneof"`
}

type ParentChildRepoManagerConfig_GitilesParent struct {
	GitilesParent *GitilesParentConfig `protobuf:"bytes,5,opt,name=gitiles_parent,json=gitilesParent,proto3,oneof"`
}

func (*ParentChildRepoManagerConfig_CopyParent) isParentChildRepoManagerConfig_Parent() {}

func (*ParentChildRepoManagerConfig_DepsLocalGithubParent) isParentChildRepoManagerConfig_Parent() {}

func (*ParentChildRepoManagerConfig_DepsLocalGerritParent) isParentChildRepoManagerConfig_Parent() {}

func (*ParentChildRepoManagerConfig_GitCheckoutGithubFileParent) isParentChildRepoManagerConfig_Parent() {
}

func (*ParentChildRepoManagerConfig_GitilesParent) isParentChildRepoManagerConfig_Parent() {}

type isParentChildRepoManagerConfig_Child interface {
	isParentChildRepoManagerConfig_Child()
}

type ParentChildRepoManagerConfig_CipdChild struct {
	CipdChild *CIPDChildConfig `protobuf:"bytes,6,opt,name=cipd_child,json=cipdChild,proto3,oneof"`
}

type ParentChildRepoManagerConfig_FuchsiaSdkChild struct {
	FuchsiaSdkChild *FuchsiaSDKChildConfig `protobuf:"bytes,7,opt,name=fuchsia_sdk_child,json=fuchsiaSdkChild,proto3,oneof"`
}

type ParentChildRepoManagerConfig_GitCheckoutChild struct {
	GitCheckoutChild *GitCheckoutChildConfig `protobuf:"bytes,8,opt,name=git_checkout_child,json=gitCheckoutChild,proto3,oneof"`
}

type ParentChildRepoManagerConfig_GitCheckoutGithubChild struct {
	GitCheckoutGithubChild *GitCheckoutGitHubChildConfig `protobuf:"bytes,9,opt,name=git_checkout_github_child,json=gitCheckoutGithubChild,proto3,oneof"`
}

type ParentChildRepoManagerConfig_GitilesChild struct {
	GitilesChild *GitilesChildConfig `protobuf:"bytes,10,opt,name=gitiles_child,json=gitilesChild,proto3,oneof"`
}

type ParentChildRepoManagerConfig_SemverGcsChild struct {
	SemverGcsChild *SemVerGCSChildConfig `protobuf:"bytes,11,opt,name=semver_gcs_child,json=semverGcsChild,proto3,oneof"`
}

func (*ParentChildRepoManagerConfig_CipdChild) isParentChildRepoManagerConfig_Child() {}

func (*ParentChildRepoManagerConfig_FuchsiaSdkChild) isParentChildRepoManagerConfig_Child() {}

func (*ParentChildRepoManagerConfig_GitCheckoutChild) isParentChildRepoManagerConfig_Child() {}

func (*ParentChildRepoManagerConfig_GitCheckoutGithubChild) isParentChildRepoManagerConfig_Child() {}

func (*ParentChildRepoManagerConfig_GitilesChild) isParentChildRepoManagerConfig_Child() {}

func (*ParentChildRepoManagerConfig_SemverGcsChild) isParentChildRepoManagerConfig_Child() {}

type isParentChildRepoManagerConfig_RevisionFilter interface {
	isParentChildRepoManagerConfig_RevisionFilter()
}

type ParentChildRepoManagerConfig_BuildbucketRevisionFilter struct {
	BuildbucketRevisionFilter *BuildbucketRevisionFilterConfig `protobuf:"bytes,12,opt,name=buildbucket_revision_filter,json=buildbucketRevisionFilter,proto3,oneof"`
}

type ParentChildRepoManagerConfig_CipdRevisionFilter struct {
	CipdRevisionFilter *CIPDRevisionFilterConfig `protobuf:"bytes,13,opt,name=cipd_revision_filter,json=cipdRevisionFilter,proto3,oneof"`
}

func (*ParentChildRepoManagerConfig_BuildbucketRevisionFilter) isParentChildRepoManagerConfig_RevisionFilter() {
}

func (*ParentChildRepoManagerConfig_CipdRevisionFilter) isParentChildRepoManagerConfig_RevisionFilter() {
}

// CopyParentConfig provides configuration for a Parent which copies the Child
// into itself. It uses Gitiles and Gerrit instead of a local checkout.
type CopyParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Gitiles *GitilesParentConfig          `protobuf:"bytes,1,opt,name=gitiles,proto3" json:"gitiles,omitempty"`
	Copies  []*CopyParentConfig_CopyEntry `protobuf:"bytes,2,rep,name=copies,proto3" json:"copies,omitempty"`
}

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

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

func (*CopyParentConfig) ProtoMessage() {}

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

func (x *CopyParentConfig) GetGitiles() *GitilesParentConfig {
	if x != nil {
		return x.Gitiles
	}
	return nil
}

func (x *CopyParentConfig) GetCopies() []*CopyParentConfig_CopyEntry {
	if x != nil {
		return x.Copies
	}
	return nil
}

// DEPSLocalGitHubParentConfig provides configuration for a Parent which uses a
// local Git checkout with DEPS and uploads pull requests to GitHub.
type DEPSLocalGitHubParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	DepsLocal   *DEPSLocalParentConfig `protobuf:"bytes,1,opt,name=deps_local,json=depsLocal,proto3" json:"deps_local,omitempty"`
	Github      *GitHubConfig          `protobuf:"bytes,2,opt,name=github,proto3" json:"github,omitempty"`
	ForkRepoUrl string                 `protobuf:"bytes,3,opt,name=fork_repo_url,json=forkRepoUrl,proto3" json:"fork_repo_url,omitempty"`
}

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

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

func (*DEPSLocalGitHubParentConfig) ProtoMessage() {}

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

func (x *DEPSLocalGitHubParentConfig) GetDepsLocal() *DEPSLocalParentConfig {
	if x != nil {
		return x.DepsLocal
	}
	return nil
}

func (x *DEPSLocalGitHubParentConfig) GetGithub() *GitHubConfig {
	if x != nil {
		return x.Github
	}
	return nil
}

func (x *DEPSLocalGitHubParentConfig) GetForkRepoUrl() string {
	if x != nil {
		return x.ForkRepoUrl
	}
	return ""
}

// DEPSLocalGerritParentConfig provides configuration for a Parent which uses a
// local Git checkout with DEPS and uploads CLs to Gerrit.
type DEPSLocalGerritParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	DepsLocal *DEPSLocalParentConfig `protobuf:"bytes,1,opt,name=deps_local,json=depsLocal,proto3" json:"deps_local,omitempty"`
	Gerrit    *GerritConfig          `protobuf:"bytes,2,opt,name=gerrit,proto3" json:"gerrit,omitempty"`
}

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

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

func (*DEPSLocalGerritParentConfig) ProtoMessage() {}

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

func (x *DEPSLocalGerritParentConfig) GetDepsLocal() *DEPSLocalParentConfig {
	if x != nil {
		return x.DepsLocal
	}
	return nil
}

func (x *DEPSLocalGerritParentConfig) GetGerrit() *GerritConfig {
	if x != nil {
		return x.Gerrit
	}
	return nil
}

// GitCheckoutGitHubParentConfig provides configuration for a Parent which
// uses a local Git checkout and uploads pull requests to GitHub.
// TODO(borenet): Why doesn't this contain the GitHubConfig? Is this even
// needed?
type GitCheckoutGitHubParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GitCheckout *GitCheckoutParentConfig `protobuf:"bytes,1,opt,name=git_checkout,json=gitCheckout,proto3" json:"git_checkout,omitempty"`
	ForkRepoUrl string                   `protobuf:"bytes,2,opt,name=fork_repo_url,json=forkRepoUrl,proto3" json:"fork_repo_url,omitempty"`
}

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

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

func (*GitCheckoutGitHubParentConfig) ProtoMessage() {}

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

func (x *GitCheckoutGitHubParentConfig) GetGitCheckout() *GitCheckoutParentConfig {
	if x != nil {
		return x.GitCheckout
	}
	return nil
}

func (x *GitCheckoutGitHubParentConfig) GetForkRepoUrl() string {
	if x != nil {
		return x.ForkRepoUrl
	}
	return ""
}

// GitCheckoutGitHubFileParentConfig provides configuration for a Parent which
// uses a local Git checkout and uploads pull requests to GitHub.
type GitCheckoutGitHubFileParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GitCheckout    *GitCheckoutGitHubParentConfig `protobuf:"bytes,1,opt,name=git_checkout,json=gitCheckout,proto3" json:"git_checkout,omitempty"`
	PreUploadSteps []PreUploadStep                `protobuf:"varint,2,rep,packed,name=pre_upload_steps,json=preUploadSteps,proto3,enum=autoroll.config.PreUploadStep" json:"pre_upload_steps,omitempty"`
	// pre_upload describes command(s) to run before uploading roll CLs.
	PreUploadCommands *PreUploadConfig `protobuf:"bytes,3,opt,name=pre_upload_commands,json=preUploadCommands,proto3" json:"pre_upload_commands,omitempty"`
}

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

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

func (*GitCheckoutGitHubFileParentConfig) ProtoMessage() {}

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

func (x *GitCheckoutGitHubFileParentConfig) GetGitCheckout() *GitCheckoutGitHubParentConfig {
	if x != nil {
		return x.GitCheckout
	}
	return nil
}

func (x *GitCheckoutGitHubFileParentConfig) GetPreUploadSteps() []PreUploadStep {
	if x != nil {
		return x.PreUploadSteps
	}
	return nil
}

func (x *GitCheckoutGitHubFileParentConfig) GetPreUploadCommands() *PreUploadConfig {
	if x != nil {
		return x.PreUploadCommands
	}
	return nil
}

// GitilesParentConfig provides configuration for a Parent which uses Gitiles.
type GitilesParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Gitiles *GitilesConfig    `protobuf:"bytes,1,opt,name=gitiles,proto3" json:"gitiles,omitempty"`
	Dep     *DependencyConfig `protobuf:"bytes,2,opt,name=dep,proto3" json:"dep,omitempty"`
	Gerrit  *GerritConfig     `protobuf:"bytes,3,opt,name=gerrit,proto3" json:"gerrit,omitempty"`
}

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

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

func (*GitilesParentConfig) ProtoMessage() {}

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

func (x *GitilesParentConfig) GetGitiles() *GitilesConfig {
	if x != nil {
		return x.Gitiles
	}
	return nil
}

func (x *GitilesParentConfig) GetDep() *DependencyConfig {
	if x != nil {
		return x.Dep
	}
	return nil
}

func (x *GitilesParentConfig) GetGerrit() *GerritConfig {
	if x != nil {
		return x.Gerrit
	}
	return nil
}

// GitilesConfig provides configuration for a Git repo in Gitiles.
type GitilesConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// branch to track.
	Branch string `protobuf:"bytes,1,opt,name=branch,proto3" json:"branch,omitempty"`
	// repo_url from which to load Git data.
	RepoUrl string `protobuf:"bytes,2,opt,name=repo_url,json=repoUrl,proto3" json:"repo_url,omitempty"`
	// dependencies is an optional specification of dependencies to track.
	// Revisions generated by the checkout will contain the pinned versions of
	// these dependencies.
	Dependencies []*VersionFileConfig `protobuf:"bytes,3,rep,name=dependencies,proto3" json:"dependencies,omitempty"`
}

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

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

func (*GitilesConfig) ProtoMessage() {}

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

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

func (x *GitilesConfig) GetRepoUrl() string {
	if x != nil {
		return x.RepoUrl
	}
	return ""
}

func (x *GitilesConfig) GetDependencies() []*VersionFileConfig {
	if x != nil {
		return x.Dependencies
	}
	return nil
}

// DEPSLocalConfig provides configuration for a Parent which uses a local
// checkout and DEPS to manage dependencies.
type DEPSLocalParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GitCheckout *GitCheckoutParentConfig `protobuf:"bytes,1,opt,name=git_checkout,json=gitCheckout,proto3" json:"git_checkout,omitempty"`
	// child_path is the path to the child repo within the parent.
	ChildPath string `protobuf:"bytes,2,opt,name=child_path,json=childPath,proto3" json:"child_path,omitempty"`
	// child_subdir is the subdirectory of the workdir in which the child_path
	// should be rooted.  In most cases, this should be empty, but if child_path
	// is relative to the parent repo dir (eg. when DEPS specifies
	// use_relative_paths), then this is required.
	ChildSubdir string `protobuf:"bytes,3,opt,name=child_subdir,json=childSubdir,proto3" json:"child_subdir,omitempty"`
	// checkout_path is the path to the repo within the checkout root
	CheckoutPath string `protobuf:"bytes,4,opt,name=checkout_path,json=checkoutPath,proto3" json:"checkout_path,omitempty"`
	// gclient_spec overrides the default gclient spec.
	GclientSpec string `protobuf:"bytes,5,opt,name=gclient_spec,json=gclientSpec,proto3" json:"gclient_spec,omitempty"`
	// pre_upload_steps are steps to run before uploading the CL.
	PreUploadSteps []PreUploadStep `protobuf:"varint,6,rep,packed,name=pre_upload_steps,json=preUploadSteps,proto3,enum=autoroll.config.PreUploadStep" json:"pre_upload_steps,omitempty"`
	// run_hooks indicates whether to run "gclient runhooks" after syncing.
	RunHooks bool `protobuf:"varint,7,opt,name=run_hooks,json=runHooks,proto3" json:"run_hooks,omitempty"`
	// pre_upload describes command(s) to run before uploading roll CLs.
	PreUploadCommands *PreUploadConfig `protobuf:"bytes,8,opt,name=pre_upload_commands,json=preUploadCommands,proto3" json:"pre_upload_commands,omitempty"`
}

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

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

func (*DEPSLocalParentConfig) ProtoMessage() {}

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

func (x *DEPSLocalParentConfig) GetGitCheckout() *GitCheckoutParentConfig {
	if x != nil {
		return x.GitCheckout
	}
	return nil
}

func (x *DEPSLocalParentConfig) GetChildPath() string {
	if x != nil {
		return x.ChildPath
	}
	return ""
}

func (x *DEPSLocalParentConfig) GetChildSubdir() string {
	if x != nil {
		return x.ChildSubdir
	}
	return ""
}

func (x *DEPSLocalParentConfig) GetCheckoutPath() string {
	if x != nil {
		return x.CheckoutPath
	}
	return ""
}

func (x *DEPSLocalParentConfig) GetGclientSpec() string {
	if x != nil {
		return x.GclientSpec
	}
	return ""
}

func (x *DEPSLocalParentConfig) GetPreUploadSteps() []PreUploadStep {
	if x != nil {
		return x.PreUploadSteps
	}
	return nil
}

func (x *DEPSLocalParentConfig) GetRunHooks() bool {
	if x != nil {
		return x.RunHooks
	}
	return false
}

func (x *DEPSLocalParentConfig) GetPreUploadCommands() *PreUploadConfig {
	if x != nil {
		return x.PreUploadCommands
	}
	return nil
}

// GitCheckoutParentConfig provides configuration for a Parent which uses a
// local checkout to create changes.
type GitCheckoutParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GitCheckout *GitCheckoutConfig `protobuf:"bytes,1,opt,name=git_checkout,json=gitCheckout,proto3" json:"git_checkout,omitempty"`
	Dep         *DependencyConfig  `protobuf:"bytes,2,opt,name=dep,proto3" json:"dep,omitempty"`
}

func (x *GitCheckoutParentConfig) Reset() {
	*x = GitCheckoutParentConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[20]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GitCheckoutParentConfig) ProtoMessage() {}

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

func (x *GitCheckoutParentConfig) GetGitCheckout() *GitCheckoutConfig {
	if x != nil {
		return x.GitCheckout
	}
	return nil
}

func (x *GitCheckoutParentConfig) GetDep() *DependencyConfig {
	if x != nil {
		return x.Dep
	}
	return nil
}

// FreeTypeParentConfig provides configuration for the FreeType Parent.
type FreeTypeParentConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Gitiles *GitilesParentConfig `protobuf:"bytes,1,opt,name=gitiles,proto3" json:"gitiles,omitempty"`
}

func (x *FreeTypeParentConfig) Reset() {
	*x = FreeTypeParentConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[21]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*FreeTypeParentConfig) ProtoMessage() {}

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

func (x *FreeTypeParentConfig) GetGitiles() *GitilesParentConfig {
	if x != nil {
		return x.Gitiles
	}
	return nil
}

// CIPDChildConfig provides configuration for a CIPD package Child.
type CIPDChildConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// name of the package.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// tag to track.
	Tag string `protobuf:"bytes,2,opt,name=tag,proto3" json:"tag,omitempty"`
	// gitiles_repo is an optional config for a git repo which should be used
	// for generating the list of revisions in a roll. Both the old and new
	// CIPD package version must provide a git_revision tag in order for this
	// to work. If provided, the revision ID will be of the form
	// `git_revision:<hash>` instead of using the CIPD package instance ID.
	GitilesRepo string `protobuf:"bytes,4,opt,name=gitiles_repo,json=gitilesRepo,proto3" json:"gitiles_repo,omitempty"`
	// revision_id_tag is a tag key whose value will be used as the revision ID
	// instead of the CIPD package instance ID.  Overrides git_revision for the
	// revision ID if gitiles_repo was provided.
	RevisionIdTag string `protobuf:"bytes,5,opt,name=revision_id_tag,json=revisionIdTag,proto3" json:"revision_id_tag,omitempty"`
	// revision_id_tag_strip_key indicates that the revision ID should not
	// include the revision_id_tag key.  Only relevant if revision_id_tag is
	// set.
	RevisionIdTagStripKey bool `protobuf:"varint,6,opt,name=revision_id_tag_strip_key,json=revisionIdTagStripKey,proto3" json:"revision_id_tag_strip_key,omitempty"`
}

func (x *CIPDChildConfig) Reset() {
	*x = CIPDChildConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[22]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CIPDChildConfig) ProtoMessage() {}

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

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

func (x *CIPDChildConfig) GetTag() string {
	if x != nil {
		return x.Tag
	}
	return ""
}

func (x *CIPDChildConfig) GetGitilesRepo() string {
	if x != nil {
		return x.GitilesRepo
	}
	return ""
}

func (x *CIPDChildConfig) GetRevisionIdTag() string {
	if x != nil {
		return x.RevisionIdTag
	}
	return ""
}

func (x *CIPDChildConfig) GetRevisionIdTagStripKey() bool {
	if x != nil {
		return x.RevisionIdTagStripKey
	}
	return false
}

// FuchsiaSDKChildConfig provides configuration for the Fuchsia SDK Child.
type FuchsiaSDKChildConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// include_mac_sdk indicates whether to also roll the version of the Mac
	// SDK. Note that the dependency is not tracked separately; the Mac SDK is
	// simply rolled to the newest available version.
	// DEPRECATED: The presence of latest_mac_path indicates whether the Mac
	// SDK is included.
	IncludeMacSdk bool `protobuf:"varint,1,opt,name=include_mac_sdk,json=includeMacSdk,proto3" json:"include_mac_sdk,omitempty"`
	// gcs_bucket containing the SDK tarballs.
	GcsBucket string `protobuf:"bytes,2,opt,name=gcs_bucket,json=gcsBucket,proto3" json:"gcs_bucket,omitempty"`
	// latest_linux_path is the path to the file containing the ID of the latest
	// Linux SDK.
	LatestLinuxPath string `protobuf:"bytes,3,opt,name=latest_linux_path,json=latestLinuxPath,proto3" json:"latest_linux_path,omitempty"`
	// latest_mac_path is the path to the file containing the ID of the latest
	// Mac SDK.
	LatestMacPath string `protobuf:"bytes,4,opt,name=latest_mac_path,json=latestMacPath,proto3" json:"latest_mac_path,omitempty"`
	// tarball_linux_path_tmpl is a template for the GCS path of the Linux SDK,
	// with the version ID to be inserted later.
	TarballLinuxPathTmpl string `protobuf:"bytes,5,opt,name=tarball_linux_path_tmpl,json=tarballLinuxPathTmpl,proto3" json:"tarball_linux_path_tmpl,omitempty"`
}

func (x *FuchsiaSDKChildConfig) Reset() {
	*x = FuchsiaSDKChildConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[23]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*FuchsiaSDKChildConfig) ProtoMessage() {}

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

func (x *FuchsiaSDKChildConfig) GetIncludeMacSdk() bool {
	if x != nil {
		return x.IncludeMacSdk
	}
	return false
}

func (x *FuchsiaSDKChildConfig) GetGcsBucket() string {
	if x != nil {
		return x.GcsBucket
	}
	return ""
}

func (x *FuchsiaSDKChildConfig) GetLatestLinuxPath() string {
	if x != nil {
		return x.LatestLinuxPath
	}
	return ""
}

func (x *FuchsiaSDKChildConfig) GetLatestMacPath() string {
	if x != nil {
		return x.LatestMacPath
	}
	return ""
}

func (x *FuchsiaSDKChildConfig) GetTarballLinuxPathTmpl() string {
	if x != nil {
		return x.TarballLinuxPathTmpl
	}
	return ""
}

// SemVerGCSChildConfig provides configuration for a Child in GCS which uses
// semantic versioning.
type SemVerGCSChildConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Gcs *GCSChildConfig `protobuf:"bytes,1,opt,name=gcs,proto3" json:"gcs,omitempty"`
	// short_rev_regex is a regular expression string which indicates what part
	// of the revision ID string should be used as the shortened ID for display.
	// If not specified, the full ID string is used.
	ShortRevRegex string `protobuf:"bytes,2,opt,name=short_rev_regex,json=shortRevRegex,proto3" json:"short_rev_regex,omitempty"`
	// version_regex is a regular expression string containing one or more
	// integer capture groups. The integers matched by the capture groups are
	// compared, in order, when comparing two revisions.
	VersionRegex string `protobuf:"bytes,3,opt,name=version_regex,json=versionRegex,proto3" json:"version_regex,omitempty"`
}

func (x *SemVerGCSChildConfig) Reset() {
	*x = SemVerGCSChildConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[24]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*SemVerGCSChildConfig) ProtoMessage() {}

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

func (x *SemVerGCSChildConfig) GetGcs() *GCSChildConfig {
	if x != nil {
		return x.Gcs
	}
	return nil
}

func (x *SemVerGCSChildConfig) GetShortRevRegex() string {
	if x != nil {
		return x.ShortRevRegex
	}
	return ""
}

func (x *SemVerGCSChildConfig) GetVersionRegex() string {
	if x != nil {
		return x.VersionRegex
	}
	return ""
}

// GCSChildConfig provides configuration for a Child in GCS.
type GCSChildConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// gcs_bucket used for finding Child revisions.
	GcsBucket string `protobuf:"bytes,1,opt,name=gcs_bucket,json=gcsBucket,proto3" json:"gcs_bucket,omitempty"`
	// gcs_path within the bucket which contains child revisions.
	GcsPath string `protobuf:"bytes,2,opt,name=gcs_path,json=gcsPath,proto3" json:"gcs_path,omitempty"`
	// revision_id_regex is used to extract the revision ID from a full GCS file
	// path. If not provided, the base name of the file is used.
	RevisionIdRegex string `protobuf:"bytes,3,opt,name=revision_id_regex,json=revisionIdRegex,proto3" json:"revision_id_regex,omitempty"`
}

func (x *GCSChildConfig) Reset() {
	*x = GCSChildConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[25]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GCSChildConfig) ProtoMessage() {}

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

func (x *GCSChildConfig) GetGcsBucket() string {
	if x != nil {
		return x.GcsBucket
	}
	return ""
}

func (x *GCSChildConfig) GetGcsPath() string {
	if x != nil {
		return x.GcsPath
	}
	return ""
}

func (x *GCSChildConfig) GetRevisionIdRegex() string {
	if x != nil {
		return x.RevisionIdRegex
	}
	return ""
}

// GitCheckoutChildConfig provides configuration for a Child which uses a local
// Git checkout.
type GitCheckoutChildConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GitCheckout *GitCheckoutConfig `protobuf:"bytes,1,opt,name=git_checkout,json=gitCheckout,proto3" json:"git_checkout,omitempty"`
}

func (x *GitCheckoutChildConfig) Reset() {
	*x = GitCheckoutChildConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[26]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GitCheckoutChildConfig) ProtoMessage() {}

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

func (x *GitCheckoutChildConfig) GetGitCheckout() *GitCheckoutConfig {
	if x != nil {
		return x.GitCheckout
	}
	return nil
}

// GitCheckoutGitHubChildConfig provides configuration for a Child which uses a
// local checkout of a GitHub repo.
type GitCheckoutGitHubChildConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	GitCheckout *GitCheckoutChildConfig `protobuf:"bytes,1,opt,name=git_checkout,json=gitCheckout,proto3" json:"git_checkout,omitempty"`
	RepoOwner   string                  `protobuf:"bytes,2,opt,name=repo_owner,json=repoOwner,proto3" json:"repo_owner,omitempty"`
	RepoName    string                  `protobuf:"bytes,3,opt,name=repo_name,json=repoName,proto3" json:"repo_name,omitempty"`
}

func (x *GitCheckoutGitHubChildConfig) Reset() {
	*x = GitCheckoutGitHubChildConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[27]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GitCheckoutGitHubChildConfig) ProtoMessage() {}

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

func (x *GitCheckoutGitHubChildConfig) GetGitCheckout() *GitCheckoutChildConfig {
	if x != nil {
		return x.GitCheckout
	}
	return nil
}

func (x *GitCheckoutGitHubChildConfig) GetRepoOwner() string {
	if x != nil {
		return x.RepoOwner
	}
	return ""
}

func (x *GitCheckoutGitHubChildConfig) GetRepoName() string {
	if x != nil {
		return x.RepoName
	}
	return ""
}

// GitilesChildConfig provides configuration for a Child which uses Gitiles.
type GitilesChildConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Gitiles *GitilesConfig `protobuf:"bytes,1,opt,name=gitiles,proto3" json:"gitiles,omitempty"`
	// path indicates an optional single path of the repo to watch for changes;
	// all commits which do not change this path are ignored.  Note that this
	// may produce strange results if the Git history for the path is not
	// linear.
	Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
}

func (x *GitilesChildConfig) Reset() {
	*x = GitilesChildConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[28]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GitilesChildConfig) ProtoMessage() {}

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

func (x *GitilesChildConfig) GetGitiles() *GitilesConfig {
	if x != nil {
		return x.Gitiles
	}
	return nil
}

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

// NotifierConfig provides configuration for a notification system.
type NotifierConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// log_level allows all messages at and above the given severity to be
	// sent. Mutually exclusive with msg_type.
	LogLevel NotifierConfig_LogLevel `protobuf:"varint,1,opt,name=log_level,json=logLevel,proto3,enum=autoroll.config.NotifierConfig_LogLevel" json:"log_level,omitempty"`
	// msg_type limits the notifier to only send messages of the given
	// types. Mutually exclusive with log_level.
	MsgType []NotifierConfig_MsgType `protobuf:"varint,2,rep,packed,name=msg_type,json=msgType,proto3,enum=autoroll.config.NotifierConfig_MsgType" json:"msg_type,omitempty"`
	// config provides configuration for the specific type of notifier.
	//
	// Types that are assignable to Config:
	//	*NotifierConfig_Email
	//	*NotifierConfig_Chat
	//	*NotifierConfig_Monorail
	//	*NotifierConfig_Pubsub
	Config isNotifierConfig_Config `protobuf_oneof:"config"`
	// subject indicates a subject line which overrides the default subject line
	// for every notification message, if provided.
	Subject string `protobuf:"bytes,7,opt,name=subject,proto3" json:"subject,omitempty"`
}

func (x *NotifierConfig) Reset() {
	*x = NotifierConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[29]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*NotifierConfig) ProtoMessage() {}

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

func (x *NotifierConfig) GetLogLevel() NotifierConfig_LogLevel {
	if x != nil {
		return x.LogLevel
	}
	return NotifierConfig_SILENT
}

func (x *NotifierConfig) GetMsgType() []NotifierConfig_MsgType {
	if x != nil {
		return x.MsgType
	}
	return nil
}

func (m *NotifierConfig) GetConfig() isNotifierConfig_Config {
	if m != nil {
		return m.Config
	}
	return nil
}

func (x *NotifierConfig) GetEmail() *EmailNotifierConfig {
	if x, ok := x.GetConfig().(*NotifierConfig_Email); ok {
		return x.Email
	}
	return nil
}

func (x *NotifierConfig) GetChat() *ChatNotifierConfig {
	if x, ok := x.GetConfig().(*NotifierConfig_Chat); ok {
		return x.Chat
	}
	return nil
}

func (x *NotifierConfig) GetMonorail() *MonorailNotifierConfig {
	if x, ok := x.GetConfig().(*NotifierConfig_Monorail); ok {
		return x.Monorail
	}
	return nil
}

func (x *NotifierConfig) GetPubsub() *PubSubNotifierConfig {
	if x, ok := x.GetConfig().(*NotifierConfig_Pubsub); ok {
		return x.Pubsub
	}
	return nil
}

func (x *NotifierConfig) GetSubject() string {
	if x != nil {
		return x.Subject
	}
	return ""
}

type isNotifierConfig_Config interface {
	isNotifierConfig_Config()
}

type NotifierConfig_Email struct {
	Email *EmailNotifierConfig `protobuf:"bytes,3,opt,name=email,proto3,oneof"`
}

type NotifierConfig_Chat struct {
	Chat *ChatNotifierConfig `protobuf:"bytes,4,opt,name=chat,proto3,oneof"`
}

type NotifierConfig_Monorail struct {
	Monorail *MonorailNotifierConfig `protobuf:"bytes,5,opt,name=monorail,proto3,oneof"`
}

type NotifierConfig_Pubsub struct {
	Pubsub *PubSubNotifierConfig `protobuf:"bytes,6,opt,name=pubsub,proto3,oneof"`
}

func (*NotifierConfig_Email) isNotifierConfig_Config() {}

func (*NotifierConfig_Chat) isNotifierConfig_Config() {}

func (*NotifierConfig_Monorail) isNotifierConfig_Config() {}

func (*NotifierConfig_Pubsub) isNotifierConfig_Config() {}

// EmailNotifierConfig provides configuration for email notifications.
type EmailNotifierConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// emails are the email addresses which should receive notifications.
	Emails []string `protobuf:"bytes,1,rep,name=emails,proto3" json:"emails,omitempty"`
}

func (x *EmailNotifierConfig) Reset() {
	*x = EmailNotifierConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[30]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*EmailNotifierConfig) ProtoMessage() {}

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

func (x *EmailNotifierConfig) GetEmails() []string {
	if x != nil {
		return x.Emails
	}
	return nil
}

// ChatNotifierConfig provides configuration for Google Chat notifications.
type ChatNotifierConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// room_id in which to post messages.
	RoomId string `protobuf:"bytes,1,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
}

func (x *ChatNotifierConfig) Reset() {
	*x = ChatNotifierConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[31]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ChatNotifierConfig) ProtoMessage() {}

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

func (x *ChatNotifierConfig) GetRoomId() string {
	if x != nil {
		return x.RoomId
	}
	return ""
}

// MonorailNotifierConfig provides configuration for bug-filing "notifications"
// using Monorail.
type MonorailNotifierConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// project name under which to file bugs. Required.
	Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
	// owner of bugs filed in Monorail. Required.
	Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"`
	// cc these email addresses on bugs filed in Monorail.
	Cc []string `protobuf:"bytes,3,rep,name=cc,proto3" json:"cc,omitempty"`
	// components to apply to bugs filed in Monorail.
	Components []string `protobuf:"bytes,4,rep,name=components,proto3" json:"components,omitempty"`
	// labels to apply to bugs filed in Monorail.
	Labels []string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty"`
}

func (x *MonorailNotifierConfig) Reset() {
	*x = MonorailNotifierConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[32]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*MonorailNotifierConfig) ProtoMessage() {}

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

func (x *MonorailNotifierConfig) GetProject() string {
	if x != nil {
		return x.Project
	}
	return ""
}

func (x *MonorailNotifierConfig) GetOwner() string {
	if x != nil {
		return x.Owner
	}
	return ""
}

func (x *MonorailNotifierConfig) GetCc() []string {
	if x != nil {
		return x.Cc
	}
	return nil
}

func (x *MonorailNotifierConfig) GetComponents() []string {
	if x != nil {
		return x.Components
	}
	return nil
}

func (x *MonorailNotifierConfig) GetLabels() []string {
	if x != nil {
		return x.Labels
	}
	return nil
}

// PubSubNotifierConfig provides configuration for PubSub notifications.
type PubSubNotifierConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// topic under which to publish PubSub messages.
	Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
}

func (x *PubSubNotifierConfig) Reset() {
	*x = PubSubNotifierConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[33]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*PubSubNotifierConfig) ProtoMessage() {}

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

func (x *PubSubNotifierConfig) GetTopic() string {
	if x != nil {
		return x.Topic
	}
	return ""
}

// ThrottleConfig provides configuration for throttling.
type ThrottleConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// attempt_count indicates the number of failed attempts after which to
	// begin throttling.
	AttemptCount int32 `protobuf:"varint,1,opt,name=attempt_count,json=attemptCount,proto3" json:"attempt_count,omitempty"`
	// time_window during which, if the number of failed attempts exceeds the
	// specified attempt_count, throttling is enabled.
	TimeWindow string `protobuf:"bytes,2,opt,name=time_window,json=timeWindow,proto3" json:"time_window,omitempty"`
}

func (x *ThrottleConfig) Reset() {
	*x = ThrottleConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[34]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*ThrottleConfig) ProtoMessage() {}

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

func (x *ThrottleConfig) GetAttemptCount() int32 {
	if x != nil {
		return x.AttemptCount
	}
	return 0
}

func (x *ThrottleConfig) GetTimeWindow() string {
	if x != nil {
		return x.TimeWindow
	}
	return ""
}

// TransitiveDepConfig provides configuration for a dependency referenced by
// both the parent and child, to be updated in the parent to match the revision
// depended on by the child at the revision being rolled.
type TransitiveDepConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// child dependency information.
	Child *VersionFileConfig `protobuf:"bytes,1,opt,name=child,proto3" json:"child,omitempty"`
	// parent dependency information.
	Parent *VersionFileConfig `protobuf:"bytes,2,opt,name=parent,proto3" json:"parent,omitempty"`
}

func (x *TransitiveDepConfig) Reset() {
	*x = TransitiveDepConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[35]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*TransitiveDepConfig) ProtoMessage() {}

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

func (x *TransitiveDepConfig) GetChild() *VersionFileConfig {
	if x != nil {
		return x.Child
	}
	return nil
}

func (x *TransitiveDepConfig) GetParent() *VersionFileConfig {
	if x != nil {
		return x.Parent
	}
	return nil
}

// VersionFileConfig provides configuration for a dependency whose version is
// pinned within a particular file.
type VersionFileConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// id of the dependency to be rolled, eg. a repo URL.
	Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	// path within the repo of the file which pins the dependency.
	Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
}

func (x *VersionFileConfig) Reset() {
	*x = VersionFileConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[36]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*VersionFileConfig) ProtoMessage() {}

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

func (x *VersionFileConfig) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

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

// DependencyConfig provides configuration for a dependency whose version is
// pinned in a file and which may have transitive dependencies.
type DependencyConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// primary dependency.
	Primary *VersionFileConfig `protobuf:"bytes,1,opt,name=primary,proto3" json:"primary,omitempty"`
	// transitive dependencies.
	Transitive []*TransitiveDepConfig `protobuf:"bytes,2,rep,name=transitive,proto3" json:"transitive,omitempty"`
	// find_and_replace lists additional files in which all instances of the
	// previous primary revision ID should be replaced with the new primary
	// revision ID.
	FindAndReplace []string `protobuf:"bytes,3,rep,name=find_and_replace,json=findAndReplace,proto3" json:"find_and_replace,omitempty"`
}

func (x *DependencyConfig) Reset() {
	*x = DependencyConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[37]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*DependencyConfig) ProtoMessage() {}

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

func (x *DependencyConfig) GetPrimary() *VersionFileConfig {
	if x != nil {
		return x.Primary
	}
	return nil
}

func (x *DependencyConfig) GetTransitive() []*TransitiveDepConfig {
	if x != nil {
		return x.Transitive
	}
	return nil
}

func (x *DependencyConfig) GetFindAndReplace() []string {
	if x != nil {
		return x.FindAndReplace
	}
	return nil
}

// GitCheckoutConfig provides configuration for a Git checkout.
type GitCheckoutConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// branch to track.
	Branch string `protobuf:"bytes,1,opt,name=branch,proto3" json:"branch,omitempty"`
	// repo_url to check out.
	RepoUrl string `protobuf:"bytes,2,opt,name=repo_url,json=repoUrl,proto3" json:"repo_url,omitempty"`
	// rev_link_tmpl is an optional template used for generating links to
	// revisions. If not specified, revisions generated by the checkout will not
	// have an associated URL.
	RevLinkTmpl string `protobuf:"bytes,3,opt,name=rev_link_tmpl,json=revLinkTmpl,proto3" json:"rev_link_tmpl,omitempty"`
	// dependencies is an optional specification of dependencies to track.
	// Revisions generated by the checkout will contain the pinned versions of
	// these dependencies.
	Dependencies []*VersionFileConfig `protobuf:"bytes,4,rep,name=dependencies,proto3" json:"dependencies,omitempty"`
}

func (x *GitCheckoutConfig) Reset() {
	*x = GitCheckoutConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[38]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*GitCheckoutConfig) ProtoMessage() {}

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

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

func (x *GitCheckoutConfig) GetRepoUrl() string {
	if x != nil {
		return x.RepoUrl
	}
	return ""
}

func (x *GitCheckoutConfig) GetRevLinkTmpl() string {
	if x != nil {
		return x.RevLinkTmpl
	}
	return ""
}

func (x *GitCheckoutConfig) GetDependencies() []*VersionFileConfig {
	if x != nil {
		return x.Dependencies
	}
	return nil
}

// BuildbucketRevisionFilterConfig provides configuration for a revision filter
// which uses Buildbucket.
type BuildbucketRevisionFilterConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Project            string   `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"`
	Bucket             string   `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"`
	BuildsetCommitTmpl string   `protobuf:"bytes,3,opt,name=buildset_commit_tmpl,json=buildsetCommitTmpl,proto3" json:"buildset_commit_tmpl,omitempty"`
	Builder            []string `protobuf:"bytes,4,rep,name=builder,proto3" json:"builder,omitempty"`
}

func (x *BuildbucketRevisionFilterConfig) Reset() {
	*x = BuildbucketRevisionFilterConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[39]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*BuildbucketRevisionFilterConfig) ProtoMessage() {}

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

func (x *BuildbucketRevisionFilterConfig) GetProject() string {
	if x != nil {
		return x.Project
	}
	return ""
}

func (x *BuildbucketRevisionFilterConfig) GetBucket() string {
	if x != nil {
		return x.Bucket
	}
	return ""
}

func (x *BuildbucketRevisionFilterConfig) GetBuildsetCommitTmpl() string {
	if x != nil {
		return x.BuildsetCommitTmpl
	}
	return ""
}

func (x *BuildbucketRevisionFilterConfig) GetBuilder() []string {
	if x != nil {
		return x.Builder
	}
	return nil
}

// CIPDRevisionFilterConfig provides configuration for a revision filter
// which filters out revisions which don't exist on all of the configured
// packages and platforms.
type CIPDRevisionFilterConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Package  []string `protobuf:"bytes,1,rep,name=package,proto3" json:"package,omitempty"`
	Platform []string `protobuf:"bytes,2,rep,name=platform,proto3" json:"platform,omitempty"`
}

func (x *CIPDRevisionFilterConfig) Reset() {
	*x = CIPDRevisionFilterConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[40]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CIPDRevisionFilterConfig) ProtoMessage() {}

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

func (x *CIPDRevisionFilterConfig) GetPackage() []string {
	if x != nil {
		return x.Package
	}
	return nil
}

func (x *CIPDRevisionFilterConfig) GetPlatform() []string {
	if x != nil {
		return x.Platform
	}
	return nil
}

// PreUploadConfig describes additional steps to run after updating the
// dependency but before uploading the CL, on rollers which use a local
// checkout.
type PreUploadConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// CIPD packages needed by the command(s).
	CipdPackage []*PreUploadCIPDPackageConfig `protobuf:"bytes,1,rep,name=cipd_package,json=cipdPackage,proto3" json:"cipd_package,omitempty"`
	// Command(s) to run.
	Command []*PreUploadCommandConfig `protobuf:"bytes,2,rep,name=command,proto3" json:"command,omitempty"`
}

func (x *PreUploadConfig) Reset() {
	*x = PreUploadConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[41]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*PreUploadConfig) ProtoMessage() {}

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

func (x *PreUploadConfig) GetCipdPackage() []*PreUploadCIPDPackageConfig {
	if x != nil {
		return x.CipdPackage
	}
	return nil
}

func (x *PreUploadConfig) GetCommand() []*PreUploadCommandConfig {
	if x != nil {
		return x.Command
	}
	return nil
}

// PreUploadCommandConfig describes a command to run.
type PreUploadCommandConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Command to run.
	Command string `protobuf:"bytes,1,opt,name=command,proto3" json:"command,omitempty"`
	// Working directory in which to run the command.
	Cwd string `protobuf:"bytes,2,opt,name=cwd,proto3" json:"cwd,omitempty"`
	// Environment variables needed by the command, in "KEY=VALUE" format.
	Env []string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty"`
	// If true, log the error returned by the command but don't error out.
	IgnoreFailure bool `protobuf:"varint,4,opt,name=ignore_failure,json=ignoreFailure,proto3" json:"ignore_failure,omitempty"`
}

func (x *PreUploadCommandConfig) Reset() {
	*x = PreUploadCommandConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[42]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*PreUploadCommandConfig) ProtoMessage() {}

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

func (x *PreUploadCommandConfig) GetCommand() string {
	if x != nil {
		return x.Command
	}
	return ""
}

func (x *PreUploadCommandConfig) GetCwd() string {
	if x != nil {
		return x.Cwd
	}
	return ""
}

func (x *PreUploadCommandConfig) GetEnv() []string {
	if x != nil {
		return x.Env
	}
	return nil
}

func (x *PreUploadCommandConfig) GetIgnoreFailure() bool {
	if x != nil {
		return x.IgnoreFailure
	}
	return false
}

// CIPDPackageConfig describes a CIPD package.
type PreUploadCIPDPackageConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Full CIPD package name.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Relative path within the root dir to install the package.
	Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"`
	// Version of the package.
	Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"`
}

func (x *PreUploadCIPDPackageConfig) Reset() {
	*x = PreUploadCIPDPackageConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[43]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*PreUploadCIPDPackageConfig) ProtoMessage() {}

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

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

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

func (x *PreUploadCIPDPackageConfig) GetVersion() string {
	if x != nil {
		return x.Version
	}
	return ""
}

// Configs provides configuration for multiple autorollers.
type Configs struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Config []*Config `protobuf:"bytes,1,rep,name=config,proto3" json:"config,omitempty"`
}

func (x *Configs) Reset() {
	*x = Configs{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[44]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*Configs) ProtoMessage() {}

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

func (x *Configs) GetConfig() []*Config {
	if x != nil {
		return x.Config
	}
	return nil
}

// ProjectMetadataFileConfig provides configuration for METADATA files in
// the Android repo.
type AndroidRepoManagerConfig_ProjectMetadataFileConfig struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// file_path of the project metadata file within the repo.
	FilePath string `protobuf:"bytes,1,opt,name=file_path,json=filePath,proto3" json:"file_path,omitempty"`
	// name of the project.
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
	// description of the project.
	Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
	// home_page of the project.
	HomePage string `protobuf:"bytes,4,opt,name=home_page,json=homePage,proto3" json:"home_page,omitempty"`
	// git_url of the project.
	GitUrl string `protobuf:"bytes,5,opt,name=git_url,json=gitUrl,proto3" json:"git_url,omitempty"`
	// license_type of the project.
	LicenseType string `protobuf:"bytes,6,opt,name=license_type,json=licenseType,proto3" json:"license_type,omitempty"`
}

func (x *AndroidRepoManagerConfig_ProjectMetadataFileConfig) Reset() {
	*x = AndroidRepoManagerConfig_ProjectMetadataFileConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[45]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*AndroidRepoManagerConfig_ProjectMetadataFileConfig) ProtoMessage() {}

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

func (x *AndroidRepoManagerConfig_ProjectMetadataFileConfig) GetFilePath() string {
	if x != nil {
		return x.FilePath
	}
	return ""
}

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

func (x *AndroidRepoManagerConfig_ProjectMetadataFileConfig) GetDescription() string {
	if x != nil {
		return x.Description
	}
	return ""
}

func (x *AndroidRepoManagerConfig_ProjectMetadataFileConfig) GetHomePage() string {
	if x != nil {
		return x.HomePage
	}
	return ""
}

func (x *AndroidRepoManagerConfig_ProjectMetadataFileConfig) GetGitUrl() string {
	if x != nil {
		return x.GitUrl
	}
	return ""
}

func (x *AndroidRepoManagerConfig_ProjectMetadataFileConfig) GetLicenseType() string {
	if x != nil {
		return x.LicenseType
	}
	return ""
}

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

	// command to run. If this is the command used to update the revision of
	// the Child, this should be a text template which uses SetPinnedRevVars
	// to get the from- and to-revisions.
	Command []string `protobuf:"bytes,1,rep,name=command,proto3" json:"command,omitempty"`
	// dir is the relative path within the Git checkout to run the command.
	Dir string `protobuf:"bytes,2,opt,name=dir,proto3" json:"dir,omitempty"`
	// env are environment variables to supply to the command, in KEY=VALUE
	// format.
	Env []string `protobuf:"bytes,3,rep,name=env,proto3" json:"env,omitempty"`
}

func (x *CommandRepoManagerConfig_CommandConfig) Reset() {
	*x = CommandRepoManagerConfig_CommandConfig{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[46]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CommandRepoManagerConfig_CommandConfig) ProtoMessage() {}

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

func (x *CommandRepoManagerConfig_CommandConfig) GetCommand() []string {
	if x != nil {
		return x.Command
	}
	return nil
}

func (x *CommandRepoManagerConfig_CommandConfig) GetDir() string {
	if x != nil {
		return x.Dir
	}
	return ""
}

func (x *CommandRepoManagerConfig_CommandConfig) GetEnv() []string {
	if x != nil {
		return x.Env
	}
	return nil
}

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

	// src_rel_path is the relative path within the Child.
	SrcRelPath string `protobuf:"bytes,1,opt,name=src_rel_path,json=srcRelPath,proto3" json:"src_rel_path,omitempty"`
	// dst_rel_path is the relative path within the Parent.
	DstRelPath string `protobuf:"bytes,2,opt,name=dst_rel_path,json=dstRelPath,proto3" json:"dst_rel_path,omitempty"`
}

func (x *CopyParentConfig_CopyEntry) Reset() {
	*x = CopyParentConfig_CopyEntry{}
	if protoimpl.UnsafeEnabled {
		mi := &file_config_proto_msgTypes[47]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

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

func (*CopyParentConfig_CopyEntry) ProtoMessage() {}

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

func (x *CopyParentConfig_CopyEntry) GetSrcRelPath() string {
	if x != nil {
		return x.SrcRelPath
	}
	return ""
}

func (x *CopyParentConfig_CopyEntry) GetDstRelPath() string {
	if x != nil {
		return x.DstRelPath
	}
	return ""
}

var File_config_proto protoreflect.FileDescriptor

var file_config_proto_rawDesc = []byte{
	0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f,
	0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22,
	0xba, 0x0e, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x6f,
	0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0a, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x63,
	0x68, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x18, 0x1d, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x75, 0x67, 0x4c, 0x69, 0x6e,
	0x6b, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c,
	0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63,
	0x68, 0x69, 0x6c, 0x64, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12,
	0x26, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x75, 0x67, 0x5f, 0x6c, 0x69,
	0x6e, 0x6b, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
	0x42, 0x75, 0x67, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x5f, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x73, 0x70,
	0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x5f, 0x77, 0x61, 0x74, 0x65, 0x72, 0x66, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x57, 0x61, 0x74, 0x65, 0x72, 0x66, 0x61,
	0x6c, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6d,
	0x61, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72,
	0x50, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x6f, 0x77, 0x6e, 0x65, 0x72,
	0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79,
	0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03,
	0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x0f,
	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
	0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63,
	0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x65,
	0x72, 0x6e, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x49, 0x6e,
	0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77,
	0x65, 0x72, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77,
	0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x62,
	0x61, 0x63, 0x6b, 0x75, 0x70, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x76,
	0x69, 0x65, 0x77, 0x65, 0x72, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x72,
	0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6f, 0x6c, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0c, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0c, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6f, 0x6c, 0x64, 0x6f, 0x77, 0x6e,
	0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18,
	0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f,
	0x77, 0x12, 0x32, 0x0a, 0x15, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x5f, 0x6d, 0x61,
	0x6e, 0x75, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08,
	0x52, 0x13, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c,
	0x52, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f,
	0x6d, 0x73, 0x67, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x6f,
	0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
	0x69, 0x74, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x63, 0x6f, 0x6d,
	0x6d, 0x69, 0x74, 0x4d, 0x73, 0x67, 0x12, 0x37, 0x0a, 0x06, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74,
	0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c,
	0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x12,
	0x37, 0x0a, 0x06, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x1d, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00,
	0x52, 0x06, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x12, 0x3a, 0x0a, 0x07, 0x67, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x33, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x6f,
	0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x6f, 0x6f, 0x67,
	0x6c, 0x65, 0x33, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x07, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x33, 0x12, 0x41, 0x0a, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74,
	0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72,
	0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x72,
	0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x6b, 0x75, 0x62,
	0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x19, 0x70, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x5f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6d, 0x61, 0x6e,
	0x61, 0x67, 0x65, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x75, 0x74,
	0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x61, 0x72,
	0x65, 0x6e, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61,
	0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x16, 0x70, 0x61, 0x72,
	0x65, 0x6e, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61,
	0x67, 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x14, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x72,
	0x65, 0x70, 0x6f, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d,
	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x12,
	0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67,
	0x65, 0x72, 0x12, 0x5d, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65,
	0x70, 0x6f, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61,
	0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x12, 0x63,
	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
	0x72, 0x12, 0x60, 0x0a, 0x15, 0x66, 0x72, 0x65, 0x65, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x72, 0x65,
	0x70, 0x6f, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x46, 0x72, 0x65, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x4d,
	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x13,
	0x66, 0x72, 0x65, 0x65, 0x74, 0x79, 0x70, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61,
	0x67, 0x65, 0x72, 0x12, 0x7d, 0x0a, 0x20, 0x66, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61, 0x5f, 0x73,
	0x64, 0x6b, 0x5f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f,
	0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e,
	0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x46, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61, 0x53, 0x44, 0x4b, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69,
	0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x48, 0x01, 0x52, 0x1c, 0x66, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61, 0x53, 0x64, 0x6b,
	0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67,
	0x65, 0x72, 0x12, 0x5d, 0x0a, 0x14, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x33, 0x5f, 0x72, 0x65,
	0x70, 0x6f, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x33, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61,
	0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x12, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x33, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
	0x72, 0x12, 0x3d, 0x0a, 0x09, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x1a,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
	0x12, 0x48, 0x0a, 0x0f, 0x73, 0x61, 0x66, 0x65, 0x74, 0x79, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74,
	0x74, 0x6c, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x6f,
	0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x68, 0x72, 0x6f,
	0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x73, 0x61, 0x66, 0x65,
	0x74, 0x79, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x12, 0x4d, 0x0a, 0x0f, 0x74, 0x72,
	0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x73, 0x18, 0x1c, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65,
	0x44, 0x65, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73,
	0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x70, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x73, 0x65,
	0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
	0x74, 0x79, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x75, 0x73, 0x65, 0x57, 0x6f, 0x72,
	0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0d, 0x0a,
	0x0b, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x42, 0x0e, 0x0a, 0x0c,
	0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x22, 0xbd, 0x04, 0x0a,
	0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x75, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x75, 0x67, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63,
	0x74, 0x12, 0x2b, 0x0a, 0x12, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x75,
	0x72, 0x6c, 0x5f, 0x74, 0x6d, 0x70, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63,
	0x68, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x55, 0x72, 0x6c, 0x54, 0x6d, 0x70, 0x6c, 0x12, 0x28,
	0x0a, 0x10, 0x63, 0x71, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x74, 0x72, 0x79, 0x62, 0x6f,
	0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x71, 0x45, 0x78, 0x74, 0x72,
	0x61, 0x54, 0x72, 0x79, 0x62, 0x6f, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x18, 0x63, 0x71, 0x5f, 0x64,
	0x6f, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x74, 0x72, 0x79,
	0x62, 0x6f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x63, 0x71, 0x44, 0x6f,
	0x4e, 0x6f, 0x74, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x54, 0x72, 0x79, 0x62, 0x6f, 0x74, 0x73,
	0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4c, 0x6f,
	0x67, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x76,
	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69,
	0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75,
	0x64, 0x65, 0x5f, 0x74, 0x62, 0x72, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x54, 0x62, 0x72, 0x4c, 0x69, 0x6e,
	0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x65, 0x73,
	0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
	0x65, 0x54, 0x65, 0x73, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f,
	0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x65,
	0x78, 0x74, 0x72, 0x61, 0x46, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x73, 0x12, 0x45, 0x0a, 0x08, 0x62,
	0x75, 0x69, 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e,
	0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4d, 0x73, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x42, 0x75, 0x69, 0x6c, 0x74, 0x49, 0x6e, 0x48, 0x00, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x74,
	0x49, 0x6e, 0x12, 0x18, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x0a, 0x20, 0x01,
	0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x22, 0x42, 0x0a, 0x07,
	0x42, 0x75, 0x69, 0x6c, 0x74, 0x49, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55,
	0x4c, 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x4e, 0x44, 0x52, 0x4f, 0x49, 0x44, 0x10,
	0x01, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x4e, 0x44, 0x52, 0x4f, 0x49, 0x44, 0x5f, 0x4e, 0x4f, 0x5f,
	0x43, 0x52, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x41, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x03,
	0x42, 0x0a, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0xc7, 0x02, 0x0a,
	0x0c, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a,
	0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12,
	0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x6f,
	0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x72, 0x72,
	0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
	0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xcc, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x4e, 0x44, 0x52, 0x4f, 0x49, 0x44, 0x10, 0x00, 0x12,
	0x09, 0x0a, 0x05, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x48,
	0x52, 0x4f, 0x4d, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x52, 0x4f,
	0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x5f, 0x43, 0x51, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c,
	0x4c, 0x49, 0x42, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x10, 0x04, 0x12, 0x17,
	0x0a, 0x13, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x42, 0x4f, 0x54, 0x5f, 0x43,
	0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x48, 0x52, 0x4f, 0x4d,
	0x49, 0x55, 0x4d, 0x5f, 0x42, 0x4f, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x5f, 0x4e,
	0x4f, 0x5f, 0x43, 0x51, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x4e, 0x44, 0x52, 0x4f, 0x49,
	0x44, 0x5f, 0x4e, 0x4f, 0x5f, 0x43, 0x52, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x4e, 0x44,
	0x52, 0x4f, 0x49, 0x44, 0x5f, 0x4e, 0x4f, 0x5f, 0x43, 0x52, 0x5f, 0x4e, 0x4f, 0x5f, 0x50, 0x52,
	0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x4e,
	0x4f, 0x5f, 0x43, 0x52, 0x10, 0x09, 0x22, 0xbb, 0x01, 0x0a, 0x0c, 0x47, 0x69, 0x74, 0x48, 0x75,
	0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x5f,
	0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x70,
	0x6f, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x6e,
	0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x4e,
	0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x5f, 0x77, 0x61,
	0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68,
	0x65, 0x63, 0x6b, 0x73, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x74,
	0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x24,
	0x0a, 0x0e, 0x73, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x73, 0x68, 0x4b, 0x65, 0x79, 0x53, 0x65,
	0x63, 0x72, 0x65, 0x74, 0x22, 0x0f, 0x0a, 0x0d, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x33, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xa7, 0x02, 0x0a, 0x10, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e,
	0x65, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x70,
	0x75, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x16, 0x0a, 0x06,
	0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65,
	0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3e, 0x0a, 0x1b, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73,
	0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68,
	0x6f, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x72, 0x65, 0x61, 0x64, 0x69,
	0x6e, 0x65, 0x73, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73,
	0x68, 0x6f, 0x6c, 0x64, 0x12, 0x45, 0x0a, 0x1f, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73,
	0x73, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f,
	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1c, 0x72,
	0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x44,
	0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x18, 0x72,
	0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f,
	0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x72,
	0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65,
	0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x06, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x69, 0x73, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61,
	0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22,
	0xdb, 0x06, 0x0a, 0x18, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d,
	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x24, 0x0a, 0x0e,
	0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x55,
	0x72, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x72, 0x61, 0x6e,
	0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x42,
	0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x70,
	0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64,
	0x50, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72,
	0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70,
	0x61, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0d,
	0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63,
	0x68, 0x12, 0x2d, 0x0a, 0x13, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x5f, 0x6c,
	0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x6d, 0x70, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10,
	0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x76, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x6d, 0x70, 0x6c,
	0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x64, 0x69, 0x72,
	0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x62,
	0x64, 0x69, 0x72, 0x12, 0x48, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61,
	0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1e, 0x2e,
	0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x50, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x65, 0x70, 0x52, 0x0e, 0x70,
	0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x5f, 0x0a,
	0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x43, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e,
	0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x6f, 0x6a, 0x65,
	0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3f,
	0x0a, 0x1c, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
	0x73, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x18, 0x0a,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x41, 0x75, 0x74,
	0x68, 0x6f, 0x72, 0x73, 0x41, 0x73, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x12,
	0x50, 0x0a, 0x13, 0x70, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f,
	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61,
	0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50,
	0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x11,
	0x70, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
	0x73, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76,
	0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x12, 0x61, 0x75, 0x74, 0x6f, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x65, 0x63,
	0x72, 0x65, 0x74, 0x1a, 0xc7, 0x01, 0x0a, 0x19, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x4d,
	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12,
	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
	0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x6f, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x67,
	0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x6d, 0x65, 0x50, 0x61, 0x67,
	0x65, 0x12, 0x17, 0x0a, 0x07, 0x67, 0x69, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x06, 0x67, 0x69, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x69,
	0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0b, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xef, 0x03,
	0x0a, 0x18, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e,
	0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0c, 0x67, 0x69,
	0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75,
	0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x5f, 0x72,
	0x65, 0x67, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x68, 0x6f, 0x72,
	0x74, 0x52, 0x65, 0x76, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12, 0x57, 0x0a, 0x0b, 0x67, 0x65, 0x74,
	0x5f, 0x74, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37,
	0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61,
	0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
	0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x67, 0x65, 0x74, 0x54, 0x69, 0x70, 0x52,
	0x65, 0x76, 0x12, 0x5d, 0x0a, 0x0e, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64,
	0x5f, 0x72, 0x65, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x61, 0x75, 0x74,
	0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d,
	0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x52, 0x0c, 0x67, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65,
	0x76, 0x12, 0x5d, 0x0a, 0x0e, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x5f,
	0x72, 0x65, 0x76, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x61, 0x75, 0x74, 0x6f,
	0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
	0x61, 0x6e, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x52, 0x0c, 0x73, 0x65, 0x74, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x76,
	0x1a, 0x4d, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x03,
	0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x64,
	0x69, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x69, 0x72, 0x12, 0x10, 0x0a,
	0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x22,
	0x95, 0x01, 0x0a, 0x19, 0x46, 0x72, 0x65, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x70, 0x6f,
	0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a,
	0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e,
	0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x46, 0x72, 0x65, 0x65, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x05,
	0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75,
	0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69,
	0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xf6, 0x01, 0x0a, 0x22, 0x46, 0x75, 0x63, 0x68,
	0x73, 0x69, 0x61, 0x53, 0x44, 0x4b, 0x41, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x52, 0x65, 0x70,
	0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40,
	0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28,
	0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x61, 0x72, 0x65,
	0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
	0x12, 0x3c, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x26, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x46, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61, 0x53, 0x44, 0x4b, 0x43, 0x68, 0x69, 0x6c,
	0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x25,
	0x0a, 0x0f, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x62, 0x70, 0x5f, 0x72, 0x65, 0x70,
	0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x65, 0x6e, 0x53, 0x64, 0x6b, 0x42,
	0x70, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x29, 0x0a, 0x11, 0x67, 0x65, 0x6e, 0x5f, 0x73, 0x64, 0x6b,
	0x5f, 0x62, 0x70, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0e, 0x67, 0x65, 0x6e, 0x53, 0x64, 0x6b, 0x42, 0x70, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68,
	0x22, 0x5c, 0x0a, 0x18, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x33, 0x52, 0x65, 0x70, 0x6f, 0x4d,
	0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c,
	0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12,
	0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x22, 0xf7,
	0x09, 0x0a, 0x1c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x65,
	0x70, 0x6f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
	0x44, 0x0a, 0x0b, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x50, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x70, 0x79, 0x50,
	0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x67, 0x0a, 0x18, 0x64, 0x65, 0x70, 0x73, 0x5f, 0x6c, 0x6f,
	0x63, 0x61, 0x6c, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f,
	0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x45, 0x50, 0x53, 0x4c, 0x6f,
	0x63, 0x61, 0x6c, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x15, 0x64, 0x65, 0x70, 0x73, 0x4c, 0x6f, 0x63,
	0x61, 0x6c, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x67,
	0x0a, 0x18, 0x64, 0x65, 0x70, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x67, 0x65, 0x72,
	0x72, 0x69, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x44, 0x45, 0x50, 0x53, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x47, 0x65, 0x72, 0x72,
	0x69, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00,
	0x52, 0x15, 0x64, 0x65, 0x70, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x47, 0x65, 0x72, 0x72, 0x69,
	0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x7a, 0x0a, 0x1f, 0x67, 0x69, 0x74, 0x5f, 0x63,
	0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x66,
	0x69, 0x6c, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x47, 0x69,
	0x74, 0x48, 0x75, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x1b, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b,
	0x6f, 0x75, 0x74, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x46, 0x69, 0x6c, 0x65, 0x50, 0x61, 0x72,
	0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0e, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x70,
	0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75,
	0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69,
	0x74, 0x69, 0x6c, 0x65, 0x73, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x48, 0x00, 0x52, 0x0d, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x50, 0x61, 0x72, 0x65,
	0x6e, 0x74, 0x12, 0x41, 0x0a, 0x0a, 0x63, 0x69, 0x70, 0x64, 0x5f, 0x63, 0x68, 0x69, 0x6c, 0x64,
	0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c,
	0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x43, 0x68, 0x69,
	0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x09, 0x63, 0x69, 0x70, 0x64,
	0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x54, 0x0a, 0x11, 0x66, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61,
	0x5f, 0x73, 0x64, 0x6b, 0x5f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x46, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61, 0x53, 0x44, 0x4b, 0x43, 0x68, 0x69,
	0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x0f, 0x66, 0x75, 0x63, 0x68,
	0x73, 0x69, 0x61, 0x53, 0x64, 0x6b, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x57, 0x0a, 0x12, 0x67,
	0x69, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x63, 0x68, 0x69, 0x6c,
	0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f,
	0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65,
	0x63, 0x6b, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x48, 0x01, 0x52, 0x10, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x43,
	0x68, 0x69, 0x6c, 0x64, 0x12, 0x6a, 0x0a, 0x19, 0x67, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63,
	0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x63, 0x68, 0x69, 0x6c,
	0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f,
	0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65,
	0x63, 0x6b, 0x6f, 0x75, 0x74, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x43, 0x68, 0x69, 0x6c, 0x64,
	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x16, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65,
	0x63, 0x6b, 0x6f, 0x75, 0x74, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x43, 0x68, 0x69, 0x6c, 0x64,
	0x12, 0x4a, 0x0a, 0x0d, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x63, 0x68, 0x69, 0x6c,
	0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f,
	0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65,
	0x73, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x0c,
	0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x51, 0x0a, 0x10,
	0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x5f, 0x67, 0x63, 0x73, 0x5f, 0x63, 0x68, 0x69, 0x6c, 0x64,
	0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c,
	0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x47,
	0x43, 0x53, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52,
	0x0e, 0x73, 0x65, 0x6d, 0x76, 0x65, 0x72, 0x47, 0x63, 0x73, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12,
	0x72, 0x0a, 0x1b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x72,
	0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0c,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x62, 0x75, 0x63, 0x6b,
	0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72,
	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x02, 0x52, 0x19, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x62,
	0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c,
	0x74, 0x65, 0x72, 0x12, 0x5d, 0x0a, 0x14, 0x63, 0x69, 0x70, 0x64, 0x5f, 0x72, 0x65, 0x76, 0x69,
	0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x43, 0x49, 0x50, 0x44, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
	0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x02, 0x52, 0x12,
	0x63, 0x69, 0x70, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74,
	0x65, 0x72, 0x42, 0x08, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x42, 0x07, 0x0a, 0x05,
	0x63, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x11, 0x0a, 0x0f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
	0x6e, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xe8, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x70,
	0x79, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3e, 0x0a,
	0x07, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24,
	0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x2e, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x43, 0x0a,
	0x06, 0x63, 0x6f, 0x70, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e,
	0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x43, 0x6f, 0x70, 0x79, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x2e, 0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x70, 0x69,
	0x65, 0x73, 0x1a, 0x4f, 0x0a, 0x09, 0x43, 0x6f, 0x70, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
	0x20, 0x0a, 0x0c, 0x73, 0x72, 0x63, 0x5f, 0x72, 0x65, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x72, 0x63, 0x52, 0x65, 0x6c, 0x50, 0x61, 0x74,
	0x68, 0x12, 0x20, 0x0a, 0x0c, 0x64, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x6c, 0x5f, 0x70, 0x61, 0x74,
	0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x50,
	0x61, 0x74, 0x68, 0x22, 0xbf, 0x01, 0x0a, 0x1b, 0x44, 0x45, 0x50, 0x53, 0x4c, 0x6f, 0x63, 0x61,
	0x6c, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x73, 0x5f, 0x6c, 0x6f, 0x63, 0x61,
	0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f,
	0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x45, 0x50, 0x53, 0x4c, 0x6f,
	0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52,
	0x09, 0x64, 0x65, 0x70, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x35, 0x0a, 0x06, 0x67, 0x69,
	0x74, 0x68, 0x75, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74,
	0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74,
	0x48, 0x75, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x67, 0x69, 0x74, 0x68, 0x75,
	0x62, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75,
	0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x6f, 0x72, 0x6b, 0x52, 0x65,
	0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x9b, 0x01, 0x0a, 0x1b, 0x44, 0x45, 0x50, 0x53, 0x4c, 0x6f,
	0x63, 0x61, 0x6c, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x73, 0x5f, 0x6c, 0x6f,
	0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x6f,
	0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x45, 0x50, 0x53,
	0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x52, 0x09, 0x64, 0x65, 0x70, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x35, 0x0a, 0x06,
	0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61,
	0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47,
	0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x67, 0x65, 0x72,
	0x72, 0x69, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x1d, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b,
	0x6f, 0x75, 0x74, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x0c, 0x67, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x65,
	0x63, 0x6b, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x75,
	0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69,
	0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f,
	0x75, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x66, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x5f,
	0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x6f, 0x72, 0x6b, 0x52,
	0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x22, 0x92, 0x02, 0x0a, 0x21, 0x47, 0x69, 0x74, 0x43, 0x68,
	0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x46, 0x69, 0x6c, 0x65,
	0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x51, 0x0a, 0x0c,
	0x67, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74,
	0x47, 0x69, 0x74, 0x48, 0x75, 0x62, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x52, 0x0b, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x12,
	0x48, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x74,
	0x65, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x6f,
	0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x65, 0x55,
	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x65, 0x70, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x55, 0x70,
	0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x50, 0x0a, 0x13, 0x70, 0x72, 0x65,
	0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c,
	0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f,
	0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x11, 0x70, 0x72, 0x65, 0x55, 0x70, 0x6c,
	0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x13,
	0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x07, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x33, 0x0a,
	0x03, 0x64, 0x65, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74,
	0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x65, 0x70,
	0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x03, 0x64,
	0x65, 0x70, 0x12, 0x35, 0x0a, 0x06, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x72, 0x72, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x52, 0x06, 0x67, 0x65, 0x72, 0x72, 0x69, 0x74, 0x22, 0x8a, 0x01, 0x0a, 0x0d, 0x47, 0x69,
	0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x62,
	0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61,
	0x6e, 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x46,
	0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x03,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69,
	0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64,
	0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0xa7, 0x03, 0x0a, 0x15, 0x44, 0x45, 0x50, 0x53, 0x4c,
	0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x12, 0x4b, 0x0a, 0x0c, 0x67, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c,
	0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63,
	0x6b, 0x6f, 0x75, 0x74, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x52, 0x0b, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x12, 0x1d, 0x0a,
	0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c,
	0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x64, 0x69, 0x72, 0x18, 0x03, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x53, 0x75, 0x62, 0x64, 0x69, 0x72, 0x12,
	0x23, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68,
	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74,
	0x50, 0x61, 0x74, 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f,
	0x73, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x63, 0x6c, 0x69,
	0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x48, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x5f, 0x75,
	0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
	0x0e, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x65,
	0x70, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x65, 0x70,
	0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x18, 0x07,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x75, 0x6e, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x50,
	0x0a, 0x13, 0x70, 0x72, 0x65, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6d,
	0x6d, 0x61, 0x6e, 0x64, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75,
	0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72,
	0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x11, 0x70,
	0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x73,
	0x22, 0x95, 0x01, 0x0a, 0x17, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74,
	0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0c,
	0x67, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74,
	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b,
	0x6f, 0x75, 0x74, 0x12, 0x33, 0x0a, 0x03, 0x64, 0x65, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x52, 0x03, 0x64, 0x65, 0x70, 0x22, 0x56, 0x0a, 0x14, 0x46, 0x72, 0x65, 0x65,
	0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x12, 0x3e, 0x0a, 0x07, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x50, 0x61, 0x72, 0x65, 0x6e,
	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73,
	0x22, 0xbc, 0x01, 0x0a, 0x0f, 0x43, 0x49, 0x50, 0x44, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x69,
	0x74, 0x69, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0b, 0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x12, 0x26, 0x0a,
	0x0f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x61, 0x67,
	0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
	0x49, 0x64, 0x54, 0x61, 0x67, 0x12, 0x38, 0x0a, 0x19, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
	0x6e, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x61, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x70, 0x5f, 0x6b,
	0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
	0x6f, 0x6e, 0x49, 0x64, 0x54, 0x61, 0x67, 0x53, 0x74, 0x72, 0x69, 0x70, 0x4b, 0x65, 0x79, 0x22,
	0xe9, 0x01, 0x0a, 0x15, 0x46, 0x75, 0x63, 0x68, 0x73, 0x69, 0x61, 0x53, 0x44, 0x4b, 0x43, 0x68,
	0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x63,
	0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4d, 0x61, 0x63, 0x53, 0x64,
	0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18,
	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74,
	0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x6e, 0x75, 0x78,
	0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x61, 0x74,
	0x65, 0x73, 0x74, 0x4c, 0x69, 0x6e, 0x75, 0x78, 0x50, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0f,
	0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x63, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x61, 0x63,
	0x50, 0x61, 0x74, 0x68, 0x12, 0x35, 0x0a, 0x17, 0x74, 0x61, 0x72, 0x62, 0x61, 0x6c, 0x6c, 0x5f,
	0x6c, 0x69, 0x6e, 0x75, 0x78, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x74, 0x6d, 0x70, 0x6c, 0x18,
	0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x74, 0x61, 0x72, 0x62, 0x61, 0x6c, 0x6c, 0x4c, 0x69,
	0x6e, 0x75, 0x78, 0x50, 0x61, 0x74, 0x68, 0x54, 0x6d, 0x70, 0x6c, 0x22, 0x96, 0x01, 0x0a, 0x14,
	0x53, 0x65, 0x6d, 0x56, 0x65, 0x72, 0x47, 0x43, 0x53, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x12, 0x31, 0x0a, 0x03, 0x67, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x47, 0x43, 0x53, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x52, 0x03, 0x67, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x68, 0x6f, 0x72, 0x74,
	0x5f, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x76, 0x52, 0x65, 0x67, 0x65, 0x78, 0x12,
	0x23, 0x0a, 0x0d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78,
	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52,
	0x65, 0x67, 0x65, 0x78, 0x22, 0x76, 0x0a, 0x0e, 0x47, 0x43, 0x53, 0x43, 0x68, 0x69, 0x6c, 0x64,
	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x62, 0x75,
	0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x63, 0x73, 0x42,
	0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x63, 0x73, 0x5f, 0x70, 0x61, 0x74,
	0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x63, 0x73, 0x50, 0x61, 0x74, 0x68,
	0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x5f,
	0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x76,
	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x52, 0x65, 0x67, 0x65, 0x78, 0x22, 0x5f, 0x0a, 0x16,
	0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64,
	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x0c, 0x67, 0x69, 0x74, 0x5f, 0x63, 0x68,
	0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61,
	0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47,
	0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x52, 0x0b, 0x67, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x22, 0xa6, 0x01,
	0x0a, 0x1c, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x47, 0x69, 0x74,
	0x48, 0x75, 0x62, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4a,
	0x0a, 0x0c, 0x67, 0x69, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f,
	0x75, 0x74, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x67,
	0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65,
	0x70, 0x6f, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
	0x72, 0x65, 0x70, 0x6f, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x70,
	0x6f, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65,
	0x70, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x12, 0x47, 0x69, 0x74, 0x69, 0x6c, 0x65,
	0x73, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x07,
	0x67, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e,
	0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x47, 0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x67,
	0x69, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0xc3, 0x05, 0x0a, 0x0e, 0x4e,
	0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a,
	0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c,
	0x65, 0x76, 0x65, 0x6c, 0x12, 0x42, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65,
	0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c,
	0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65,
	0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52,
	0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69,
	0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f,
	0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x4e,
	0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52,
	0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x39, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x04,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66,
	0x69, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x04, 0x63, 0x68, 0x61,
	0x74, 0x12, 0x45, 0x0a, 0x08, 0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x18, 0x05, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x4e, 0x6f,
	0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x08,
	0x6d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x12, 0x3f, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x73,
	0x75, 0x62, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72,
	0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x75, 0x62, 0x53, 0x75,
	0x62, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48,
	0x00, 0x52, 0x06, 0x70, 0x75, 0x62, 0x73, 0x75, 0x62, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62,
	0x6a, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a,
	0x65, 0x63, 0x74, 0x22, 0x43, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12,
	0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4c, 0x45, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45,
	0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e,
	0x47, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x03, 0x12, 0x09, 0x0a,
	0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x04, 0x22, 0xbb, 0x01, 0x0a, 0x07, 0x4d, 0x73, 0x67,
	0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x53, 0x53, 0x55, 0x45, 0x5f, 0x55, 0x50,
	0x44, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e,
	0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x4f, 0x44,
	0x45, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x45,
	0x57, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x4e,
	0x45, 0x57, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14,
	0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x41,
	0x49, 0x4c, 0x45, 0x44, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x41, 0x46, 0x45, 0x54, 0x59,
	0x5f, 0x54, 0x48, 0x52, 0x4f, 0x54, 0x54, 0x4c, 0x45, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x53,
	0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x07,
	0x12, 0x14, 0x0a, 0x10, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48, 0x52, 0x4f,
	0x54, 0x54, 0x4c, 0x45, 0x10, 0x08, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x22, 0x2d, 0x0a, 0x13, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65,
	0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6d, 0x61, 0x69, 0x6c,
	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x22,
	0x2d, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x69, 0x64,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x6f, 0x6d, 0x49, 0x64, 0x22, 0x90,
	0x01, 0x0a, 0x16, 0x4d, 0x6f, 0x6e, 0x6f, 0x72, 0x61, 0x69, 0x6c, 0x4e, 0x6f, 0x74, 0x69, 0x66,
	0x69, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f,
	0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a,
	0x65, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x63, 0x18,
	0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x63, 0x63, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6d,
	0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63,
	0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62,
	0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c,
	0x73, 0x22, 0x2c, 0x0a, 0x14, 0x50, 0x75, 0x62, 0x53, 0x75, 0x62, 0x4e, 0x6f, 0x74, 0x69, 0x66,
	0x69, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70,
	0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22,
	0x56, 0x0a, 0x0e, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x5f, 0x63, 0x6f, 0x75,
	0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70,
	0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77,
	0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x69, 0x6d,
	0x65, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e,
	0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
	0x38, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22,
	0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x3a, 0x0a, 0x06, 0x70, 0x61, 0x72,
	0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x6f,
	0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x73,
	0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x70,
	0x61, 0x72, 0x65, 0x6e, 0x74, 0x22, 0x37, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
	0x46, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61,
	0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0xc0,
	0x01, 0x0a, 0x10, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69,
	0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72,
	0x79, 0x12, 0x44, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18,
	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c,
	0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69,
	0x76, 0x65, 0x44, 0x65, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x74, 0x72, 0x61,
	0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6e, 0x64, 0x5f,
	0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28,
	0x09, 0x52, 0x0e, 0x66, 0x69, 0x6e, 0x64, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63,
	0x65, 0x22, 0xb2, 0x01, 0x0a, 0x11, 0x47, 0x69, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75,
	0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63,
	0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12,
	0x19, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x65,
	0x76, 0x5f, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x6d, 0x70, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x0b, 0x72, 0x65, 0x76, 0x4c, 0x69, 0x6e, 0x6b, 0x54, 0x6d, 0x70, 0x6c, 0x12, 0x46,
	0x0a, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x04,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69,
	0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64,
	0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x1f, 0x42, 0x75, 0x69, 0x6c, 0x64,
	0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69,
	0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72,
	0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f,
	0x6a, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x30, 0x0a, 0x14,
	0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f,
	0x74, 0x6d, 0x70, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x75, 0x69, 0x6c,
	0x64, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x12, 0x18,
	0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x50, 0x0a, 0x18, 0x43, 0x49, 0x50, 0x44,
	0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18,
	0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x1a,
	0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09,
	0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xa4, 0x01, 0x0a, 0x0f, 0x50,
	0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4e,
	0x0a, 0x0c, 0x63, 0x69, 0x70, 0x64, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e,
	0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64,
	0x43, 0x49, 0x50, 0x44, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x52, 0x0b, 0x63, 0x69, 0x70, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x41,
	0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
	0x27, 0x2e, 0x61, 0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x2e, 0x50, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61,
	0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
	0x64, 0x22, 0x7d, 0x0a, 0x16, 0x50, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f,
	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63,
	0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f,
	0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x77, 0x64, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x03, 0x63, 0x77, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03,
	0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x67, 0x6e,
	0x6f, 0x72, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
	0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65,
	0x22, 0x5e, 0x0a, 0x1a, 0x50, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x49, 0x50,
	0x44, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12,
	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
	0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
	0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
	0x22, 0x3a, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x63,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75,
	0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2a, 0xfa, 0x02, 0x0a,
	0x0d, 0x50, 0x72, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x65, 0x70, 0x12, 0x19,
	0x0a, 0x15, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x47, 0x45, 0x4e,
	0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x4e, 0x47,
	0x4c, 0x45, 0x5f, 0x47, 0x4e, 0x5f, 0x54, 0x4f, 0x5f, 0x42, 0x50, 0x10, 0x01, 0x12, 0x17, 0x0a,
	0x13, 0x41, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x43, 0x48, 0x52, 0x4f,
	0x4d, 0x49, 0x55, 0x4d, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x47, 0x4f, 0x5f, 0x47, 0x45, 0x4e,
	0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x49, 0x50, 0x44, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17,
	0x46, 0x4c, 0x55, 0x54, 0x54, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f,
	0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x53, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20, 0x46, 0x4c, 0x55,
	0x54, 0x54, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x53, 0x43, 0x52,
	0x49, 0x50, 0x54, 0x53, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x44, 0x41, 0x52, 0x54, 0x10, 0x05, 0x12,
	0x27, 0x0a, 0x23, 0x46, 0x4c, 0x55, 0x54, 0x54, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x43, 0x45, 0x4e,
	0x53, 0x45, 0x5f, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x53, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x46,
	0x55, 0x43, 0x48, 0x53, 0x49, 0x41, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x4b, 0x49, 0x41,
	0x5f, 0x47, 0x4e, 0x5f, 0x54, 0x4f, 0x5f, 0x42, 0x50, 0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x54,
	0x52, 0x41, 0x49, 0x4e, 0x5f, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x10, 0x08, 0x12, 0x20, 0x0a, 0x1c,
	0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x4c, 0x55, 0x54, 0x54, 0x45, 0x52, 0x5f, 0x44,
	0x45, 0x50, 0x53, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x44, 0x41, 0x52, 0x54, 0x10, 0x09, 0x12, 0x25,
	0x0a, 0x21, 0x56, 0x55, 0x4c, 0x4b, 0x41, 0x4e, 0x5f, 0x44, 0x45, 0x50, 0x53, 0x5f, 0x55, 0x50,
	0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53,
	0x41, 0x47, 0x45, 0x10, 0x0a, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f,
	0x42, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x53, 0x53, 0x4c, 0x10, 0x0b, 0x12, 0x1c, 0x0a, 0x18, 0x43,
	0x48, 0x52, 0x4f, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x57, 0x45, 0x42,
	0x47, 0x50, 0x55, 0x5f, 0x43, 0x54, 0x53, 0x10, 0x0c, 0x42, 0x26, 0x5a, 0x24, 0x67, 0x6f, 0x2e,
	0x73, 0x6b, 0x69, 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x61,
	0x75, 0x74, 0x6f, 0x72, 0x6f, 0x6c, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_config_proto_rawDescOnce sync.Once
	file_config_proto_rawDescData = file_config_proto_rawDesc
)

func file_config_proto_rawDescGZIP() []byte {
	file_config_proto_rawDescOnce.Do(func() {
		file_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_config_proto_rawDescData)
	})
	return file_config_proto_rawDescData
}

var file_config_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
var file_config_proto_msgTypes = make([]protoimpl.MessageInfo, 48)
var file_config_proto_goTypes = []interface{}{
	(PreUploadStep)(0),                                         // 0: autoroll.config.PreUploadStep
	(CommitMsgConfig_BuiltIn)(0),                               // 1: autoroll.config.CommitMsgConfig.BuiltIn
	(GerritConfig_Config)(0),                                   // 2: autoroll.config.GerritConfig.Config
	(NotifierConfig_LogLevel)(0),                               // 3: autoroll.config.NotifierConfig.LogLevel
	(NotifierConfig_MsgType)(0),                                // 4: autoroll.config.NotifierConfig.MsgType
	(*Config)(nil),                                             // 5: autoroll.config.Config
	(*CommitMsgConfig)(nil),                                    // 6: autoroll.config.CommitMsgConfig
	(*GerritConfig)(nil),                                       // 7: autoroll.config.GerritConfig
	(*GitHubConfig)(nil),                                       // 8: autoroll.config.GitHubConfig
	(*Google3Config)(nil),                                      // 9: autoroll.config.Google3Config
	(*KubernetesConfig)(nil),                                   // 10: autoroll.config.KubernetesConfig
	(*AndroidRepoManagerConfig)(nil),                           // 11: autoroll.config.AndroidRepoManagerConfig
	(*CommandRepoManagerConfig)(nil),                           // 12: autoroll.config.CommandRepoManagerConfig
	(*FreeTypeRepoManagerConfig)(nil),                          // 13: autoroll.config.FreeTypeRepoManagerConfig
	(*FuchsiaSDKAndroidRepoManagerConfig)(nil),                 // 14: autoroll.config.FuchsiaSDKAndroidRepoManagerConfig
	(*Google3RepoManagerConfig)(nil),                           // 15: autoroll.config.Google3RepoManagerConfig
	(*ParentChildRepoManagerConfig)(nil),                       // 16: autoroll.config.ParentChildRepoManagerConfig
	(*CopyParentConfig)(nil),                                   // 17: autoroll.config.CopyParentConfig
	(*DEPSLocalGitHubParentConfig)(nil),                        // 18: autoroll.config.DEPSLocalGitHubParentConfig
	(*DEPSLocalGerritParentConfig)(nil),                        // 19: autoroll.config.DEPSLocalGerritParentConfig
	(*GitCheckoutGitHubParentConfig)(nil),                      // 20: autoroll.config.GitCheckoutGitHubParentConfig
	(*GitCheckoutGitHubFileParentConfig)(nil),                  // 21: autoroll.config.GitCheckoutGitHubFileParentConfig
	(*GitilesParentConfig)(nil),                                // 22: autoroll.config.GitilesParentConfig
	(*GitilesConfig)(nil),                                      // 23: autoroll.config.GitilesConfig
	(*DEPSLocalParentConfig)(nil),                              // 24: autoroll.config.DEPSLocalParentConfig
	(*GitCheckoutParentConfig)(nil),                            // 25: autoroll.config.GitCheckoutParentConfig
	(*FreeTypeParentConfig)(nil),                               // 26: autoroll.config.FreeTypeParentConfig
	(*CIPDChildConfig)(nil),                                    // 27: autoroll.config.CIPDChildConfig
	(*FuchsiaSDKChildConfig)(nil),                              // 28: autoroll.config.FuchsiaSDKChildConfig
	(*SemVerGCSChildConfig)(nil),                               // 29: autoroll.config.SemVerGCSChildConfig
	(*GCSChildConfig)(nil),                                     // 30: autoroll.config.GCSChildConfig
	(*GitCheckoutChildConfig)(nil),                             // 31: autoroll.config.GitCheckoutChildConfig
	(*GitCheckoutGitHubChildConfig)(nil),                       // 32: autoroll.config.GitCheckoutGitHubChildConfig
	(*GitilesChildConfig)(nil),                                 // 33: autoroll.config.GitilesChildConfig
	(*NotifierConfig)(nil),                                     // 34: autoroll.config.NotifierConfig
	(*EmailNotifierConfig)(nil),                                // 35: autoroll.config.EmailNotifierConfig
	(*ChatNotifierConfig)(nil),                                 // 36: autoroll.config.ChatNotifierConfig
	(*MonorailNotifierConfig)(nil),                             // 37: autoroll.config.MonorailNotifierConfig
	(*PubSubNotifierConfig)(nil),                               // 38: autoroll.config.PubSubNotifierConfig
	(*ThrottleConfig)(nil),                                     // 39: autoroll.config.ThrottleConfig
	(*TransitiveDepConfig)(nil),                                // 40: autoroll.config.TransitiveDepConfig
	(*VersionFileConfig)(nil),                                  // 41: autoroll.config.VersionFileConfig
	(*DependencyConfig)(nil),                                   // 42: autoroll.config.DependencyConfig
	(*GitCheckoutConfig)(nil),                                  // 43: autoroll.config.GitCheckoutConfig
	(*BuildbucketRevisionFilterConfig)(nil),                    // 44: autoroll.config.BuildbucketRevisionFilterConfig
	(*CIPDRevisionFilterConfig)(nil),                           // 45: autoroll.config.CIPDRevisionFilterConfig
	(*PreUploadConfig)(nil),                                    // 46: autoroll.config.PreUploadConfig
	(*PreUploadCommandConfig)(nil),                             // 47: autoroll.config.PreUploadCommandConfig
	(*PreUploadCIPDPackageConfig)(nil),                         // 48: autoroll.config.PreUploadCIPDPackageConfig
	(*Configs)(nil),                                            // 49: autoroll.config.Configs
	(*AndroidRepoManagerConfig_ProjectMetadataFileConfig)(nil), // 50: autoroll.config.AndroidRepoManagerConfig.ProjectMetadataFileConfig
	(*CommandRepoManagerConfig_CommandConfig)(nil),             // 51: autoroll.config.CommandRepoManagerConfig.CommandConfig
	(*CopyParentConfig_CopyEntry)(nil),                         // 52: autoroll.config.CopyParentConfig.CopyEntry
}
var file_config_proto_depIdxs = []int32{
	6,  // 0: autoroll.config.Config.commit_msg:type_name -> autoroll.config.CommitMsgConfig
	7,  // 1: autoroll.config.Config.gerrit:type_name -> autoroll.config.GerritConfig
	8,  // 2: autoroll.config.Config.github:type_name -> autoroll.config.GitHubConfig
	9,  // 3: autoroll.config.Config.google3:type_name -> autoroll.config.Google3Config
	10, // 4: autoroll.config.Config.kubernetes:type_name -> autoroll.config.KubernetesConfig
	16, // 5: autoroll.config.Config.parent_child_repo_manager:type_name -> autoroll.config.ParentChildRepoManagerConfig
	11, // 6: autoroll.config.Config.android_repo_manager:type_name -> autoroll.config.AndroidRepoManagerConfig
	12, // 7: autoroll.config.Config.command_repo_manager:type_name -> autoroll.config.CommandRepoManagerConfig
	13, // 8: autoroll.config.Config.freetype_repo_manager:type_name -> autoroll.config.FreeTypeRepoManagerConfig
	14, // 9: autoroll.config.Config.fuchsia_sdk_android_repo_manager:type_name -> autoroll.config.FuchsiaSDKAndroidRepoManagerConfig
	15, // 10: autoroll.config.Config.google3_repo_manager:type_name -> autoroll.config.Google3RepoManagerConfig
	34, // 11: autoroll.config.Config.notifiers:type_name -> autoroll.config.NotifierConfig
	39, // 12: autoroll.config.Config.safety_throttle:type_name -> autoroll.config.ThrottleConfig
	40, // 13: autoroll.config.Config.transitive_deps:type_name -> autoroll.config.TransitiveDepConfig
	1,  // 14: autoroll.config.CommitMsgConfig.built_in:type_name -> autoroll.config.CommitMsgConfig.BuiltIn
	2,  // 15: autoroll.config.GerritConfig.config:type_name -> autoroll.config.GerritConfig.Config
	0,  // 16: autoroll.config.AndroidRepoManagerConfig.pre_upload_steps:type_name -> autoroll.config.PreUploadStep
	50, // 17: autoroll.config.AndroidRepoManagerConfig.metadata:type_name -> autoroll.config.AndroidRepoManagerConfig.ProjectMetadataFileConfig
	46, // 18: autoroll.config.AndroidRepoManagerConfig.pre_upload_commands:type_name -> autoroll.config.PreUploadConfig
	43, // 19: autoroll.config.CommandRepoManagerConfig.git_checkout:type_name -> autoroll.config.GitCheckoutConfig
	51, // 20: autoroll.config.CommandRepoManagerConfig.get_tip_rev:type_name -> autoroll.config.CommandRepoManagerConfig.CommandConfig
	51, // 21: autoroll.config.CommandRepoManagerConfig.get_pinned_rev:type_name -> autoroll.config.CommandRepoManagerConfig.CommandConfig
	51, // 22: autoroll.config.CommandRepoManagerConfig.set_pinned_rev:type_name -> autoroll.config.CommandRepoManagerConfig.CommandConfig
	26, // 23: autoroll.config.FreeTypeRepoManagerConfig.parent:type_name -> autoroll.config.FreeTypeParentConfig
	33, // 24: autoroll.config.FreeTypeRepoManagerConfig.child:type_name -> autoroll.config.GitilesChildConfig
	25, // 25: autoroll.config.FuchsiaSDKAndroidRepoManagerConfig.parent:type_name -> autoroll.config.GitCheckoutParentConfig
	28, // 26: autoroll.config.FuchsiaSDKAndroidRepoManagerConfig.child:type_name -> autoroll.config.FuchsiaSDKChildConfig
	17, // 27: autoroll.config.ParentChildRepoManagerConfig.copy_parent:type_name -> autoroll.config.CopyParentConfig
	18, // 28: autoroll.config.ParentChildRepoManagerConfig.deps_local_github_parent:type_name -> autoroll.config.DEPSLocalGitHubParentConfig
	19, // 29: autoroll.config.ParentChildRepoManagerConfig.deps_local_gerrit_parent:type_name -> autoroll.config.DEPSLocalGerritParentConfig
	21, // 30: autoroll.config.ParentChildRepoManagerConfig.git_checkout_github_file_parent:type_name -> autoroll.config.GitCheckoutGitHubFileParentConfig
	22, // 31: autoroll.config.ParentChildRepoManagerConfig.gitiles_parent:type_name -> autoroll.config.GitilesParentConfig
	27, // 32: autoroll.config.ParentChildRepoManagerConfig.cipd_child:type_name -> autoroll.config.CIPDChildConfig
	28, // 33: autoroll.config.ParentChildRepoManagerConfig.fuchsia_sdk_child:type_name -> autoroll.config.FuchsiaSDKChildConfig
	31, // 34: autoroll.config.ParentChildRepoManagerConfig.git_checkout_child:type_name -> autoroll.config.GitCheckoutChildConfig
	32, // 35: autoroll.config.ParentChildRepoManagerConfig.git_checkout_github_child:type_name -> autoroll.config.GitCheckoutGitHubChildConfig
	33, // 36: autoroll.config.ParentChildRepoManagerConfig.gitiles_child:type_name -> autoroll.config.GitilesChildConfig
	29, // 37: autoroll.config.ParentChildRepoManagerConfig.semver_gcs_child:type_name -> autoroll.config.SemVerGCSChildConfig
	44, // 38: autoroll.config.ParentChildRepoManagerConfig.buildbucket_revision_filter:type_name -> autoroll.config.BuildbucketRevisionFilterConfig
	45, // 39: autoroll.config.ParentChildRepoManagerConfig.cipd_revision_filter:type_name -> autoroll.config.CIPDRevisionFilterConfig
	22, // 40: autoroll.config.CopyParentConfig.gitiles:type_name -> autoroll.config.GitilesParentConfig
	52, // 41: autoroll.config.CopyParentConfig.copies:type_name -> autoroll.config.CopyParentConfig.CopyEntry
	24, // 42: autoroll.config.DEPSLocalGitHubParentConfig.deps_local:type_name -> autoroll.config.DEPSLocalParentConfig
	8,  // 43: autoroll.config.DEPSLocalGitHubParentConfig.github:type_name -> autoroll.config.GitHubConfig
	24, // 44: autoroll.config.DEPSLocalGerritParentConfig.deps_local:type_name -> autoroll.config.DEPSLocalParentConfig
	7,  // 45: autoroll.config.DEPSLocalGerritParentConfig.gerrit:type_name -> autoroll.config.GerritConfig
	25, // 46: autoroll.config.GitCheckoutGitHubParentConfig.git_checkout:type_name -> autoroll.config.GitCheckoutParentConfig
	20, // 47: autoroll.config.GitCheckoutGitHubFileParentConfig.git_checkout:type_name -> autoroll.config.GitCheckoutGitHubParentConfig
	0,  // 48: autoroll.config.GitCheckoutGitHubFileParentConfig.pre_upload_steps:type_name -> autoroll.config.PreUploadStep
	46, // 49: autoroll.config.GitCheckoutGitHubFileParentConfig.pre_upload_commands:type_name -> autoroll.config.PreUploadConfig
	23, // 50: autoroll.config.GitilesParentConfig.gitiles:type_name -> autoroll.config.GitilesConfig
	42, // 51: autoroll.config.GitilesParentConfig.dep:type_name -> autoroll.config.DependencyConfig
	7,  // 52: autoroll.config.GitilesParentConfig.gerrit:type_name -> autoroll.config.GerritConfig
	41, // 53: autoroll.config.GitilesConfig.dependencies:type_name -> autoroll.config.VersionFileConfig
	25, // 54: autoroll.config.DEPSLocalParentConfig.git_checkout:type_name -> autoroll.config.GitCheckoutParentConfig
	0,  // 55: autoroll.config.DEPSLocalParentConfig.pre_upload_steps:type_name -> autoroll.config.PreUploadStep
	46, // 56: autoroll.config.DEPSLocalParentConfig.pre_upload_commands:type_name -> autoroll.config.PreUploadConfig
	43, // 57: autoroll.config.GitCheckoutParentConfig.git_checkout:type_name -> autoroll.config.GitCheckoutConfig
	42, // 58: autoroll.config.GitCheckoutParentConfig.dep:type_name -> autoroll.config.DependencyConfig
	22, // 59: autoroll.config.FreeTypeParentConfig.gitiles:type_name -> autoroll.config.GitilesParentConfig
	30, // 60: autoroll.config.SemVerGCSChildConfig.gcs:type_name -> autoroll.config.GCSChildConfig
	43, // 61: autoroll.config.GitCheckoutChildConfig.git_checkout:type_name -> autoroll.config.GitCheckoutConfig
	31, // 62: autoroll.config.GitCheckoutGitHubChildConfig.git_checkout:type_name -> autoroll.config.GitCheckoutChildConfig
	23, // 63: autoroll.config.GitilesChildConfig.gitiles:type_name -> autoroll.config.GitilesConfig
	3,  // 64: autoroll.config.NotifierConfig.log_level:type_name -> autoroll.config.NotifierConfig.LogLevel
	4,  // 65: autoroll.config.NotifierConfig.msg_type:type_name -> autoroll.config.NotifierConfig.MsgType
	35, // 66: autoroll.config.NotifierConfig.email:type_name -> autoroll.config.EmailNotifierConfig
	36, // 67: autoroll.config.NotifierConfig.chat:type_name -> autoroll.config.ChatNotifierConfig
	37, // 68: autoroll.config.NotifierConfig.monorail:type_name -> autoroll.config.MonorailNotifierConfig
	38, // 69: autoroll.config.NotifierConfig.pubsub:type_name -> autoroll.config.PubSubNotifierConfig
	41, // 70: autoroll.config.TransitiveDepConfig.child:type_name -> autoroll.config.VersionFileConfig
	41, // 71: autoroll.config.TransitiveDepConfig.parent:type_name -> autoroll.config.VersionFileConfig
	41, // 72: autoroll.config.DependencyConfig.primary:type_name -> autoroll.config.VersionFileConfig
	40, // 73: autoroll.config.DependencyConfig.transitive:type_name -> autoroll.config.TransitiveDepConfig
	41, // 74: autoroll.config.GitCheckoutConfig.dependencies:type_name -> autoroll.config.VersionFileConfig
	48, // 75: autoroll.config.PreUploadConfig.cipd_package:type_name -> autoroll.config.PreUploadCIPDPackageConfig
	47, // 76: autoroll.config.PreUploadConfig.command:type_name -> autoroll.config.PreUploadCommandConfig
	5,  // 77: autoroll.config.Configs.config:type_name -> autoroll.config.Config
	78, // [78:78] is the sub-list for method output_type
	78, // [78:78] is the sub-list for method input_type
	78, // [78:78] is the sub-list for extension type_name
	78, // [78:78] is the sub-list for extension extendee
	0,  // [0:78] is the sub-list for field type_name
}

func init() { file_config_proto_init() }
func file_config_proto_init() {
	if File_config_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Config); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CommitMsgConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GerritConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitHubConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Google3Config); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*KubernetesConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AndroidRepoManagerConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CommandRepoManagerConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FreeTypeRepoManagerConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FuchsiaSDKAndroidRepoManagerConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Google3RepoManagerConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ParentChildRepoManagerConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CopyParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DEPSLocalGitHubParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DEPSLocalGerritParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitCheckoutGitHubParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitCheckoutGitHubFileParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitilesParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitilesConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DEPSLocalParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitCheckoutParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FreeTypeParentConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CIPDChildConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FuchsiaSDKChildConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SemVerGCSChildConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GCSChildConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitCheckoutChildConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitCheckoutGitHubChildConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitilesChildConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NotifierConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*EmailNotifierConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ChatNotifierConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MonorailNotifierConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PubSubNotifierConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ThrottleConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TransitiveDepConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VersionFileConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DependencyConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*GitCheckoutConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BuildbucketRevisionFilterConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CIPDRevisionFilterConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PreUploadConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PreUploadCommandConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*PreUploadCIPDPackageConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Configs); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AndroidRepoManagerConfig_ProjectMetadataFileConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CommandRepoManagerConfig_CommandConfig); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_config_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*CopyParentConfig_CopyEntry); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_config_proto_msgTypes[0].OneofWrappers = []interface{}{
		(*Config_Gerrit)(nil),
		(*Config_Github)(nil),
		(*Config_Google3)(nil),
		(*Config_ParentChildRepoManager)(nil),
		(*Config_AndroidRepoManager)(nil),
		(*Config_CommandRepoManager)(nil),
		(*Config_FreetypeRepoManager)(nil),
		(*Config_FuchsiaSdkAndroidRepoManager)(nil),
		(*Config_Google3RepoManager)(nil),
	}
	file_config_proto_msgTypes[1].OneofWrappers = []interface{}{
		(*CommitMsgConfig_BuiltIn_)(nil),
		(*CommitMsgConfig_Custom)(nil),
	}
	file_config_proto_msgTypes[11].OneofWrappers = []interface{}{
		(*ParentChildRepoManagerConfig_CopyParent)(nil),
		(*ParentChildRepoManagerConfig_DepsLocalGithubParent)(nil),
		(*ParentChildRepoManagerConfig_DepsLocalGerritParent)(nil),
		(*ParentChildRepoManagerConfig_GitCheckoutGithubFileParent)(nil),
		(*ParentChildRepoManagerConfig_GitilesParent)(nil),
		(*ParentChildRepoManagerConfig_CipdChild)(nil),
		(*ParentChildRepoManagerConfig_FuchsiaSdkChild)(nil),
		(*ParentChildRepoManagerConfig_GitCheckoutChild)(nil),
		(*ParentChildRepoManagerConfig_GitCheckoutGithubChild)(nil),
		(*ParentChildRepoManagerConfig_GitilesChild)(nil),
		(*ParentChildRepoManagerConfig_SemverGcsChild)(nil),
		(*ParentChildRepoManagerConfig_BuildbucketRevisionFilter)(nil),
		(*ParentChildRepoManagerConfig_CipdRevisionFilter)(nil),
	}
	file_config_proto_msgTypes[29].OneofWrappers = []interface{}{
		(*NotifierConfig_Email)(nil),
		(*NotifierConfig_Chat)(nil),
		(*NotifierConfig_Monorail)(nil),
		(*NotifierConfig_Pubsub)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_config_proto_rawDesc,
			NumEnums:      5,
			NumMessages:   48,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_config_proto_goTypes,
		DependencyIndexes: file_config_proto_depIdxs,
		EnumInfos:         file_config_proto_enumTypes,
		MessageInfos:      file_config_proto_msgTypes,
	}.Build()
	File_config_proto = out.File
	file_config_proto_rawDesc = nil
	file_config_proto_goTypes = nil
	file_config_proto_depIdxs = nil
}
