// Copyright 2017 The TensorFlow Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =============================================================================

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0
// 	protoc        v3.12.4
// source: tensorflow_metadata/proto/v0/schema.proto

package v0

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

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

// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4

// LifecycleStage. Only UNKNOWN_STAGE, BETA, and PRODUCTION features are
// actually validated.
// PLANNED, ALPHA, and DEBUG are treated as DEPRECATED.
type LifecycleStage int32

const (
	LifecycleStage_UNKNOWN_STAGE LifecycleStage = 0 // Unknown stage.
	LifecycleStage_PLANNED       LifecycleStage = 1 // Planned feature, may not be created yet.
	LifecycleStage_ALPHA         LifecycleStage = 2 // Prototype feature, not used in experiments yet.
	LifecycleStage_BETA          LifecycleStage = 3 // Used in user-facing experiments.
	LifecycleStage_PRODUCTION    LifecycleStage = 4 // Used in a significant fraction of user traffic.
	LifecycleStage_DEPRECATED    LifecycleStage = 5 // No longer supported: do not use in new models.
	LifecycleStage_DEBUG_ONLY    LifecycleStage = 6 // Only exists for debugging purposes.
)

// Enum value maps for LifecycleStage.
var (
	LifecycleStage_name = map[int32]string{
		0: "UNKNOWN_STAGE",
		1: "PLANNED",
		2: "ALPHA",
		3: "BETA",
		4: "PRODUCTION",
		5: "DEPRECATED",
		6: "DEBUG_ONLY",
	}
	LifecycleStage_value = map[string]int32{
		"UNKNOWN_STAGE": 0,
		"PLANNED":       1,
		"ALPHA":         2,
		"BETA":          3,
		"PRODUCTION":    4,
		"DEPRECATED":    5,
		"DEBUG_ONLY":    6,
	}
)

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

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

func (LifecycleStage) Descriptor() protoreflect.EnumDescriptor {
	return file_tensorflow_metadata_proto_v0_schema_proto_enumTypes[0].Descriptor()
}

func (LifecycleStage) Type() protoreflect.EnumType {
	return &file_tensorflow_metadata_proto_v0_schema_proto_enumTypes[0]
}

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

// Deprecated: Do not use.
func (x *LifecycleStage) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = LifecycleStage(num)
	return nil
}

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

// Describes the physical representation of a feature.
// It may be different than the logical representation, which
// is represented as a Domain.
type FeatureType int32

const (
	FeatureType_TYPE_UNKNOWN FeatureType = 0
	FeatureType_BYTES        FeatureType = 1
	FeatureType_INT          FeatureType = 2
	FeatureType_FLOAT        FeatureType = 3
	FeatureType_STRUCT       FeatureType = 4
)

// Enum value maps for FeatureType.
var (
	FeatureType_name = map[int32]string{
		0: "TYPE_UNKNOWN",
		1: "BYTES",
		2: "INT",
		3: "FLOAT",
		4: "STRUCT",
	}
	FeatureType_value = map[string]int32{
		"TYPE_UNKNOWN": 0,
		"BYTES":        1,
		"INT":          2,
		"FLOAT":        3,
		"STRUCT":       4,
	}
)

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

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

func (FeatureType) Descriptor() protoreflect.EnumDescriptor {
	return file_tensorflow_metadata_proto_v0_schema_proto_enumTypes[1].Descriptor()
}

func (FeatureType) Type() protoreflect.EnumType {
	return &file_tensorflow_metadata_proto_v0_schema_proto_enumTypes[1]
}

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

// Deprecated: Do not use.
func (x *FeatureType) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = FeatureType(num)
	return nil
}

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

type TimeDomain_IntegerTimeFormat int32

const (
	TimeDomain_FORMAT_UNKNOWN    TimeDomain_IntegerTimeFormat = 0
	TimeDomain_UNIX_DAYS         TimeDomain_IntegerTimeFormat = 5 // Number of days since 1970-01-01.
	TimeDomain_UNIX_SECONDS      TimeDomain_IntegerTimeFormat = 1
	TimeDomain_UNIX_MILLISECONDS TimeDomain_IntegerTimeFormat = 2
	TimeDomain_UNIX_MICROSECONDS TimeDomain_IntegerTimeFormat = 3
	TimeDomain_UNIX_NANOSECONDS  TimeDomain_IntegerTimeFormat = 4
)

// Enum value maps for TimeDomain_IntegerTimeFormat.
var (
	TimeDomain_IntegerTimeFormat_name = map[int32]string{
		0: "FORMAT_UNKNOWN",
		5: "UNIX_DAYS",
		1: "UNIX_SECONDS",
		2: "UNIX_MILLISECONDS",
		3: "UNIX_MICROSECONDS",
		4: "UNIX_NANOSECONDS",
	}
	TimeDomain_IntegerTimeFormat_value = map[string]int32{
		"FORMAT_UNKNOWN":    0,
		"UNIX_DAYS":         5,
		"UNIX_SECONDS":      1,
		"UNIX_MILLISECONDS": 2,
		"UNIX_MICROSECONDS": 3,
		"UNIX_NANOSECONDS":  4,
	}
)

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

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

func (TimeDomain_IntegerTimeFormat) Descriptor() protoreflect.EnumDescriptor {
	return file_tensorflow_metadata_proto_v0_schema_proto_enumTypes[2].Descriptor()
}

func (TimeDomain_IntegerTimeFormat) Type() protoreflect.EnumType {
	return &file_tensorflow_metadata_proto_v0_schema_proto_enumTypes[2]
}

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

// Deprecated: Do not use.
func (x *TimeDomain_IntegerTimeFormat) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = TimeDomain_IntegerTimeFormat(num)
	return nil
}

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

type TimeOfDayDomain_IntegerTimeOfDayFormat int32

const (
	TimeOfDayDomain_FORMAT_UNKNOWN TimeOfDayDomain_IntegerTimeOfDayFormat = 0
	// Time values, containing hour/minute/second/nanos, encoded into 8-byte
	// bit fields following the ZetaSQL convention:
	//        6         5         4         3         2         1
	// MSB 3210987654321098765432109876543210987654321098765432109876543210 LSB
	//                      | H ||  M ||  S ||---------- nanos -----------|
	TimeOfDayDomain_PACKED_64_NANOS TimeOfDayDomain_IntegerTimeOfDayFormat = 1
)

// Enum value maps for TimeOfDayDomain_IntegerTimeOfDayFormat.
var (
	TimeOfDayDomain_IntegerTimeOfDayFormat_name = map[int32]string{
		0: "FORMAT_UNKNOWN",
		1: "PACKED_64_NANOS",
	}
	TimeOfDayDomain_IntegerTimeOfDayFormat_value = map[string]int32{
		"FORMAT_UNKNOWN":  0,
		"PACKED_64_NANOS": 1,
	}
)

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

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

func (TimeOfDayDomain_IntegerTimeOfDayFormat) Descriptor() protoreflect.EnumDescriptor {
	return file_tensorflow_metadata_proto_v0_schema_proto_enumTypes[3].Descriptor()
}

func (TimeOfDayDomain_IntegerTimeOfDayFormat) Type() protoreflect.EnumType {
	return &file_tensorflow_metadata_proto_v0_schema_proto_enumTypes[3]
}

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

// Deprecated: Do not use.
func (x *TimeOfDayDomain_IntegerTimeOfDayFormat) UnmarshalJSON(b []byte) error {
	num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
	if err != nil {
		return err
	}
	*x = TimeOfDayDomain_IntegerTimeOfDayFormat(num)
	return nil
}

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

//
// Message to represent schema information.
// NextID: 14
type Schema struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Features described in this schema.
	Feature []*Feature `protobuf:"bytes,1,rep,name=feature" json:"feature,omitempty"`
	// Sparse features described in this schema.
	SparseFeature []*SparseFeature `protobuf:"bytes,6,rep,name=sparse_feature,json=sparseFeature" json:"sparse_feature,omitempty"`
	// Weighted features described in this schema.
	WeightedFeature []*WeightedFeature `protobuf:"bytes,12,rep,name=weighted_feature,json=weightedFeature" json:"weighted_feature,omitempty"`
	// declared as top-level features in <feature>.
	// String domains referenced in the features.
	StringDomain []*StringDomain `protobuf:"bytes,4,rep,name=string_domain,json=stringDomain" json:"string_domain,omitempty"`
	// top level float domains that can be reused by features
	FloatDomain []*FloatDomain `protobuf:"bytes,9,rep,name=float_domain,json=floatDomain" json:"float_domain,omitempty"`
	// top level int domains that can be reused by features
	IntDomain []*IntDomain `protobuf:"bytes,10,rep,name=int_domain,json=intDomain" json:"int_domain,omitempty"`
	// Default environments for each feature.
	// An environment represents both a type of location (e.g. a server or phone)
	// and a time (e.g. right before model X is run). In the standard scenario,
	// 99% of the features should be in the default environments TRAINING,
	// SERVING, and the LABEL (or labels) AND WEIGHT is only available at TRAINING
	// (not at serving).
	// Other possible variations:
	// 1. There may be TRAINING_MOBILE, SERVING_MOBILE, TRAINING_SERVICE,
	//    and SERVING_SERVICE.
	// 2. If one is ensembling three models, where the predictions of the first
	//    three models are available for the ensemble model, there may be
	//    TRAINING, SERVING_INITIAL, SERVING_ENSEMBLE.
	// See FeatureProto::not_in_environment and FeatureProto::in_environment.
	DefaultEnvironment []string `protobuf:"bytes,5,rep,name=default_environment,json=defaultEnvironment" json:"default_environment,omitempty"`
	// Additional information about the schema as a whole. Features may also
	// be annotated individually.
	Annotation *Annotation `protobuf:"bytes,8,opt,name=annotation" json:"annotation,omitempty"`
	// Dataset-level constraints. This is currently used for specifying
	// information about changes in num_examples.
	DatasetConstraints *DatasetConstraints `protobuf:"bytes,11,opt,name=dataset_constraints,json=datasetConstraints" json:"dataset_constraints,omitempty"`
	// TensorRepresentation groups. The keys are the names of the groups.
	// Key "" (empty string) denotes the "default" group, which is what should
	// be used when a group name is not provided.
	// See the documentation at TensorRepresentationGroup for more info.
	// Under development. DO NOT USE.
	TensorRepresentationGroup map[string]*TensorRepresentationGroup `protobuf:"bytes,13,rep,name=tensor_representation_group,json=tensorRepresentationGroup" json:"tensor_representation_group,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
}

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

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

func (*Schema) ProtoMessage() {}

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

func (x *Schema) GetFeature() []*Feature {
	if x != nil {
		return x.Feature
	}
	return nil
}

func (x *Schema) GetSparseFeature() []*SparseFeature {
	if x != nil {
		return x.SparseFeature
	}
	return nil
}

func (x *Schema) GetWeightedFeature() []*WeightedFeature {
	if x != nil {
		return x.WeightedFeature
	}
	return nil
}

func (x *Schema) GetStringDomain() []*StringDomain {
	if x != nil {
		return x.StringDomain
	}
	return nil
}

func (x *Schema) GetFloatDomain() []*FloatDomain {
	if x != nil {
		return x.FloatDomain
	}
	return nil
}

func (x *Schema) GetIntDomain() []*IntDomain {
	if x != nil {
		return x.IntDomain
	}
	return nil
}

func (x *Schema) GetDefaultEnvironment() []string {
	if x != nil {
		return x.DefaultEnvironment
	}
	return nil
}

func (x *Schema) GetAnnotation() *Annotation {
	if x != nil {
		return x.Annotation
	}
	return nil
}

func (x *Schema) GetDatasetConstraints() *DatasetConstraints {
	if x != nil {
		return x.DatasetConstraints
	}
	return nil
}

func (x *Schema) GetTensorRepresentationGroup() map[string]*TensorRepresentationGroup {
	if x != nil {
		return x.TensorRepresentationGroup
	}
	return nil
}

// Describes schema-level information about a specific feature.
// NextID: 31
type Feature struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The name of the feature.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // required
	// This field is no longer supported. Instead, use:
	// lifecycle_stage: DEPRECATED
	// TODO(b/111450258): remove this.
	//
	// Deprecated: Do not use.
	Deprecated *bool `protobuf:"varint,2,opt,name=deprecated" json:"deprecated,omitempty"`
	// Types that are assignable to PresenceConstraints:
	//	*Feature_Presence
	//	*Feature_GroupPresence
	PresenceConstraints isFeature_PresenceConstraints `protobuf_oneof:"presence_constraints"`
	// The shape of the feature which governs the number of values that appear in
	// each example.
	//
	// Types that are assignable to ShapeType:
	//	*Feature_Shape
	//	*Feature_ValueCount
	ShapeType isFeature_ShapeType `protobuf_oneof:"shape_type"`
	// Physical type of the feature's values.
	// Note that you can have:
	// type: BYTES
	// int_domain: {
	//   min: 0
	//   max: 3
	// }
	// This would be a field that is syntactically BYTES (i.e. strings), but
	// semantically an int, i.e. it would be "0", "1", "2", or "3".
	Type *FeatureType `protobuf:"varint,6,opt,name=type,enum=tensorflow.metadata.v0.FeatureType" json:"type,omitempty"`
	// Domain for the values of the feature.
	//
	// Types that are assignable to DomainInfo:
	//	*Feature_Domain
	//	*Feature_IntDomain
	//	*Feature_FloatDomain
	//	*Feature_StringDomain
	//	*Feature_BoolDomain
	//	*Feature_StructDomain
	//	*Feature_NaturalLanguageDomain
	//	*Feature_ImageDomain
	//	*Feature_MidDomain
	//	*Feature_UrlDomain
	//	*Feature_TimeDomain
	//	*Feature_TimeOfDayDomain
	DomainInfo isFeature_DomainInfo `protobuf_oneof:"domain_info"`
	// Constraints on the distribution of the feature values.
	// Currently only supported for StringDomains.
	// TODO(b/69473628): Extend functionality to other domain types.
	DistributionConstraints *DistributionConstraints `protobuf:"bytes,15,opt,name=distribution_constraints,json=distributionConstraints" json:"distribution_constraints,omitempty"`
	// Additional information about the feature for documentation purpose.
	Annotation *Annotation `protobuf:"bytes,16,opt,name=annotation" json:"annotation,omitempty"`
	// Tests comparing the distribution to the associated serving data.
	SkewComparator *FeatureComparator `protobuf:"bytes,18,opt,name=skew_comparator,json=skewComparator" json:"skew_comparator,omitempty"`
	// Tests comparing the distribution between two consecutive spans (e.g. days).
	DriftComparator *FeatureComparator `protobuf:"bytes,21,opt,name=drift_comparator,json=driftComparator" json:"drift_comparator,omitempty"`
	// List of environments this feature is present in.
	// Should be disjoint from not_in_environment.
	// This feature is in environment "foo" if:
	// ("foo" is in in_environment or default_environments) AND
	// "foo" is not in not_in_environment.
	// See Schema::default_environments.
	InEnvironment []string `protobuf:"bytes,20,rep,name=in_environment,json=inEnvironment" json:"in_environment,omitempty"`
	// List of environments this feature is not present in.
	// Should be disjoint from of in_environment.
	// See Schema::default_environments and in_environment.
	NotInEnvironment []string `protobuf:"bytes,19,rep,name=not_in_environment,json=notInEnvironment" json:"not_in_environment,omitempty"`
	// The lifecycle stage of a feature. It can also apply to its descendants.
	// i.e., if a struct is DEPRECATED, its children are implicitly deprecated.
	LifecycleStage *LifecycleStage `protobuf:"varint,22,opt,name=lifecycle_stage,json=lifecycleStage,enum=tensorflow.metadata.v0.LifecycleStage" json:"lifecycle_stage,omitempty"`
}

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

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

func (*Feature) ProtoMessage() {}

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

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

// Deprecated: Do not use.
func (x *Feature) GetDeprecated() bool {
	if x != nil && x.Deprecated != nil {
		return *x.Deprecated
	}
	return false
}

func (m *Feature) GetPresenceConstraints() isFeature_PresenceConstraints {
	if m != nil {
		return m.PresenceConstraints
	}
	return nil
}

func (x *Feature) GetPresence() *FeaturePresence {
	if x, ok := x.GetPresenceConstraints().(*Feature_Presence); ok {
		return x.Presence
	}
	return nil
}

func (x *Feature) GetGroupPresence() *FeaturePresenceWithinGroup {
	if x, ok := x.GetPresenceConstraints().(*Feature_GroupPresence); ok {
		return x.GroupPresence
	}
	return nil
}

func (m *Feature) GetShapeType() isFeature_ShapeType {
	if m != nil {
		return m.ShapeType
	}
	return nil
}

func (x *Feature) GetShape() *FixedShape {
	if x, ok := x.GetShapeType().(*Feature_Shape); ok {
		return x.Shape
	}
	return nil
}

func (x *Feature) GetValueCount() *ValueCount {
	if x, ok := x.GetShapeType().(*Feature_ValueCount); ok {
		return x.ValueCount
	}
	return nil
}

func (x *Feature) GetType() FeatureType {
	if x != nil && x.Type != nil {
		return *x.Type
	}
	return FeatureType_TYPE_UNKNOWN
}

func (m *Feature) GetDomainInfo() isFeature_DomainInfo {
	if m != nil {
		return m.DomainInfo
	}
	return nil
}

func (x *Feature) GetDomain() string {
	if x, ok := x.GetDomainInfo().(*Feature_Domain); ok {
		return x.Domain
	}
	return ""
}

func (x *Feature) GetIntDomain() *IntDomain {
	if x, ok := x.GetDomainInfo().(*Feature_IntDomain); ok {
		return x.IntDomain
	}
	return nil
}

func (x *Feature) GetFloatDomain() *FloatDomain {
	if x, ok := x.GetDomainInfo().(*Feature_FloatDomain); ok {
		return x.FloatDomain
	}
	return nil
}

func (x *Feature) GetStringDomain() *StringDomain {
	if x, ok := x.GetDomainInfo().(*Feature_StringDomain); ok {
		return x.StringDomain
	}
	return nil
}

func (x *Feature) GetBoolDomain() *BoolDomain {
	if x, ok := x.GetDomainInfo().(*Feature_BoolDomain); ok {
		return x.BoolDomain
	}
	return nil
}

func (x *Feature) GetStructDomain() *StructDomain {
	if x, ok := x.GetDomainInfo().(*Feature_StructDomain); ok {
		return x.StructDomain
	}
	return nil
}

func (x *Feature) GetNaturalLanguageDomain() *NaturalLanguageDomain {
	if x, ok := x.GetDomainInfo().(*Feature_NaturalLanguageDomain); ok {
		return x.NaturalLanguageDomain
	}
	return nil
}

func (x *Feature) GetImageDomain() *ImageDomain {
	if x, ok := x.GetDomainInfo().(*Feature_ImageDomain); ok {
		return x.ImageDomain
	}
	return nil
}

func (x *Feature) GetMidDomain() *MIDDomain {
	if x, ok := x.GetDomainInfo().(*Feature_MidDomain); ok {
		return x.MidDomain
	}
	return nil
}

func (x *Feature) GetUrlDomain() *URLDomain {
	if x, ok := x.GetDomainInfo().(*Feature_UrlDomain); ok {
		return x.UrlDomain
	}
	return nil
}

func (x *Feature) GetTimeDomain() *TimeDomain {
	if x, ok := x.GetDomainInfo().(*Feature_TimeDomain); ok {
		return x.TimeDomain
	}
	return nil
}

func (x *Feature) GetTimeOfDayDomain() *TimeOfDayDomain {
	if x, ok := x.GetDomainInfo().(*Feature_TimeOfDayDomain); ok {
		return x.TimeOfDayDomain
	}
	return nil
}

func (x *Feature) GetDistributionConstraints() *DistributionConstraints {
	if x != nil {
		return x.DistributionConstraints
	}
	return nil
}

func (x *Feature) GetAnnotation() *Annotation {
	if x != nil {
		return x.Annotation
	}
	return nil
}

func (x *Feature) GetSkewComparator() *FeatureComparator {
	if x != nil {
		return x.SkewComparator
	}
	return nil
}

func (x *Feature) GetDriftComparator() *FeatureComparator {
	if x != nil {
		return x.DriftComparator
	}
	return nil
}

func (x *Feature) GetInEnvironment() []string {
	if x != nil {
		return x.InEnvironment
	}
	return nil
}

func (x *Feature) GetNotInEnvironment() []string {
	if x != nil {
		return x.NotInEnvironment
	}
	return nil
}

func (x *Feature) GetLifecycleStage() LifecycleStage {
	if x != nil && x.LifecycleStage != nil {
		return *x.LifecycleStage
	}
	return LifecycleStage_UNKNOWN_STAGE
}

type isFeature_PresenceConstraints interface {
	isFeature_PresenceConstraints()
}

type Feature_Presence struct {
	// Constraints on the presence of this feature in the examples.
	Presence *FeaturePresence `protobuf:"bytes,14,opt,name=presence,oneof"`
}

type Feature_GroupPresence struct {
	// Only used in the context of a "group" context, e.g., inside a sequence.
	GroupPresence *FeaturePresenceWithinGroup `protobuf:"bytes,17,opt,name=group_presence,json=groupPresence,oneof"`
}

func (*Feature_Presence) isFeature_PresenceConstraints() {}

func (*Feature_GroupPresence) isFeature_PresenceConstraints() {}

type isFeature_ShapeType interface {
	isFeature_ShapeType()
}

type Feature_Shape struct {
	// The feature has a fixed shape corresponding to a multi-dimensional
	// tensor.
	Shape *FixedShape `protobuf:"bytes,23,opt,name=shape,oneof"`
}

type Feature_ValueCount struct {
	// The feature doesn't have a well defined shape. All we know are limits on
	// the minimum and maximum number of values.
	ValueCount *ValueCount `protobuf:"bytes,5,opt,name=value_count,json=valueCount,oneof"`
}

func (*Feature_Shape) isFeature_ShapeType() {}

func (*Feature_ValueCount) isFeature_ShapeType() {}

type isFeature_DomainInfo interface {
	isFeature_DomainInfo()
}

type Feature_Domain struct {
	// Reference to a domain defined at the schema level.
	Domain string `protobuf:"bytes,7,opt,name=domain,oneof"`
}

type Feature_IntDomain struct {
	// Inline definitions of domains.
	IntDomain *IntDomain `protobuf:"bytes,9,opt,name=int_domain,json=intDomain,oneof"`
}

type Feature_FloatDomain struct {
	FloatDomain *FloatDomain `protobuf:"bytes,10,opt,name=float_domain,json=floatDomain,oneof"`
}

type Feature_StringDomain struct {
	StringDomain *StringDomain `protobuf:"bytes,11,opt,name=string_domain,json=stringDomain,oneof"`
}

type Feature_BoolDomain struct {
	BoolDomain *BoolDomain `protobuf:"bytes,13,opt,name=bool_domain,json=boolDomain,oneof"`
}

type Feature_StructDomain struct {
	StructDomain *StructDomain `protobuf:"bytes,29,opt,name=struct_domain,json=structDomain,oneof"`
}

type Feature_NaturalLanguageDomain struct {
	// Supported semantic domains.
	NaturalLanguageDomain *NaturalLanguageDomain `protobuf:"bytes,24,opt,name=natural_language_domain,json=naturalLanguageDomain,oneof"`
}

type Feature_ImageDomain struct {
	ImageDomain *ImageDomain `protobuf:"bytes,25,opt,name=image_domain,json=imageDomain,oneof"`
}

type Feature_MidDomain struct {
	MidDomain *MIDDomain `protobuf:"bytes,26,opt,name=mid_domain,json=midDomain,oneof"`
}

type Feature_UrlDomain struct {
	UrlDomain *URLDomain `protobuf:"bytes,27,opt,name=url_domain,json=urlDomain,oneof"`
}

type Feature_TimeDomain struct {
	TimeDomain *TimeDomain `protobuf:"bytes,28,opt,name=time_domain,json=timeDomain,oneof"`
}

type Feature_TimeOfDayDomain struct {
	TimeOfDayDomain *TimeOfDayDomain `protobuf:"bytes,30,opt,name=time_of_day_domain,json=timeOfDayDomain,oneof"`
}

func (*Feature_Domain) isFeature_DomainInfo() {}

func (*Feature_IntDomain) isFeature_DomainInfo() {}

func (*Feature_FloatDomain) isFeature_DomainInfo() {}

func (*Feature_StringDomain) isFeature_DomainInfo() {}

func (*Feature_BoolDomain) isFeature_DomainInfo() {}

func (*Feature_StructDomain) isFeature_DomainInfo() {}

func (*Feature_NaturalLanguageDomain) isFeature_DomainInfo() {}

func (*Feature_ImageDomain) isFeature_DomainInfo() {}

func (*Feature_MidDomain) isFeature_DomainInfo() {}

func (*Feature_UrlDomain) isFeature_DomainInfo() {}

func (*Feature_TimeDomain) isFeature_DomainInfo() {}

func (*Feature_TimeOfDayDomain) isFeature_DomainInfo() {}

// Additional information about the schema or about a feature.
type Annotation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Tags can be used to mark features. For example, tag on user_age feature can
	// be `user_feature`, tag on user_country feature can be `location_feature`,
	// `user_feature`.
	Tag []string `protobuf:"bytes,1,rep,name=tag" json:"tag,omitempty"`
	// Free-text comments. This can be used as a description of the feature,
	// developer notes etc.
	Comment []string `protobuf:"bytes,2,rep,name=comment" json:"comment,omitempty"`
	// Application-specific metadata may be attached here.
	ExtraMetadata []*any.Any `protobuf:"bytes,3,rep,name=extra_metadata,json=extraMetadata" json:"extra_metadata,omitempty"`
}

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

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

func (*Annotation) ProtoMessage() {}

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

func (x *Annotation) GetTag() []string {
	if x != nil {
		return x.Tag
	}
	return nil
}

func (x *Annotation) GetComment() []string {
	if x != nil {
		return x.Comment
	}
	return nil
}

func (x *Annotation) GetExtraMetadata() []*any.Any {
	if x != nil {
		return x.ExtraMetadata
	}
	return nil
}

// Checks that the ratio of the current value to the previous value is not below
// the min_fraction_threshold or above the max_fraction_threshold. That is,
// previous value * min_fraction_threshold <= current value <=
// previous value * max_fraction_threshold.
// To specify that the value cannot change, set both min_fraction_threshold and
// max_fraction_threshold to 1.0.
type NumericValueComparator struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	MinFractionThreshold *float64 `protobuf:"fixed64,1,opt,name=min_fraction_threshold,json=minFractionThreshold" json:"min_fraction_threshold,omitempty"`
	MaxFractionThreshold *float64 `protobuf:"fixed64,2,opt,name=max_fraction_threshold,json=maxFractionThreshold" json:"max_fraction_threshold,omitempty"`
}

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

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

func (*NumericValueComparator) ProtoMessage() {}

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

func (x *NumericValueComparator) GetMinFractionThreshold() float64 {
	if x != nil && x.MinFractionThreshold != nil {
		return *x.MinFractionThreshold
	}
	return 0
}

func (x *NumericValueComparator) GetMaxFractionThreshold() float64 {
	if x != nil && x.MaxFractionThreshold != nil {
		return *x.MaxFractionThreshold
	}
	return 0
}

// Constraints on the entire dataset.
type DatasetConstraints struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Tests differences in number of examples between the current data and the
	// previous span.
	NumExamplesDriftComparator *NumericValueComparator `protobuf:"bytes,1,opt,name=num_examples_drift_comparator,json=numExamplesDriftComparator" json:"num_examples_drift_comparator,omitempty"`
	// Tests comparisions in number of examples between the current data and the
	// previous version of that data.
	NumExamplesVersionComparator *NumericValueComparator `protobuf:"bytes,2,opt,name=num_examples_version_comparator,json=numExamplesVersionComparator" json:"num_examples_version_comparator,omitempty"`
	// Minimum number of examples in the dataset.
	MinExamplesCount *int64 `protobuf:"varint,3,opt,name=min_examples_count,json=minExamplesCount" json:"min_examples_count,omitempty"`
}

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

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

func (*DatasetConstraints) ProtoMessage() {}

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

func (x *DatasetConstraints) GetNumExamplesDriftComparator() *NumericValueComparator {
	if x != nil {
		return x.NumExamplesDriftComparator
	}
	return nil
}

func (x *DatasetConstraints) GetNumExamplesVersionComparator() *NumericValueComparator {
	if x != nil {
		return x.NumExamplesVersionComparator
	}
	return nil
}

func (x *DatasetConstraints) GetMinExamplesCount() int64 {
	if x != nil && x.MinExamplesCount != nil {
		return *x.MinExamplesCount
	}
	return 0
}

// Specifies a fixed shape for the feature's values. The immediate implication
// is that each feature has a fixed number of values. Moreover, these values
// can be parsed in a multi-dimensional tensor using the specified axis sizes.
// The FixedShape defines a lexicographical ordering of the data. For instance,
// if there is a FixedShape {
//   dim {size:3} dim {size:2}
// }
// then tensor[0][0]=field[0]
// then tensor[0][1]=field[1]
// then tensor[1][0]=field[2]
// then tensor[1][1]=field[3]
// then tensor[2][0]=field[4]
// then tensor[2][1]=field[5]
//
// The FixedShape message is identical with the TensorFlow TensorShape proto
// message.
type FixedShape struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The dimensions that define the shape. The total number of values in each
	// example is the product of sizes of each dimension.
	Dim []*FixedShape_Dim `protobuf:"bytes,2,rep,name=dim" json:"dim,omitempty"`
}

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

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

func (*FixedShape) ProtoMessage() {}

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

func (x *FixedShape) GetDim() []*FixedShape_Dim {
	if x != nil {
		return x.Dim
	}
	return nil
}

// Limits on maximum and minimum number of values in a
// single example (when the feature is present). Use this when the minimum
// value count can be different than the maximum value count. Otherwise prefer
// FixedShape.
type ValueCount struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Min *int64 `protobuf:"varint,1,opt,name=min" json:"min,omitempty"`
	Max *int64 `protobuf:"varint,2,opt,name=max" json:"max,omitempty"`
}

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

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

func (*ValueCount) ProtoMessage() {}

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

func (x *ValueCount) GetMin() int64 {
	if x != nil && x.Min != nil {
		return *x.Min
	}
	return 0
}

func (x *ValueCount) GetMax() int64 {
	if x != nil && x.Max != nil {
		return *x.Max
	}
	return 0
}

// Represents a weighted feature that is encoded as a combination of raw base
// features. The `weight_feature` should be a float feature with identical
// shape as the `feature`. This is useful for representing weights associated
// with categorical tokens (e.g. a TFIDF weight associated with each token).
// TODO(b/142122960): Handle WeightedCategorical end to end in TFX (validation,
// TFX Unit Testing, etc)
type WeightedFeature struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Name for the weighted feature. This should not clash with other features in
	// the same schema.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // required
	// Path of a base feature to be weighted. Required.
	Feature *Path `protobuf:"bytes,2,opt,name=feature" json:"feature,omitempty"`
	// Path of weight feature to associate with the base feature. Must be same
	// shape as feature. Required.
	WeightFeature *Path `protobuf:"bytes,3,opt,name=weight_feature,json=weightFeature" json:"weight_feature,omitempty"`
	// The lifecycle_stage determines where a feature is expected to be used,
	// and therefore how important issues with it are.
	LifecycleStage *LifecycleStage `protobuf:"varint,4,opt,name=lifecycle_stage,json=lifecycleStage,enum=tensorflow.metadata.v0.LifecycleStage" json:"lifecycle_stage,omitempty"`
}

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

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

func (*WeightedFeature) ProtoMessage() {}

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

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

func (x *WeightedFeature) GetFeature() *Path {
	if x != nil {
		return x.Feature
	}
	return nil
}

func (x *WeightedFeature) GetWeightFeature() *Path {
	if x != nil {
		return x.WeightFeature
	}
	return nil
}

func (x *WeightedFeature) GetLifecycleStage() LifecycleStage {
	if x != nil && x.LifecycleStage != nil {
		return *x.LifecycleStage
	}
	return LifecycleStage_UNKNOWN_STAGE
}

// A sparse feature represents a sparse tensor that is encoded with a
// combination of raw features, namely index features and a value feature. Each
// index feature defines a list of indices in a different dimension.
type SparseFeature struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Name for the sparse feature. This should not clash with other features in
	// the same schema.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // required
	// This field is no longer supported. Instead, use:
	// lifecycle_stage: DEPRECATED
	// TODO(b/111450258): remove this.
	//
	// Deprecated: Do not use.
	Deprecated *bool `protobuf:"varint,2,opt,name=deprecated" json:"deprecated,omitempty"`
	// The lifecycle_stage determines where a feature is expected to be used,
	// and therefore how important issues with it are.
	LifecycleStage *LifecycleStage `protobuf:"varint,7,opt,name=lifecycle_stage,json=lifecycleStage,enum=tensorflow.metadata.v0.LifecycleStage" json:"lifecycle_stage,omitempty"`
	// Constraints on the presence of this feature in examples.
	// Deprecated, this is inferred by the referred features.
	//
	// Deprecated: Do not use.
	Presence *FeaturePresence `protobuf:"bytes,4,opt,name=presence" json:"presence,omitempty"`
	// Shape of the sparse tensor that this SparseFeature represents.
	// Currently not supported.
	// TODO(b/109669962): Consider deriving this from the referred features.
	DenseShape *FixedShape `protobuf:"bytes,5,opt,name=dense_shape,json=denseShape" json:"dense_shape,omitempty"`
	// Features that represent indexes. Should be integers >= 0.
	IndexFeature []*SparseFeature_IndexFeature `protobuf:"bytes,6,rep,name=index_feature,json=indexFeature" json:"index_feature,omitempty"` // at least one
	// If true then the index values are already sorted lexicographically.
	IsSorted     *bool                       `protobuf:"varint,8,opt,name=is_sorted,json=isSorted" json:"is_sorted,omitempty"`
	ValueFeature *SparseFeature_ValueFeature `protobuf:"bytes,9,opt,name=value_feature,json=valueFeature" json:"value_feature,omitempty"` // required
	// Type of value feature.
	// Deprecated, this is inferred by the referred features.
	//
	// Deprecated: Do not use.
	Type *FeatureType `protobuf:"varint,10,opt,name=type,enum=tensorflow.metadata.v0.FeatureType" json:"type,omitempty"`
}

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

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

func (*SparseFeature) ProtoMessage() {}

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

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

// Deprecated: Do not use.
func (x *SparseFeature) GetDeprecated() bool {
	if x != nil && x.Deprecated != nil {
		return *x.Deprecated
	}
	return false
}

func (x *SparseFeature) GetLifecycleStage() LifecycleStage {
	if x != nil && x.LifecycleStage != nil {
		return *x.LifecycleStage
	}
	return LifecycleStage_UNKNOWN_STAGE
}

// Deprecated: Do not use.
func (x *SparseFeature) GetPresence() *FeaturePresence {
	if x != nil {
		return x.Presence
	}
	return nil
}

func (x *SparseFeature) GetDenseShape() *FixedShape {
	if x != nil {
		return x.DenseShape
	}
	return nil
}

func (x *SparseFeature) GetIndexFeature() []*SparseFeature_IndexFeature {
	if x != nil {
		return x.IndexFeature
	}
	return nil
}

func (x *SparseFeature) GetIsSorted() bool {
	if x != nil && x.IsSorted != nil {
		return *x.IsSorted
	}
	return false
}

func (x *SparseFeature) GetValueFeature() *SparseFeature_ValueFeature {
	if x != nil {
		return x.ValueFeature
	}
	return nil
}

// Deprecated: Do not use.
func (x *SparseFeature) GetType() FeatureType {
	if x != nil && x.Type != nil {
		return *x.Type
	}
	return FeatureType_TYPE_UNKNOWN
}

// Models constraints on the distribution of a feature's values.
// TODO(martinz): replace min_domain_mass with max_off_domain (but slowly).
type DistributionConstraints struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The minimum fraction (in [0,1]) of values across all examples that
	// should come from the feature's domain, e.g.:
	//   1.0  => All values must come from the domain.
	//    .9  => At least 90% of the values must come from the domain.
	MinDomainMass *float64 `protobuf:"fixed64,1,opt,name=min_domain_mass,json=minDomainMass,def=1" json:"min_domain_mass,omitempty"`
}

// Default values for DistributionConstraints fields.
const (
	Default_DistributionConstraints_MinDomainMass = float64(1)
)

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

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

func (*DistributionConstraints) ProtoMessage() {}

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

func (x *DistributionConstraints) GetMinDomainMass() float64 {
	if x != nil && x.MinDomainMass != nil {
		return *x.MinDomainMass
	}
	return Default_DistributionConstraints_MinDomainMass
}

// Encodes information for domains of integer values.
// Note that FeatureType could be either INT or BYTES.
type IntDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Id of the domain. Required if the domain is defined at the schema level. If
	// so, then the name must be unique within the schema.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// Min and max values for the domain.
	Min *int64 `protobuf:"varint,3,opt,name=min" json:"min,omitempty"`
	Max *int64 `protobuf:"varint,4,opt,name=max" json:"max,omitempty"`
	// If true then the domain encodes categorical values (i.e., ids) rather than
	// ordinal values.
	IsCategorical *bool `protobuf:"varint,5,opt,name=is_categorical,json=isCategorical" json:"is_categorical,omitempty"`
}

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

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

func (*IntDomain) ProtoMessage() {}

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

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

func (x *IntDomain) GetMin() int64 {
	if x != nil && x.Min != nil {
		return *x.Min
	}
	return 0
}

func (x *IntDomain) GetMax() int64 {
	if x != nil && x.Max != nil {
		return *x.Max
	}
	return 0
}

func (x *IntDomain) GetIsCategorical() bool {
	if x != nil && x.IsCategorical != nil {
		return *x.IsCategorical
	}
	return false
}

// Encodes information for domains of float values.
// Note that FeatureType could be either INT or BYTES.
type FloatDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Id of the domain. Required if the domain is defined at the schema level. If
	// so, then the name must be unique within the schema.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// Min and max values of the domain.
	Min *float32 `protobuf:"fixed32,3,opt,name=min" json:"min,omitempty"`
	Max *float32 `protobuf:"fixed32,4,opt,name=max" json:"max,omitempty"`
}

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

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

func (*FloatDomain) ProtoMessage() {}

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

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

func (x *FloatDomain) GetMin() float32 {
	if x != nil && x.Min != nil {
		return *x.Min
	}
	return 0
}

func (x *FloatDomain) GetMax() float32 {
	if x != nil && x.Max != nil {
		return *x.Max
	}
	return 0
}

// Domain for a recursive struct.
// NOTE: If a feature with a StructDomain is deprecated, then all the
// child features (features and sparse_features of the StructDomain) are also
// considered to be deprecated.  Similarly child features can only be in
// environments of the parent feature.
type StructDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Feature       []*Feature       `protobuf:"bytes,1,rep,name=feature" json:"feature,omitempty"`
	SparseFeature []*SparseFeature `protobuf:"bytes,2,rep,name=sparse_feature,json=sparseFeature" json:"sparse_feature,omitempty"`
}

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

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

func (*StructDomain) ProtoMessage() {}

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

func (x *StructDomain) GetFeature() []*Feature {
	if x != nil {
		return x.Feature
	}
	return nil
}

func (x *StructDomain) GetSparseFeature() []*SparseFeature {
	if x != nil {
		return x.SparseFeature
	}
	return nil
}

// Encodes information for domains of string values.
type StringDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Id of the domain. Required if the domain is defined at the schema level. If
	// so, then the name must be unique within the schema.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// The values appearing in the domain.
	Value []string `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"`
}

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

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

func (*StringDomain) ProtoMessage() {}

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

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

func (x *StringDomain) GetValue() []string {
	if x != nil {
		return x.Value
	}
	return nil
}

// Encodes information about the domain of a boolean attribute that encodes its
// TRUE/FALSE values as strings, or 0=false, 1=true.
// Note that FeatureType could be either INT or BYTES.
type BoolDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Id of the domain. Required if the domain is defined at the schema level. If
	// so, then the name must be unique within the schema.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
	// Strings values for TRUE/FALSE.
	TrueValue  *string `protobuf:"bytes,2,opt,name=true_value,json=trueValue" json:"true_value,omitempty"`
	FalseValue *string `protobuf:"bytes,3,opt,name=false_value,json=falseValue" json:"false_value,omitempty"`
}

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

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

func (*BoolDomain) ProtoMessage() {}

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

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

func (x *BoolDomain) GetTrueValue() string {
	if x != nil && x.TrueValue != nil {
		return *x.TrueValue
	}
	return ""
}

func (x *BoolDomain) GetFalseValue() string {
	if x != nil && x.FalseValue != nil {
		return *x.FalseValue
	}
	return ""
}

// Natural language text.
type NaturalLanguageDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*NaturalLanguageDomain) ProtoMessage() {}

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

// Image data.
type ImageDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*ImageDomain) ProtoMessage() {}

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

// Knowledge graph ID, see: https://www.wikidata.org/wiki/Property:P646
type MIDDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*MIDDomain) ProtoMessage() {}

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

// A URL, see: https://en.wikipedia.org/wiki/URL
type URLDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

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

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

func (*URLDomain) ProtoMessage() {}

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

// Time or date representation.
type TimeDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to Format:
	//	*TimeDomain_StringFormat
	//	*TimeDomain_IntegerFormat
	Format isTimeDomain_Format `protobuf_oneof:"format"`
}

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

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

func (*TimeDomain) ProtoMessage() {}

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

func (m *TimeDomain) GetFormat() isTimeDomain_Format {
	if m != nil {
		return m.Format
	}
	return nil
}

func (x *TimeDomain) GetStringFormat() string {
	if x, ok := x.GetFormat().(*TimeDomain_StringFormat); ok {
		return x.StringFormat
	}
	return ""
}

func (x *TimeDomain) GetIntegerFormat() TimeDomain_IntegerTimeFormat {
	if x, ok := x.GetFormat().(*TimeDomain_IntegerFormat); ok {
		return x.IntegerFormat
	}
	return TimeDomain_FORMAT_UNKNOWN
}

type isTimeDomain_Format interface {
	isTimeDomain_Format()
}

type TimeDomain_StringFormat struct {
	// Expected format that contains a combination of regular characters and
	// special format specifiers. Format specifiers are a subset of the
	// strptime standard.
	StringFormat string `protobuf:"bytes,1,opt,name=string_format,json=stringFormat,oneof"`
}

type TimeDomain_IntegerFormat struct {
	// Expected format of integer times.
	IntegerFormat TimeDomain_IntegerTimeFormat `protobuf:"varint,2,opt,name=integer_format,json=integerFormat,enum=tensorflow.metadata.v0.TimeDomain_IntegerTimeFormat,oneof"`
}

func (*TimeDomain_StringFormat) isTimeDomain_Format() {}

func (*TimeDomain_IntegerFormat) isTimeDomain_Format() {}

// Time of day, without a particular date.
type TimeOfDayDomain struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to Format:
	//	*TimeOfDayDomain_StringFormat
	//	*TimeOfDayDomain_IntegerFormat
	Format isTimeOfDayDomain_Format `protobuf_oneof:"format"`
}

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

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

func (*TimeOfDayDomain) ProtoMessage() {}

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

func (m *TimeOfDayDomain) GetFormat() isTimeOfDayDomain_Format {
	if m != nil {
		return m.Format
	}
	return nil
}

func (x *TimeOfDayDomain) GetStringFormat() string {
	if x, ok := x.GetFormat().(*TimeOfDayDomain_StringFormat); ok {
		return x.StringFormat
	}
	return ""
}

func (x *TimeOfDayDomain) GetIntegerFormat() TimeOfDayDomain_IntegerTimeOfDayFormat {
	if x, ok := x.GetFormat().(*TimeOfDayDomain_IntegerFormat); ok {
		return x.IntegerFormat
	}
	return TimeOfDayDomain_FORMAT_UNKNOWN
}

type isTimeOfDayDomain_Format interface {
	isTimeOfDayDomain_Format()
}

type TimeOfDayDomain_StringFormat struct {
	// Expected format that contains a combination of regular characters and
	// special format specifiers. Format specifiers are a subset of the
	// strptime standard.
	StringFormat string `protobuf:"bytes,1,opt,name=string_format,json=stringFormat,oneof"`
}

type TimeOfDayDomain_IntegerFormat struct {
	// Expected format of integer times.
	IntegerFormat TimeOfDayDomain_IntegerTimeOfDayFormat `protobuf:"varint,2,opt,name=integer_format,json=integerFormat,enum=tensorflow.metadata.v0.TimeOfDayDomain_IntegerTimeOfDayFormat,oneof"`
}

func (*TimeOfDayDomain_StringFormat) isTimeOfDayDomain_Format() {}

func (*TimeOfDayDomain_IntegerFormat) isTimeOfDayDomain_Format() {}

// Describes constraints on the presence of the feature in the data.
type FeaturePresence struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Minimum fraction of examples that have this feature.
	MinFraction *float64 `protobuf:"fixed64,1,opt,name=min_fraction,json=minFraction" json:"min_fraction,omitempty"`
	// Minimum number of examples that have this feature.
	MinCount *int64 `protobuf:"varint,2,opt,name=min_count,json=minCount" json:"min_count,omitempty"`
}

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

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

func (*FeaturePresence) ProtoMessage() {}

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

func (x *FeaturePresence) GetMinFraction() float64 {
	if x != nil && x.MinFraction != nil {
		return *x.MinFraction
	}
	return 0
}

func (x *FeaturePresence) GetMinCount() int64 {
	if x != nil && x.MinCount != nil {
		return *x.MinCount
	}
	return 0
}

// Records constraints on the presence of a feature inside a "group" context
// (e.g., .presence inside a group of features that define a sequence).
type FeaturePresenceWithinGroup struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Required *bool `protobuf:"varint,1,opt,name=required" json:"required,omitempty"`
}

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

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

func (*FeaturePresenceWithinGroup) ProtoMessage() {}

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

func (x *FeaturePresenceWithinGroup) GetRequired() bool {
	if x != nil && x.Required != nil {
		return *x.Required
	}
	return false
}

// Checks that the L-infinity norm is below a certain threshold between the
// two discrete distributions. Since this is applied to a FeatureNameStatistics,
// it only considers the top k.
// L_infty(p,q) = max_i |p_i-q_i|
type InfinityNorm struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The InfinityNorm is in the interval [0.0, 1.0] so sensible bounds should
	// be in the interval [0.0, 1.0).
	Threshold *float64 `protobuf:"fixed64,1,opt,name=threshold" json:"threshold,omitempty"`
}

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

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

func (*InfinityNorm) ProtoMessage() {}

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

func (x *InfinityNorm) GetThreshold() float64 {
	if x != nil && x.Threshold != nil {
		return *x.Threshold
	}
	return 0
}

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

	InfinityNorm *InfinityNorm `protobuf:"bytes,1,opt,name=infinity_norm,json=infinityNorm" json:"infinity_norm,omitempty"`
}

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

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

func (*FeatureComparator) ProtoMessage() {}

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

func (x *FeatureComparator) GetInfinityNorm() *InfinityNorm {
	if x != nil {
		return x.InfinityNorm
	}
	return nil
}

// A TensorRepresentation captures the intent for converting columns in a
// dataset to TensorFlow Tensors (or more generally, tf.CompositeTensors).
// Note that one tf.CompositeTensor may consist of data from multiple columns,
// for example, a N-dimensional tf.SparseTensor may need N + 1 columns to
// provide the sparse indices and values.
// Note that the "column name" that a TensorRepresentation needs is a
// string, not a Path -- it means that the column name identifies a top-level
// Feature in the schema (i.e. you cannot specify a Feature nested in a STRUCT
// Feature).
type TensorRepresentation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Types that are assignable to Kind:
	//	*TensorRepresentation_DenseTensor_
	//	*TensorRepresentation_VarlenSparseTensor
	//	*TensorRepresentation_SparseTensor_
	Kind isTensorRepresentation_Kind `protobuf_oneof:"kind"`
}

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

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

func (*TensorRepresentation) ProtoMessage() {}

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

func (m *TensorRepresentation) GetKind() isTensorRepresentation_Kind {
	if m != nil {
		return m.Kind
	}
	return nil
}

func (x *TensorRepresentation) GetDenseTensor() *TensorRepresentation_DenseTensor {
	if x, ok := x.GetKind().(*TensorRepresentation_DenseTensor_); ok {
		return x.DenseTensor
	}
	return nil
}

func (x *TensorRepresentation) GetVarlenSparseTensor() *TensorRepresentation_VarLenSparseTensor {
	if x, ok := x.GetKind().(*TensorRepresentation_VarlenSparseTensor); ok {
		return x.VarlenSparseTensor
	}
	return nil
}

func (x *TensorRepresentation) GetSparseTensor() *TensorRepresentation_SparseTensor {
	if x, ok := x.GetKind().(*TensorRepresentation_SparseTensor_); ok {
		return x.SparseTensor
	}
	return nil
}

type isTensorRepresentation_Kind interface {
	isTensorRepresentation_Kind()
}

type TensorRepresentation_DenseTensor_ struct {
	DenseTensor *TensorRepresentation_DenseTensor `protobuf:"bytes,1,opt,name=dense_tensor,json=denseTensor,oneof"`
}

type TensorRepresentation_VarlenSparseTensor struct {
	VarlenSparseTensor *TensorRepresentation_VarLenSparseTensor `protobuf:"bytes,2,opt,name=varlen_sparse_tensor,json=varlenSparseTensor,oneof"`
}

type TensorRepresentation_SparseTensor_ struct {
	SparseTensor *TensorRepresentation_SparseTensor `protobuf:"bytes,3,opt,name=sparse_tensor,json=sparseTensor,oneof"`
}

func (*TensorRepresentation_DenseTensor_) isTensorRepresentation_Kind() {}

func (*TensorRepresentation_VarlenSparseTensor) isTensorRepresentation_Kind() {}

func (*TensorRepresentation_SparseTensor_) isTensorRepresentation_Kind() {}

// A TensorRepresentationGroup is a collection of TensorRepresentations with
// names. These names may serve as identifiers when converting the dataset
// to a collection of Tensors or tf.CompositeTensors.
// For example, given the following group:
// {
//   key: "dense_tensor"
//   tensor_representation {
//     dense_tensor {
//       column_name: "univalent_feature"
//       shape {
//         dim {
//           size: 1
//         }
//       }
//       default_value {
//         float_value: 0
//       }
//     }
//   }
// }
// {
//   key: "varlen_sparse_tensor"
//   tensor_representation {
//     varlen_sparse_tensor {
//       column_name: "multivalent_feature"
//     }
//   }
// }
//
// Then the schema is expected to have feature "univalent_feature" and
// "multivalent_feature", and when a batch of data is converted to Tensors using
// this TensorRepresentationGroup, the result may be the following dict:
// {
//   "dense_tensor": tf.Tensor(...),
//   "varlen_sparse_tensor": tf.SparseTensor(...),
// }
type TensorRepresentationGroup struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	TensorRepresentation map[string]*TensorRepresentation `protobuf:"bytes,1,rep,name=tensor_representation,json=tensorRepresentation" json:"tensor_representation,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
}

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

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

func (*TensorRepresentationGroup) ProtoMessage() {}

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

func (x *TensorRepresentationGroup) GetTensorRepresentation() map[string]*TensorRepresentation {
	if x != nil {
		return x.TensorRepresentation
	}
	return nil
}

// An axis in a multi-dimensional feature representation.
type FixedShape_Dim struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Size *int64 `protobuf:"varint,1,opt,name=size" json:"size,omitempty"`
	// Optional name of the tensor dimension.
	Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
}

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

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

func (*FixedShape_Dim) ProtoMessage() {}

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

func (x *FixedShape_Dim) GetSize() int64 {
	if x != nil && x.Size != nil {
		return *x.Size
	}
	return 0
}

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

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

	// Name of the index-feature. This should be a reference to an existing
	// feature in the schema.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

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

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

func (*SparseFeature_IndexFeature) ProtoMessage() {}

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

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

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

	// Name of the value-feature. This should be a reference to an existing
	// feature in the schema.
	Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
}

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

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

func (*SparseFeature_ValueFeature) ProtoMessage() {}

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

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

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

	// Types that are assignable to Kind:
	//	*TensorRepresentation_DefaultValue_FloatValue
	//	*TensorRepresentation_DefaultValue_IntValue
	//	*TensorRepresentation_DefaultValue_BytesValue
	//	*TensorRepresentation_DefaultValue_UintValue
	Kind isTensorRepresentation_DefaultValue_Kind `protobuf_oneof:"kind"`
}

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

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

func (*TensorRepresentation_DefaultValue) ProtoMessage() {}

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

func (m *TensorRepresentation_DefaultValue) GetKind() isTensorRepresentation_DefaultValue_Kind {
	if m != nil {
		return m.Kind
	}
	return nil
}

func (x *TensorRepresentation_DefaultValue) GetFloatValue() float64 {
	if x, ok := x.GetKind().(*TensorRepresentation_DefaultValue_FloatValue); ok {
		return x.FloatValue
	}
	return 0
}

func (x *TensorRepresentation_DefaultValue) GetIntValue() int64 {
	if x, ok := x.GetKind().(*TensorRepresentation_DefaultValue_IntValue); ok {
		return x.IntValue
	}
	return 0
}

func (x *TensorRepresentation_DefaultValue) GetBytesValue() []byte {
	if x, ok := x.GetKind().(*TensorRepresentation_DefaultValue_BytesValue); ok {
		return x.BytesValue
	}
	return nil
}

func (x *TensorRepresentation_DefaultValue) GetUintValue() uint64 {
	if x, ok := x.GetKind().(*TensorRepresentation_DefaultValue_UintValue); ok {
		return x.UintValue
	}
	return 0
}

type isTensorRepresentation_DefaultValue_Kind interface {
	isTensorRepresentation_DefaultValue_Kind()
}

type TensorRepresentation_DefaultValue_FloatValue struct {
	FloatValue float64 `protobuf:"fixed64,1,opt,name=float_value,json=floatValue,oneof"`
}

type TensorRepresentation_DefaultValue_IntValue struct {
	// Note that the data column might be of a shorter integral type. It's the
	// user's responsitiblity to make sure the default value fits that type.
	IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,oneof"`
}

type TensorRepresentation_DefaultValue_BytesValue struct {
	BytesValue []byte `protobuf:"bytes,3,opt,name=bytes_value,json=bytesValue,oneof"`
}

type TensorRepresentation_DefaultValue_UintValue struct {
	// uint_value should only be used if the default value can't fit in a
	// int64 (`int_value`).
	UintValue uint64 `protobuf:"varint,4,opt,name=uint_value,json=uintValue,oneof"`
}

func (*TensorRepresentation_DefaultValue_FloatValue) isTensorRepresentation_DefaultValue_Kind() {}

func (*TensorRepresentation_DefaultValue_IntValue) isTensorRepresentation_DefaultValue_Kind() {}

func (*TensorRepresentation_DefaultValue_BytesValue) isTensorRepresentation_DefaultValue_Kind() {}

func (*TensorRepresentation_DefaultValue_UintValue) isTensorRepresentation_DefaultValue_Kind() {}

// A tf.Tensor
type TensorRepresentation_DenseTensor struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Identifies the column in the dataset that provides the values of this
	// Tensor.
	ColumnName *string `protobuf:"bytes,1,opt,name=column_name,json=columnName" json:"column_name,omitempty"`
	// The shape of each row of the data (i.e. does not include the batch
	// dimension)
	Shape *FixedShape `protobuf:"bytes,2,opt,name=shape" json:"shape,omitempty"`
	// If this column is missing values in a row, the default_value will be
	// used to fill that row.
	DefaultValue *TensorRepresentation_DefaultValue `protobuf:"bytes,3,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"`
}

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

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

func (*TensorRepresentation_DenseTensor) ProtoMessage() {}

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

func (x *TensorRepresentation_DenseTensor) GetColumnName() string {
	if x != nil && x.ColumnName != nil {
		return *x.ColumnName
	}
	return ""
}

func (x *TensorRepresentation_DenseTensor) GetShape() *FixedShape {
	if x != nil {
		return x.Shape
	}
	return nil
}

func (x *TensorRepresentation_DenseTensor) GetDefaultValue() *TensorRepresentation_DefaultValue {
	if x != nil {
		return x.DefaultValue
	}
	return nil
}

// A ragged tf.SparseTensor that models nested lists.
type TensorRepresentation_VarLenSparseTensor struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Identifies the column in the dataset that should be converted to the
	// VarLenSparseTensor.
	ColumnName *string `protobuf:"bytes,1,opt,name=column_name,json=columnName" json:"column_name,omitempty"`
}

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

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

func (*TensorRepresentation_VarLenSparseTensor) ProtoMessage() {}

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

func (x *TensorRepresentation_VarLenSparseTensor) GetColumnName() string {
	if x != nil && x.ColumnName != nil {
		return *x.ColumnName
	}
	return ""
}

// A tf.SparseTensor whose indices and values come from separate data columns.
// This will replace Schema.sparse_feature eventually.
// The index columns must be of INT type, and all the columns must co-occur
// and have the same valency at the same row.
type TensorRepresentation_SparseTensor struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The dense shape of the resulting SparseTensor (does not include the batch
	// dimension).
	DenseShape *FixedShape `protobuf:"bytes,1,opt,name=dense_shape,json=denseShape" json:"dense_shape,omitempty"`
	// The columns constitute the coordinates of the values.
	// indices_column[i][j] contains the coordinate of the i-th dimension of the
	// j-th value.
	IndexColumnNames []string `protobuf:"bytes,2,rep,name=index_column_names,json=indexColumnNames" json:"index_column_names,omitempty"`
	// The column that contains the values.
	ValueColumnName *string `protobuf:"bytes,3,opt,name=value_column_name,json=valueColumnName" json:"value_column_name,omitempty"`
}

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

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

func (*TensorRepresentation_SparseTensor) ProtoMessage() {}

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

func (x *TensorRepresentation_SparseTensor) GetDenseShape() *FixedShape {
	if x != nil {
		return x.DenseShape
	}
	return nil
}

func (x *TensorRepresentation_SparseTensor) GetIndexColumnNames() []string {
	if x != nil {
		return x.IndexColumnNames
	}
	return nil
}

func (x *TensorRepresentation_SparseTensor) GetValueColumnName() string {
	if x != nil && x.ValueColumnName != nil {
		return *x.ValueColumnName
	}
	return ""
}

var File_tensorflow_metadata_proto_v0_schema_proto protoreflect.FileDescriptor

var file_tensorflow_metadata_proto_v0_schema_proto_rawDesc = []byte{
	0x0a, 0x29, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x74,
	0x61, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x30, 0x2f, 0x73,
	0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16, 0x74, 0x65, 0x6e,
	0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
	0x2e, 0x76, 0x30, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27,
	0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64,
	0x61, 0x74, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x30, 0x2f, 0x70, 0x61, 0x74,
	0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8c, 0x07, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65,
	0x6d, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20,
	0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77,
	0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x65, 0x61,
	0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4c, 0x0a,
	0x0e, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18,
	0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c,
	0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x53,
	0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0d, 0x73, 0x70,
	0x61, 0x72, 0x73, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x52, 0x0a, 0x10, 0x77,
	0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18,
	0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c,
	0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x57,
	0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0f,
	0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12,
	0x49, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
	0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66,
	0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e,
	0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x73, 0x74,
	0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x46, 0x0a, 0x0c, 0x66, 0x6c,
	0x6f, 0x61, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b,
	0x32, 0x23, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65,
	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x44,
	0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x44, 0x6f, 0x6d, 0x61,
	0x69, 0x6e, 0x12, 0x40, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
	0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66,
	0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e,
	0x49, 0x6e, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x44, 0x6f,
	0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f,
	0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28,
	0x09, 0x52, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f,
	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6e, 0x73,
	0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e,
	0x76, 0x30, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61,
	0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x13, 0x64, 0x61, 0x74,
	0x61, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73,
	0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66,
	0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e,
	0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e,
	0x74, 0x73, 0x52, 0x12, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73, 0x74,
	0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x7d, 0x0a, 0x1b, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72,
	0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
	0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x74, 0x65,
	0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
	0x61, 0x2e, 0x76, 0x30, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x65, 0x6e, 0x73,
	0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x19, 0x74, 0x65, 0x6e, 0x73,
	0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x7f, 0x0a, 0x1e, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52,
	0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f,
	0x75, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x47, 0x0a, 0x05, 0x76, 0x61, 0x6c,
	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f,
	0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76,
	0x30, 0x2e, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
	0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c,
	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb9, 0x0e, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75,
	0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63,
	0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a,
	0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x45, 0x0a, 0x08, 0x70, 0x72,
	0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74,
	0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
	0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, 0x65,
	0x73, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63,
	0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65,
	0x6e, 0x63, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, 0x6e, 0x73,
	0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e,
	0x76, 0x30, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e,
	0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x48, 0x00, 0x52,
	0x0d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x3a,
	0x0a, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e,
	0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64,
	0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x53, 0x68, 0x61, 0x70,
	0x65, 0x48, 0x01, 0x52, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x76, 0x61,
	0x6c, 0x75, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x22, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74,
	0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f,
	0x75, 0x6e, 0x74, 0x48, 0x01, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x75, 0x6e,
	0x74, 0x12, 0x37, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x23, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74,
	0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
	0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x64, 0x6f,
	0x6d, 0x61, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x06, 0x64, 0x6f,
	0x6d, 0x61, 0x69, 0x6e, 0x12, 0x42, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61,
	0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f,
	0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76,
	0x30, 0x2e, 0x49, 0x6e, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x02, 0x52, 0x09, 0x69,
	0x6e, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x48, 0x0a, 0x0c, 0x66, 0x6c, 0x6f, 0x61,
	0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23,
	0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61,
	0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x44, 0x6f, 0x6d,
	0x61, 0x69, 0x6e, 0x48, 0x02, 0x52, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x44, 0x6f, 0x6d, 0x61,
	0x69, 0x6e, 0x12, 0x4b, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x6f, 0x6d,
	0x61, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6e, 0x73,
	0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e,
	0x76, 0x30, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48,
	0x02, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12,
	0x45, 0x0a, 0x0b, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x0d,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f,
	0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x42, 0x6f,
	0x6f, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x02, 0x52, 0x0a, 0x62, 0x6f, 0x6f, 0x6c,
	0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x4b, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
	0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e,
	0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64,
	0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x44, 0x6f, 0x6d,
	0x61, 0x69, 0x6e, 0x48, 0x02, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x44, 0x6f, 0x6d,
	0x61, 0x69, 0x6e, 0x12, 0x67, 0x0a, 0x17, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x5f, 0x6c,
	0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x18,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f,
	0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x4e, 0x61,
	0x74, 0x75, 0x72, 0x61, 0x6c, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x6d,
	0x61, 0x69, 0x6e, 0x48, 0x02, 0x52, 0x15, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4c, 0x61,
	0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x48, 0x0a, 0x0c,
	0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x19, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e,
	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x49, 0x6d, 0x61, 0x67,
	0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x02, 0x52, 0x0b, 0x69, 0x6d, 0x61, 0x67, 0x65,
	0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x42, 0x0a, 0x0a, 0x6d, 0x69, 0x64, 0x5f, 0x64, 0x6f,
	0x6d, 0x61, 0x69, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x65, 0x6e,
	0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
	0x2e, 0x76, 0x30, 0x2e, 0x4d, 0x49, 0x44, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x02, 0x52,
	0x09, 0x6d, 0x69, 0x64, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x42, 0x0a, 0x0a, 0x75, 0x72,
	0x6c, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
	0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61,
	0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x55, 0x52, 0x4c, 0x44, 0x6f, 0x6d, 0x61, 0x69,
	0x6e, 0x48, 0x02, 0x52, 0x09, 0x75, 0x72, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x45,
	0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x1c, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77,
	0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x69, 0x6d,
	0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x02, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x44,
	0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x56, 0x0a, 0x12, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6f, 0x66,
	0x5f, 0x64, 0x61, 0x79, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d,
	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x4f,
	0x66, 0x44, 0x61, 0x79, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x02, 0x52, 0x0f, 0x74, 0x69,
	0x6d, 0x65, 0x4f, 0x66, 0x44, 0x61, 0x79, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x6a, 0x0a,
	0x18, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f,
	0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32,
	0x2f, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74,
	0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62,
	0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73,
	0x52, 0x17, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f,
	0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x0a, 0x61, 0x6e, 0x6e,
	0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e,
	0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64,
	0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x52, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52, 0x0a,
	0x0f, 0x73, 0x6b, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72,
	0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66,
	0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e,
	0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f,
	0x72, 0x52, 0x0e, 0x73, 0x6b, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f,
	0x72, 0x12, 0x54, 0x0a, 0x10, 0x64, 0x72, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61,
	0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65,
	0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
	0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70,
	0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6d,
	0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x5f, 0x65, 0x6e,
	0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52,
	0x0d, 0x69, 0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c,
	0x0a, 0x12, 0x6e, 0x6f, 0x74, 0x5f, 0x69, 0x6e, 0x5f, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e,
	0x6d, 0x65, 0x6e, 0x74, 0x18, 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x6f, 0x74, 0x49,
	0x6e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x0f,
	0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18,
	0x16, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c,
	0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x4c,
	0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x0e, 0x6c,
	0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x42, 0x16, 0x0a,
	0x14, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72,
	0x61, 0x69, 0x6e, 0x74, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x70, 0x65, 0x5f, 0x74,
	0x79, 0x70, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x6e,
	0x66, 0x6f, 0x22, 0x75, 0x0a, 0x0a, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x12, 0x10, 0x0a, 0x03, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x74,
	0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20,
	0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0e,
	0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03,
	0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x72,
	0x61, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x84, 0x01, 0x0a, 0x16, 0x4e, 0x75,
	0x6d, 0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72,
	0x61, 0x74, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x63,
	0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x6d, 0x69, 0x6e, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f,
	0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x61,
	0x78, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73,
	0x68, 0x6f, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x46,
	0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64,
	0x22, 0xac, 0x02, 0x0a, 0x12, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x73,
	0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x71, 0x0a, 0x1d, 0x6e, 0x75, 0x6d, 0x5f, 0x65,
	0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x5f, 0x63, 0x6f,
	0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e,
	0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61,
	0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x56,
	0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x1a,
	0x6e, 0x75, 0x6d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x44, 0x72, 0x69, 0x66, 0x74,
	0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x75, 0x0a, 0x1f, 0x6e, 0x75,
	0x6d, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69,
	0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77,
	0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x4e, 0x75, 0x6d,
	0x65, 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61,
	0x74, 0x6f, 0x72, 0x52, 0x1c, 0x6e, 0x75, 0x6d, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73,
	0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f,
	0x72, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65,
	0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6d,
	0x69, 0x6e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22,
	0x75, 0x0a, 0x0a, 0x46, 0x69, 0x78, 0x65, 0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x38, 0x0a,
	0x03, 0x64, 0x69, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6e,
	0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
	0x2e, 0x76, 0x30, 0x2e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x2e, 0x44,
	0x69, 0x6d, 0x52, 0x03, 0x64, 0x69, 0x6d, 0x1a, 0x2d, 0x0a, 0x03, 0x44, 0x69, 0x6d, 0x12, 0x12,
	0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69,
	0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x30, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x43,
	0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0xf3, 0x01, 0x0a, 0x0f, 0x57, 0x65, 0x69,
	0x67, 0x68, 0x74, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x12, 0x36, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x1c, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d,
	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52,
	0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x43, 0x0a, 0x0e, 0x77, 0x65, 0x69, 0x67,
	0x68, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x1c, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65,
	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x52, 0x0d,
	0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4f, 0x0a,
	0x0f, 0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65,
	0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66,
	0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e,
	0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x0e,
	0x6c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x22, 0x80,
	0x05, 0x0a, 0x0d, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74,
	0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x64, 0x65,
	0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x4f, 0x0a, 0x0f, 0x6c, 0x69, 0x66, 0x65,
	0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x0e, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d,
	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x4c, 0x69, 0x66, 0x65, 0x63,
	0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x0e, 0x6c, 0x69, 0x66, 0x65, 0x63,
	0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x08, 0x70, 0x72, 0x65,
	0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65,
	0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
	0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, 0x65, 0x73,
	0x65, 0x6e, 0x63, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
	0x63, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x70,
	0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72,
	0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30,
	0x2e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x6e,
	0x73, 0x65, 0x53, 0x68, 0x61, 0x70, 0x65, 0x12, 0x57, 0x0a, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78,
	0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32,
	0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61,
	0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x65,
	0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75,
	0x72, 0x65, 0x52, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65,
	0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20,
	0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x57, 0x0a,
	0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x09,
	0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f,
	0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x53, 0x70,
	0x61, 0x72, 0x73, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x75,
	0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x46,
	0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x3b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0a,
	0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f,
	0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x65,
	0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x74,
	0x79, 0x70, 0x65, 0x1a, 0x22, 0x0a, 0x0c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x65, 0x61, 0x74,
	0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x22, 0x0a, 0x0c, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x0b, 0x10,
	0x0c, 0x22, 0x44, 0x0a, 0x17, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f,
	0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x0f,
	0x6d, 0x69, 0x6e, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x73, 0x73, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x01, 0x3a, 0x01, 0x31, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x44, 0x6f, 0x6d,
	0x61, 0x69, 0x6e, 0x4d, 0x61, 0x73, 0x73, 0x22, 0x6a, 0x0a, 0x09, 0x49, 0x6e, 0x74, 0x44, 0x6f,
	0x6d, 0x61, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18,
	0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61,
	0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x25, 0x0a, 0x0e,
	0x69, 0x73, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x18, 0x05,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69,
	0x63, 0x61, 0x6c, 0x22, 0x45, 0x0a, 0x0b, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x44, 0x6f, 0x6d, 0x61,
	0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x02, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0x97, 0x01, 0x0a, 0x0c, 0x53,
	0x74, 0x72, 0x75, 0x63, 0x74, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x39, 0x0a, 0x07, 0x66,
	0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74,
	0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
	0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66,
	0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x4c, 0x0a, 0x0e, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65,
	0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25,
	0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61,
	0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x65,
	0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x0d, 0x73, 0x70, 0x61, 0x72, 0x73, 0x65, 0x46, 0x65, 0x61,
	0x74, 0x75, 0x72, 0x65, 0x22, 0x38, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f,
	0x6d, 0x61, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
	0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x60,
	0x0a, 0x0a, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04,
	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x75, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x75, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
	0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
	0x22, 0x17, 0x0a, 0x15, 0x4e, 0x61, 0x74, 0x75, 0x72, 0x61, 0x6c, 0x4c, 0x61, 0x6e, 0x67, 0x75,
	0x61, 0x67, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x0d, 0x0a, 0x0b, 0x49, 0x6d, 0x61,
	0x67, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x0b, 0x0a, 0x09, 0x4d, 0x49, 0x44, 0x44,
	0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x0b, 0x0a, 0x09, 0x55, 0x52, 0x4c, 0x44, 0x6f, 0x6d, 0x61,
	0x69, 0x6e, 0x22, 0xab, 0x02, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69,
	0x6e, 0x12, 0x25, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6f, 0x72, 0x6d,
	0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x69,
	0x6e, 0x67, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x5d, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65,
	0x67, 0x65, 0x72, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
	0x32, 0x34, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65,
	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x44, 0x6f,
	0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65,
	0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65,
	0x72, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x8c, 0x01, 0x0a, 0x11, 0x49, 0x6e, 0x74, 0x65,
	0x67, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a,
	0x0e, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
	0x00, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x49, 0x58, 0x5f, 0x44, 0x41, 0x59, 0x53, 0x10, 0x05,
	0x12, 0x10, 0x0a, 0x0c, 0x55, 0x4e, 0x49, 0x58, 0x5f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x53,
	0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x49, 0x58, 0x5f, 0x4d, 0x49, 0x4c, 0x4c, 0x49,
	0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x53, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x49,
	0x58, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x53, 0x10, 0x03,
	0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x49, 0x58, 0x5f, 0x4e, 0x41, 0x4e, 0x4f, 0x53, 0x45, 0x43,
	0x4f, 0x4e, 0x44, 0x53, 0x10, 0x04, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
	0x22, 0xee, 0x01, 0x0a, 0x0f, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x44, 0x61, 0x79, 0x44, 0x6f,
	0x6d, 0x61, 0x69, 0x6e, 0x12, 0x25, 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66,
	0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x73,
	0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x67, 0x0a, 0x0e, 0x69,
	0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77,
	0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x69, 0x6d,
	0x65, 0x4f, 0x66, 0x44, 0x61, 0x79, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x49, 0x6e, 0x74,
	0x65, 0x67, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x4f, 0x66, 0x44, 0x61, 0x79, 0x46, 0x6f, 0x72,
	0x6d, 0x61, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x46, 0x6f,
	0x72, 0x6d, 0x61, 0x74, 0x22, 0x41, 0x0a, 0x16, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x54,
	0x69, 0x6d, 0x65, 0x4f, 0x66, 0x44, 0x61, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12,
	0x0a, 0x0e, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
	0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x36, 0x34, 0x5f,
	0x4e, 0x41, 0x4e, 0x4f, 0x53, 0x10, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61,
	0x74, 0x22, 0x51, 0x0a, 0x0f, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x50, 0x72, 0x65, 0x73,
	0x65, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x66, 0x72, 0x61, 0x63,
	0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x46,
	0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x63,
	0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43,
	0x6f, 0x75, 0x6e, 0x74, 0x22, 0x38, 0x0a, 0x1a, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x50,
	0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x57, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x47, 0x72, 0x6f,
	0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x01,
	0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x22, 0x2c,
	0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x72, 0x6d, 0x12, 0x1c,
	0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x01, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 0x5e, 0x0a, 0x11,
	0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f,
	0x72, 0x12, 0x49, 0x0a, 0x0d, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x6e, 0x6f,
	0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f,
	0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76,
	0x30, 0x2e, 0x49, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x72, 0x6d, 0x52, 0x0c,
	0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x72, 0x6d, 0x22, 0xa5, 0x07, 0x0a,
	0x14, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x0c, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x74,
	0x65, 0x6e, 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x74, 0x65,
	0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
	0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65,
	0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x6e, 0x73, 0x65, 0x54,
	0x65, 0x6e, 0x73, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x54, 0x65,
	0x6e, 0x73, 0x6f, 0x72, 0x12, 0x73, 0x0a, 0x14, 0x76, 0x61, 0x72, 0x6c, 0x65, 0x6e, 0x5f, 0x73,
	0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e,
	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x65, 0x6e, 0x73,
	0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x2e, 0x56, 0x61, 0x72, 0x4c, 0x65, 0x6e, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x65, 0x6e,
	0x73, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x12, 0x76, 0x61, 0x72, 0x6c, 0x65, 0x6e, 0x53, 0x70, 0x61,
	0x72, 0x73, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, 0x60, 0x0a, 0x0d, 0x73, 0x70, 0x61,
	0x72, 0x73, 0x65, 0x5f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x39, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65,
	0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72,
	0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53,
	0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x73,
	0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x1a, 0x9c, 0x01, 0x0a, 0x0c,
	0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b,
	0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
	0x01, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
	0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
	0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21,
	0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20,
	0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75,
	0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x75, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
	0x04, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x09, 0x75, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c,
	0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0xc8, 0x01, 0x0a, 0x0b, 0x44,
	0x65, 0x6e, 0x73, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f,
	0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x05, 0x73,
	0x68, 0x61, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6e,
	0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
	0x2e, 0x76, 0x30, 0x2e, 0x46, 0x69, 0x78, 0x65, 0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x52, 0x05,
	0x73, 0x68, 0x61, 0x70, 0x65, 0x12, 0x5e, 0x0a, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
	0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x74,
	0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
	0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x72,
	0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75,
	0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
	0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x35, 0x0a, 0x12, 0x56, 0x61, 0x72, 0x4c, 0x65, 0x6e, 0x53,
	0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x63,
	0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0xad, 0x01, 0x0a,
	0x0c, 0x53, 0x70, 0x61, 0x72, 0x73, 0x65, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x12, 0x43, 0x0a,
	0x0b, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
	0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e,
	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x46, 0x69, 0x78, 0x65,
	0x64, 0x53, 0x68, 0x61, 0x70, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x6e, 0x73, 0x65, 0x53, 0x68, 0x61,
	0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x75,
	0x6d, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10,
	0x69, 0x6e, 0x64, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73,
	0x12, 0x2a, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e,
	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x61, 0x6c,
	0x75, 0x65, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04,
	0x6b, 0x69, 0x6e, 0x64, 0x22, 0x95, 0x02, 0x0a, 0x19, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52,
	0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f,
	0x75, 0x70, 0x12, 0x80, 0x01, 0x0a, 0x15, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x5f, 0x72, 0x65,
	0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03,
	0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x2e,
	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x65, 0x6e, 0x73,
	0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
	0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x72,
	0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
	0x14, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x75, 0x0a, 0x19, 0x54, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x52,
	0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74,
	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
	0x03, 0x6b, 0x65, 0x79, 0x12, 0x42, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
	0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f, 0x77,
	0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x2e, 0x54, 0x65, 0x6e,
	0x73, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0x75, 0x0a, 0x0e,
	0x4c, 0x69, 0x66, 0x65, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x11,
	0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x10,
	0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x4c, 0x41, 0x4e, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09,
	0x0a, 0x05, 0x41, 0x4c, 0x50, 0x48, 0x41, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x45, 0x54,
	0x41, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x49, 0x4f,
	0x4e, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45,
	0x44, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x4f, 0x4e, 0x4c,
	0x59, 0x10, 0x06, 0x2a, 0x4a, 0x0a, 0x0b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x54, 0x79,
	0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f,
	0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x01, 0x12,
	0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c, 0x4f, 0x41,
	0x54, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x55, 0x43, 0x54, 0x10, 0x04, 0x42,
	0x68, 0x0a, 0x1a, 0x6f, 0x72, 0x67, 0x2e, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72, 0x66, 0x6c, 0x6f,
	0x77, 0x2e, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x76, 0x30, 0x50, 0x01, 0x5a,
	0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x66, 0x65, 0x61, 0x73,
	0x74, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x66, 0x65, 0x61, 0x73, 0x74, 0x2f, 0x73, 0x64, 0x6b, 0x2f,
	0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x74, 0x65, 0x6e, 0x73, 0x6f, 0x72,
	0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x72,
	0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x30, 0xf8, 0x01, 0x01,
}

var (
	file_tensorflow_metadata_proto_v0_schema_proto_rawDescOnce sync.Once
	file_tensorflow_metadata_proto_v0_schema_proto_rawDescData = file_tensorflow_metadata_proto_v0_schema_proto_rawDesc
)

func file_tensorflow_metadata_proto_v0_schema_proto_rawDescGZIP() []byte {
	file_tensorflow_metadata_proto_v0_schema_proto_rawDescOnce.Do(func() {
		file_tensorflow_metadata_proto_v0_schema_proto_rawDescData = protoimpl.X.CompressGZIP(file_tensorflow_metadata_proto_v0_schema_proto_rawDescData)
	})
	return file_tensorflow_metadata_proto_v0_schema_proto_rawDescData
}

var file_tensorflow_metadata_proto_v0_schema_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
var file_tensorflow_metadata_proto_v0_schema_proto_msgTypes = make([]protoimpl.MessageInfo, 36)
var file_tensorflow_metadata_proto_v0_schema_proto_goTypes = []interface{}{
	(LifecycleStage)(0),                             // 0: tensorflow.metadata.v0.LifecycleStage
	(FeatureType)(0),                                // 1: tensorflow.metadata.v0.FeatureType
	(TimeDomain_IntegerTimeFormat)(0),               // 2: tensorflow.metadata.v0.TimeDomain.IntegerTimeFormat
	(TimeOfDayDomain_IntegerTimeOfDayFormat)(0),     // 3: tensorflow.metadata.v0.TimeOfDayDomain.IntegerTimeOfDayFormat
	(*Schema)(nil),                                  // 4: tensorflow.metadata.v0.Schema
	(*Feature)(nil),                                 // 5: tensorflow.metadata.v0.Feature
	(*Annotation)(nil),                              // 6: tensorflow.metadata.v0.Annotation
	(*NumericValueComparator)(nil),                  // 7: tensorflow.metadata.v0.NumericValueComparator
	(*DatasetConstraints)(nil),                      // 8: tensorflow.metadata.v0.DatasetConstraints
	(*FixedShape)(nil),                              // 9: tensorflow.metadata.v0.FixedShape
	(*ValueCount)(nil),                              // 10: tensorflow.metadata.v0.ValueCount
	(*WeightedFeature)(nil),                         // 11: tensorflow.metadata.v0.WeightedFeature
	(*SparseFeature)(nil),                           // 12: tensorflow.metadata.v0.SparseFeature
	(*DistributionConstraints)(nil),                 // 13: tensorflow.metadata.v0.DistributionConstraints
	(*IntDomain)(nil),                               // 14: tensorflow.metadata.v0.IntDomain
	(*FloatDomain)(nil),                             // 15: tensorflow.metadata.v0.FloatDomain
	(*StructDomain)(nil),                            // 16: tensorflow.metadata.v0.StructDomain
	(*StringDomain)(nil),                            // 17: tensorflow.metadata.v0.StringDomain
	(*BoolDomain)(nil),                              // 18: tensorflow.metadata.v0.BoolDomain
	(*NaturalLanguageDomain)(nil),                   // 19: tensorflow.metadata.v0.NaturalLanguageDomain
	(*ImageDomain)(nil),                             // 20: tensorflow.metadata.v0.ImageDomain
	(*MIDDomain)(nil),                               // 21: tensorflow.metadata.v0.MIDDomain
	(*URLDomain)(nil),                               // 22: tensorflow.metadata.v0.URLDomain
	(*TimeDomain)(nil),                              // 23: tensorflow.metadata.v0.TimeDomain
	(*TimeOfDayDomain)(nil),                         // 24: tensorflow.metadata.v0.TimeOfDayDomain
	(*FeaturePresence)(nil),                         // 25: tensorflow.metadata.v0.FeaturePresence
	(*FeaturePresenceWithinGroup)(nil),              // 26: tensorflow.metadata.v0.FeaturePresenceWithinGroup
	(*InfinityNorm)(nil),                            // 27: tensorflow.metadata.v0.InfinityNorm
	(*FeatureComparator)(nil),                       // 28: tensorflow.metadata.v0.FeatureComparator
	(*TensorRepresentation)(nil),                    // 29: tensorflow.metadata.v0.TensorRepresentation
	(*TensorRepresentationGroup)(nil),               // 30: tensorflow.metadata.v0.TensorRepresentationGroup
	nil,                                             // 31: tensorflow.metadata.v0.Schema.TensorRepresentationGroupEntry
	(*FixedShape_Dim)(nil),                          // 32: tensorflow.metadata.v0.FixedShape.Dim
	(*SparseFeature_IndexFeature)(nil),              // 33: tensorflow.metadata.v0.SparseFeature.IndexFeature
	(*SparseFeature_ValueFeature)(nil),              // 34: tensorflow.metadata.v0.SparseFeature.ValueFeature
	(*TensorRepresentation_DefaultValue)(nil),       // 35: tensorflow.metadata.v0.TensorRepresentation.DefaultValue
	(*TensorRepresentation_DenseTensor)(nil),        // 36: tensorflow.metadata.v0.TensorRepresentation.DenseTensor
	(*TensorRepresentation_VarLenSparseTensor)(nil), // 37: tensorflow.metadata.v0.TensorRepresentation.VarLenSparseTensor
	(*TensorRepresentation_SparseTensor)(nil),       // 38: tensorflow.metadata.v0.TensorRepresentation.SparseTensor
	nil,             // 39: tensorflow.metadata.v0.TensorRepresentationGroup.TensorRepresentationEntry
	(*any.Any)(nil), // 40: google.protobuf.Any
	(*Path)(nil),    // 41: tensorflow.metadata.v0.Path
}
var file_tensorflow_metadata_proto_v0_schema_proto_depIdxs = []int32{
	5,  // 0: tensorflow.metadata.v0.Schema.feature:type_name -> tensorflow.metadata.v0.Feature
	12, // 1: tensorflow.metadata.v0.Schema.sparse_feature:type_name -> tensorflow.metadata.v0.SparseFeature
	11, // 2: tensorflow.metadata.v0.Schema.weighted_feature:type_name -> tensorflow.metadata.v0.WeightedFeature
	17, // 3: tensorflow.metadata.v0.Schema.string_domain:type_name -> tensorflow.metadata.v0.StringDomain
	15, // 4: tensorflow.metadata.v0.Schema.float_domain:type_name -> tensorflow.metadata.v0.FloatDomain
	14, // 5: tensorflow.metadata.v0.Schema.int_domain:type_name -> tensorflow.metadata.v0.IntDomain
	6,  // 6: tensorflow.metadata.v0.Schema.annotation:type_name -> tensorflow.metadata.v0.Annotation
	8,  // 7: tensorflow.metadata.v0.Schema.dataset_constraints:type_name -> tensorflow.metadata.v0.DatasetConstraints
	31, // 8: tensorflow.metadata.v0.Schema.tensor_representation_group:type_name -> tensorflow.metadata.v0.Schema.TensorRepresentationGroupEntry
	25, // 9: tensorflow.metadata.v0.Feature.presence:type_name -> tensorflow.metadata.v0.FeaturePresence
	26, // 10: tensorflow.metadata.v0.Feature.group_presence:type_name -> tensorflow.metadata.v0.FeaturePresenceWithinGroup
	9,  // 11: tensorflow.metadata.v0.Feature.shape:type_name -> tensorflow.metadata.v0.FixedShape
	10, // 12: tensorflow.metadata.v0.Feature.value_count:type_name -> tensorflow.metadata.v0.ValueCount
	1,  // 13: tensorflow.metadata.v0.Feature.type:type_name -> tensorflow.metadata.v0.FeatureType
	14, // 14: tensorflow.metadata.v0.Feature.int_domain:type_name -> tensorflow.metadata.v0.IntDomain
	15, // 15: tensorflow.metadata.v0.Feature.float_domain:type_name -> tensorflow.metadata.v0.FloatDomain
	17, // 16: tensorflow.metadata.v0.Feature.string_domain:type_name -> tensorflow.metadata.v0.StringDomain
	18, // 17: tensorflow.metadata.v0.Feature.bool_domain:type_name -> tensorflow.metadata.v0.BoolDomain
	16, // 18: tensorflow.metadata.v0.Feature.struct_domain:type_name -> tensorflow.metadata.v0.StructDomain
	19, // 19: tensorflow.metadata.v0.Feature.natural_language_domain:type_name -> tensorflow.metadata.v0.NaturalLanguageDomain
	20, // 20: tensorflow.metadata.v0.Feature.image_domain:type_name -> tensorflow.metadata.v0.ImageDomain
	21, // 21: tensorflow.metadata.v0.Feature.mid_domain:type_name -> tensorflow.metadata.v0.MIDDomain
	22, // 22: tensorflow.metadata.v0.Feature.url_domain:type_name -> tensorflow.metadata.v0.URLDomain
	23, // 23: tensorflow.metadata.v0.Feature.time_domain:type_name -> tensorflow.metadata.v0.TimeDomain
	24, // 24: tensorflow.metadata.v0.Feature.time_of_day_domain:type_name -> tensorflow.metadata.v0.TimeOfDayDomain
	13, // 25: tensorflow.metadata.v0.Feature.distribution_constraints:type_name -> tensorflow.metadata.v0.DistributionConstraints
	6,  // 26: tensorflow.metadata.v0.Feature.annotation:type_name -> tensorflow.metadata.v0.Annotation
	28, // 27: tensorflow.metadata.v0.Feature.skew_comparator:type_name -> tensorflow.metadata.v0.FeatureComparator
	28, // 28: tensorflow.metadata.v0.Feature.drift_comparator:type_name -> tensorflow.metadata.v0.FeatureComparator
	0,  // 29: tensorflow.metadata.v0.Feature.lifecycle_stage:type_name -> tensorflow.metadata.v0.LifecycleStage
	40, // 30: tensorflow.metadata.v0.Annotation.extra_metadata:type_name -> google.protobuf.Any
	7,  // 31: tensorflow.metadata.v0.DatasetConstraints.num_examples_drift_comparator:type_name -> tensorflow.metadata.v0.NumericValueComparator
	7,  // 32: tensorflow.metadata.v0.DatasetConstraints.num_examples_version_comparator:type_name -> tensorflow.metadata.v0.NumericValueComparator
	32, // 33: tensorflow.metadata.v0.FixedShape.dim:type_name -> tensorflow.metadata.v0.FixedShape.Dim
	41, // 34: tensorflow.metadata.v0.WeightedFeature.feature:type_name -> tensorflow.metadata.v0.Path
	41, // 35: tensorflow.metadata.v0.WeightedFeature.weight_feature:type_name -> tensorflow.metadata.v0.Path
	0,  // 36: tensorflow.metadata.v0.WeightedFeature.lifecycle_stage:type_name -> tensorflow.metadata.v0.LifecycleStage
	0,  // 37: tensorflow.metadata.v0.SparseFeature.lifecycle_stage:type_name -> tensorflow.metadata.v0.LifecycleStage
	25, // 38: tensorflow.metadata.v0.SparseFeature.presence:type_name -> tensorflow.metadata.v0.FeaturePresence
	9,  // 39: tensorflow.metadata.v0.SparseFeature.dense_shape:type_name -> tensorflow.metadata.v0.FixedShape
	33, // 40: tensorflow.metadata.v0.SparseFeature.index_feature:type_name -> tensorflow.metadata.v0.SparseFeature.IndexFeature
	34, // 41: tensorflow.metadata.v0.SparseFeature.value_feature:type_name -> tensorflow.metadata.v0.SparseFeature.ValueFeature
	1,  // 42: tensorflow.metadata.v0.SparseFeature.type:type_name -> tensorflow.metadata.v0.FeatureType
	5,  // 43: tensorflow.metadata.v0.StructDomain.feature:type_name -> tensorflow.metadata.v0.Feature
	12, // 44: tensorflow.metadata.v0.StructDomain.sparse_feature:type_name -> tensorflow.metadata.v0.SparseFeature
	2,  // 45: tensorflow.metadata.v0.TimeDomain.integer_format:type_name -> tensorflow.metadata.v0.TimeDomain.IntegerTimeFormat
	3,  // 46: tensorflow.metadata.v0.TimeOfDayDomain.integer_format:type_name -> tensorflow.metadata.v0.TimeOfDayDomain.IntegerTimeOfDayFormat
	27, // 47: tensorflow.metadata.v0.FeatureComparator.infinity_norm:type_name -> tensorflow.metadata.v0.InfinityNorm
	36, // 48: tensorflow.metadata.v0.TensorRepresentation.dense_tensor:type_name -> tensorflow.metadata.v0.TensorRepresentation.DenseTensor
	37, // 49: tensorflow.metadata.v0.TensorRepresentation.varlen_sparse_tensor:type_name -> tensorflow.metadata.v0.TensorRepresentation.VarLenSparseTensor
	38, // 50: tensorflow.metadata.v0.TensorRepresentation.sparse_tensor:type_name -> tensorflow.metadata.v0.TensorRepresentation.SparseTensor
	39, // 51: tensorflow.metadata.v0.TensorRepresentationGroup.tensor_representation:type_name -> tensorflow.metadata.v0.TensorRepresentationGroup.TensorRepresentationEntry
	30, // 52: tensorflow.metadata.v0.Schema.TensorRepresentationGroupEntry.value:type_name -> tensorflow.metadata.v0.TensorRepresentationGroup
	9,  // 53: tensorflow.metadata.v0.TensorRepresentation.DenseTensor.shape:type_name -> tensorflow.metadata.v0.FixedShape
	35, // 54: tensorflow.metadata.v0.TensorRepresentation.DenseTensor.default_value:type_name -> tensorflow.metadata.v0.TensorRepresentation.DefaultValue
	9,  // 55: tensorflow.metadata.v0.TensorRepresentation.SparseTensor.dense_shape:type_name -> tensorflow.metadata.v0.FixedShape
	29, // 56: tensorflow.metadata.v0.TensorRepresentationGroup.TensorRepresentationEntry.value:type_name -> tensorflow.metadata.v0.TensorRepresentation
	57, // [57:57] is the sub-list for method output_type
	57, // [57:57] is the sub-list for method input_type
	57, // [57:57] is the sub-list for extension type_name
	57, // [57:57] is the sub-list for extension extendee
	0,  // [0:57] is the sub-list for field type_name
}

func init() { file_tensorflow_metadata_proto_v0_schema_proto_init() }
func file_tensorflow_metadata_proto_v0_schema_proto_init() {
	if File_tensorflow_metadata_proto_v0_schema_proto != nil {
		return
	}
	file_tensorflow_metadata_proto_v0_path_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Schema); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Feature); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Annotation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NumericValueComparator); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DatasetConstraints); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FixedShape); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ValueCount); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*WeightedFeature); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SparseFeature); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*DistributionConstraints); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*IntDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FloatDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*StructDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*StringDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*BoolDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*NaturalLanguageDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*ImageDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MIDDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*URLDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TimeDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TimeOfDayDomain); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FeaturePresence); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FeaturePresenceWithinGroup); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*InfinityNorm); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FeatureComparator); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TensorRepresentation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TensorRepresentationGroup); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*FixedShape_Dim); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SparseFeature_IndexFeature); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*SparseFeature_ValueFeature); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TensorRepresentation_DefaultValue); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TensorRepresentation_DenseTensor); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TensorRepresentation_VarLenSparseTensor); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*TensorRepresentation_SparseTensor); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[1].OneofWrappers = []interface{}{
		(*Feature_Presence)(nil),
		(*Feature_GroupPresence)(nil),
		(*Feature_Shape)(nil),
		(*Feature_ValueCount)(nil),
		(*Feature_Domain)(nil),
		(*Feature_IntDomain)(nil),
		(*Feature_FloatDomain)(nil),
		(*Feature_StringDomain)(nil),
		(*Feature_BoolDomain)(nil),
		(*Feature_StructDomain)(nil),
		(*Feature_NaturalLanguageDomain)(nil),
		(*Feature_ImageDomain)(nil),
		(*Feature_MidDomain)(nil),
		(*Feature_UrlDomain)(nil),
		(*Feature_TimeDomain)(nil),
		(*Feature_TimeOfDayDomain)(nil),
	}
	file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[19].OneofWrappers = []interface{}{
		(*TimeDomain_StringFormat)(nil),
		(*TimeDomain_IntegerFormat)(nil),
	}
	file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[20].OneofWrappers = []interface{}{
		(*TimeOfDayDomain_StringFormat)(nil),
		(*TimeOfDayDomain_IntegerFormat)(nil),
	}
	file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[25].OneofWrappers = []interface{}{
		(*TensorRepresentation_DenseTensor_)(nil),
		(*TensorRepresentation_VarlenSparseTensor)(nil),
		(*TensorRepresentation_SparseTensor_)(nil),
	}
	file_tensorflow_metadata_proto_v0_schema_proto_msgTypes[31].OneofWrappers = []interface{}{
		(*TensorRepresentation_DefaultValue_FloatValue)(nil),
		(*TensorRepresentation_DefaultValue_IntValue)(nil),
		(*TensorRepresentation_DefaultValue_BytesValue)(nil),
		(*TensorRepresentation_DefaultValue_UintValue)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_tensorflow_metadata_proto_v0_schema_proto_rawDesc,
			NumEnums:      4,
			NumMessages:   36,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_tensorflow_metadata_proto_v0_schema_proto_goTypes,
		DependencyIndexes: file_tensorflow_metadata_proto_v0_schema_proto_depIdxs,
		EnumInfos:         file_tensorflow_metadata_proto_v0_schema_proto_enumTypes,
		MessageInfos:      file_tensorflow_metadata_proto_v0_schema_proto_msgTypes,
	}.Build()
	File_tensorflow_metadata_proto_v0_schema_proto = out.File
	file_tensorflow_metadata_proto_v0_schema_proto_rawDesc = nil
	file_tensorflow_metadata_proto_v0_schema_proto_goTypes = nil
	file_tensorflow_metadata_proto_v0_schema_proto_depIdxs = nil
}
