cloud.google.com/go/aiplatform@v1.106.0/apiv1/aiplatformpb/model_monitoring.pb.go (about) 1 // Copyright 2025 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Code generated by protoc-gen-go. DO NOT EDIT. 16 // versions: 17 // protoc-gen-go v1.35.2 18 // protoc v4.25.7 19 // source: google/cloud/aiplatform/v1/model_monitoring.proto 20 21 package aiplatformpb 22 23 import ( 24 _ "google.golang.org/genproto/googleapis/api/annotations" 25 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 26 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 27 reflect "reflect" 28 sync "sync" 29 ) 30 31 const ( 32 // Verify that this generated code is sufficiently up-to-date. 33 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 34 // Verify that runtime/protoimpl is sufficiently up-to-date. 35 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 36 ) 37 38 // The storage format of the predictions generated BatchPrediction job. 39 type ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat int32 40 41 const ( 42 // Should not be set. 43 ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PREDICTION_FORMAT_UNSPECIFIED ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat = 0 44 // Predictions are in JSONL files. 45 ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_JSONL ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat = 2 46 // Predictions are in BigQuery. 47 ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_BIGQUERY ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat = 3 48 ) 49 50 // Enum value maps for ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat. 51 var ( 52 ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat_name = map[int32]string{ 53 0: "PREDICTION_FORMAT_UNSPECIFIED", 54 2: "JSONL", 55 3: "BIGQUERY", 56 } 57 ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat_value = map[string]int32{ 58 "PREDICTION_FORMAT_UNSPECIFIED": 0, 59 "JSONL": 2, 60 "BIGQUERY": 3, 61 } 62 ) 63 64 func (x ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat) Enum() *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat { 65 p := new(ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat) 66 *p = x 67 return p 68 } 69 70 func (x ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat) String() string { 71 return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) 72 } 73 74 func (ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat) Descriptor() protoreflect.EnumDescriptor { 75 return file_google_cloud_aiplatform_v1_model_monitoring_proto_enumTypes[0].Descriptor() 76 } 77 78 func (ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat) Type() protoreflect.EnumType { 79 return &file_google_cloud_aiplatform_v1_model_monitoring_proto_enumTypes[0] 80 } 81 82 func (x ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat) Number() protoreflect.EnumNumber { 83 return protoreflect.EnumNumber(x) 84 } 85 86 // Deprecated: Use ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat.Descriptor instead. 87 func (ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat) EnumDescriptor() ([]byte, []int) { 88 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{0, 3, 0, 0} 89 } 90 91 // The objective configuration for model monitoring, including the information 92 // needed to detect anomalies for one particular model. 93 type ModelMonitoringObjectiveConfig struct { 94 state protoimpl.MessageState 95 sizeCache protoimpl.SizeCache 96 unknownFields protoimpl.UnknownFields 97 98 // Training dataset for models. This field has to be set only if 99 // TrainingPredictionSkewDetectionConfig is specified. 100 TrainingDataset *ModelMonitoringObjectiveConfig_TrainingDataset `protobuf:"bytes,1,opt,name=training_dataset,json=trainingDataset,proto3" json:"training_dataset,omitempty"` 101 // The config for skew between training data and prediction data. 102 TrainingPredictionSkewDetectionConfig *ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig `protobuf:"bytes,2,opt,name=training_prediction_skew_detection_config,json=trainingPredictionSkewDetectionConfig,proto3" json:"training_prediction_skew_detection_config,omitempty"` 103 // The config for drift of prediction data. 104 PredictionDriftDetectionConfig *ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig `protobuf:"bytes,3,opt,name=prediction_drift_detection_config,json=predictionDriftDetectionConfig,proto3" json:"prediction_drift_detection_config,omitempty"` 105 // The config for integrating with Vertex Explainable AI. 106 ExplanationConfig *ModelMonitoringObjectiveConfig_ExplanationConfig `protobuf:"bytes,5,opt,name=explanation_config,json=explanationConfig,proto3" json:"explanation_config,omitempty"` 107 } 108 109 func (x *ModelMonitoringObjectiveConfig) Reset() { 110 *x = ModelMonitoringObjectiveConfig{} 111 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[0] 112 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 113 ms.StoreMessageInfo(mi) 114 } 115 116 func (x *ModelMonitoringObjectiveConfig) String() string { 117 return protoimpl.X.MessageStringOf(x) 118 } 119 120 func (*ModelMonitoringObjectiveConfig) ProtoMessage() {} 121 122 func (x *ModelMonitoringObjectiveConfig) ProtoReflect() protoreflect.Message { 123 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[0] 124 if x != nil { 125 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 126 if ms.LoadMessageInfo() == nil { 127 ms.StoreMessageInfo(mi) 128 } 129 return ms 130 } 131 return mi.MessageOf(x) 132 } 133 134 // Deprecated: Use ModelMonitoringObjectiveConfig.ProtoReflect.Descriptor instead. 135 func (*ModelMonitoringObjectiveConfig) Descriptor() ([]byte, []int) { 136 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{0} 137 } 138 139 func (x *ModelMonitoringObjectiveConfig) GetTrainingDataset() *ModelMonitoringObjectiveConfig_TrainingDataset { 140 if x != nil { 141 return x.TrainingDataset 142 } 143 return nil 144 } 145 146 func (x *ModelMonitoringObjectiveConfig) GetTrainingPredictionSkewDetectionConfig() *ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig { 147 if x != nil { 148 return x.TrainingPredictionSkewDetectionConfig 149 } 150 return nil 151 } 152 153 func (x *ModelMonitoringObjectiveConfig) GetPredictionDriftDetectionConfig() *ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig { 154 if x != nil { 155 return x.PredictionDriftDetectionConfig 156 } 157 return nil 158 } 159 160 func (x *ModelMonitoringObjectiveConfig) GetExplanationConfig() *ModelMonitoringObjectiveConfig_ExplanationConfig { 161 if x != nil { 162 return x.ExplanationConfig 163 } 164 return nil 165 } 166 167 // The alert config for model monitoring. 168 type ModelMonitoringAlertConfig struct { 169 state protoimpl.MessageState 170 sizeCache protoimpl.SizeCache 171 unknownFields protoimpl.UnknownFields 172 173 // Types that are assignable to Alert: 174 // 175 // *ModelMonitoringAlertConfig_EmailAlertConfig_ 176 Alert isModelMonitoringAlertConfig_Alert `protobuf_oneof:"alert"` 177 // Dump the anomalies to Cloud Logging. The anomalies will be put to json 178 // payload encoded from proto 179 // [ModelMonitoringStatsAnomalies][google.cloud.aiplatform.v1.ModelMonitoringStatsAnomalies]. 180 // This can be further synced to Pub/Sub or any other services supported by 181 // Cloud Logging. 182 EnableLogging bool `protobuf:"varint,2,opt,name=enable_logging,json=enableLogging,proto3" json:"enable_logging,omitempty"` 183 // Resource names of the NotificationChannels to send alert. 184 // Must be of the format 185 // `projects/<project_id_or_number>/notificationChannels/<channel_id>` 186 NotificationChannels []string `protobuf:"bytes,3,rep,name=notification_channels,json=notificationChannels,proto3" json:"notification_channels,omitempty"` 187 } 188 189 func (x *ModelMonitoringAlertConfig) Reset() { 190 *x = ModelMonitoringAlertConfig{} 191 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[1] 192 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 193 ms.StoreMessageInfo(mi) 194 } 195 196 func (x *ModelMonitoringAlertConfig) String() string { 197 return protoimpl.X.MessageStringOf(x) 198 } 199 200 func (*ModelMonitoringAlertConfig) ProtoMessage() {} 201 202 func (x *ModelMonitoringAlertConfig) ProtoReflect() protoreflect.Message { 203 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[1] 204 if x != nil { 205 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 206 if ms.LoadMessageInfo() == nil { 207 ms.StoreMessageInfo(mi) 208 } 209 return ms 210 } 211 return mi.MessageOf(x) 212 } 213 214 // Deprecated: Use ModelMonitoringAlertConfig.ProtoReflect.Descriptor instead. 215 func (*ModelMonitoringAlertConfig) Descriptor() ([]byte, []int) { 216 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{1} 217 } 218 219 func (m *ModelMonitoringAlertConfig) GetAlert() isModelMonitoringAlertConfig_Alert { 220 if m != nil { 221 return m.Alert 222 } 223 return nil 224 } 225 226 func (x *ModelMonitoringAlertConfig) GetEmailAlertConfig() *ModelMonitoringAlertConfig_EmailAlertConfig { 227 if x, ok := x.GetAlert().(*ModelMonitoringAlertConfig_EmailAlertConfig_); ok { 228 return x.EmailAlertConfig 229 } 230 return nil 231 } 232 233 func (x *ModelMonitoringAlertConfig) GetEnableLogging() bool { 234 if x != nil { 235 return x.EnableLogging 236 } 237 return false 238 } 239 240 func (x *ModelMonitoringAlertConfig) GetNotificationChannels() []string { 241 if x != nil { 242 return x.NotificationChannels 243 } 244 return nil 245 } 246 247 type isModelMonitoringAlertConfig_Alert interface { 248 isModelMonitoringAlertConfig_Alert() 249 } 250 251 type ModelMonitoringAlertConfig_EmailAlertConfig_ struct { 252 // Email alert config. 253 EmailAlertConfig *ModelMonitoringAlertConfig_EmailAlertConfig `protobuf:"bytes,1,opt,name=email_alert_config,json=emailAlertConfig,proto3,oneof"` 254 } 255 256 func (*ModelMonitoringAlertConfig_EmailAlertConfig_) isModelMonitoringAlertConfig_Alert() {} 257 258 // The config for feature monitoring threshold. 259 type ThresholdConfig struct { 260 state protoimpl.MessageState 261 sizeCache protoimpl.SizeCache 262 unknownFields protoimpl.UnknownFields 263 264 // Types that are assignable to Threshold: 265 // 266 // *ThresholdConfig_Value 267 Threshold isThresholdConfig_Threshold `protobuf_oneof:"threshold"` 268 } 269 270 func (x *ThresholdConfig) Reset() { 271 *x = ThresholdConfig{} 272 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[2] 273 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 274 ms.StoreMessageInfo(mi) 275 } 276 277 func (x *ThresholdConfig) String() string { 278 return protoimpl.X.MessageStringOf(x) 279 } 280 281 func (*ThresholdConfig) ProtoMessage() {} 282 283 func (x *ThresholdConfig) ProtoReflect() protoreflect.Message { 284 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[2] 285 if x != nil { 286 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 287 if ms.LoadMessageInfo() == nil { 288 ms.StoreMessageInfo(mi) 289 } 290 return ms 291 } 292 return mi.MessageOf(x) 293 } 294 295 // Deprecated: Use ThresholdConfig.ProtoReflect.Descriptor instead. 296 func (*ThresholdConfig) Descriptor() ([]byte, []int) { 297 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{2} 298 } 299 300 func (m *ThresholdConfig) GetThreshold() isThresholdConfig_Threshold { 301 if m != nil { 302 return m.Threshold 303 } 304 return nil 305 } 306 307 func (x *ThresholdConfig) GetValue() float64 { 308 if x, ok := x.GetThreshold().(*ThresholdConfig_Value); ok { 309 return x.Value 310 } 311 return 0 312 } 313 314 type isThresholdConfig_Threshold interface { 315 isThresholdConfig_Threshold() 316 } 317 318 type ThresholdConfig_Value struct { 319 // Specify a threshold value that can trigger the alert. 320 // If this threshold config is for feature distribution distance: 321 // 1. For categorical feature, the distribution distance is calculated by 322 // L-inifinity norm. 323 // 2. For numerical feature, the distribution distance is calculated by 324 // Jensen–Shannon divergence. 325 // 326 // Each feature must have a non-zero threshold if they need to be monitored. 327 // Otherwise no alert will be triggered for that feature. 328 Value float64 `protobuf:"fixed64,1,opt,name=value,proto3,oneof"` 329 } 330 331 func (*ThresholdConfig_Value) isThresholdConfig_Threshold() {} 332 333 // Sampling Strategy for logging, can be for both training and prediction 334 // dataset. 335 type SamplingStrategy struct { 336 state protoimpl.MessageState 337 sizeCache protoimpl.SizeCache 338 unknownFields protoimpl.UnknownFields 339 340 // Random sample config. Will support more sampling strategies later. 341 RandomSampleConfig *SamplingStrategy_RandomSampleConfig `protobuf:"bytes,1,opt,name=random_sample_config,json=randomSampleConfig,proto3" json:"random_sample_config,omitempty"` 342 } 343 344 func (x *SamplingStrategy) Reset() { 345 *x = SamplingStrategy{} 346 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[3] 347 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 348 ms.StoreMessageInfo(mi) 349 } 350 351 func (x *SamplingStrategy) String() string { 352 return protoimpl.X.MessageStringOf(x) 353 } 354 355 func (*SamplingStrategy) ProtoMessage() {} 356 357 func (x *SamplingStrategy) ProtoReflect() protoreflect.Message { 358 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[3] 359 if x != nil { 360 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 361 if ms.LoadMessageInfo() == nil { 362 ms.StoreMessageInfo(mi) 363 } 364 return ms 365 } 366 return mi.MessageOf(x) 367 } 368 369 // Deprecated: Use SamplingStrategy.ProtoReflect.Descriptor instead. 370 func (*SamplingStrategy) Descriptor() ([]byte, []int) { 371 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{3} 372 } 373 374 func (x *SamplingStrategy) GetRandomSampleConfig() *SamplingStrategy_RandomSampleConfig { 375 if x != nil { 376 return x.RandomSampleConfig 377 } 378 return nil 379 } 380 381 // Training Dataset information. 382 type ModelMonitoringObjectiveConfig_TrainingDataset struct { 383 state protoimpl.MessageState 384 sizeCache protoimpl.SizeCache 385 unknownFields protoimpl.UnknownFields 386 387 // Types that are assignable to DataSource: 388 // 389 // *ModelMonitoringObjectiveConfig_TrainingDataset_Dataset 390 // *ModelMonitoringObjectiveConfig_TrainingDataset_GcsSource 391 // *ModelMonitoringObjectiveConfig_TrainingDataset_BigquerySource 392 DataSource isModelMonitoringObjectiveConfig_TrainingDataset_DataSource `protobuf_oneof:"data_source"` 393 // Data format of the dataset, only applicable if the input is from 394 // Google Cloud Storage. 395 // The possible formats are: 396 // 397 // "tf-record" 398 // The source file is a TFRecord file. 399 // 400 // "csv" 401 // The source file is a CSV file. 402 // "jsonl" 403 // The source file is a JSONL file. 404 DataFormat string `protobuf:"bytes,2,opt,name=data_format,json=dataFormat,proto3" json:"data_format,omitempty"` 405 // The target field name the model is to predict. 406 // This field will be excluded when doing Predict and (or) Explain for the 407 // training data. 408 TargetField string `protobuf:"bytes,6,opt,name=target_field,json=targetField,proto3" json:"target_field,omitempty"` 409 // Strategy to sample data from Training Dataset. 410 // If not set, we process the whole dataset. 411 LoggingSamplingStrategy *SamplingStrategy `protobuf:"bytes,7,opt,name=logging_sampling_strategy,json=loggingSamplingStrategy,proto3" json:"logging_sampling_strategy,omitempty"` 412 } 413 414 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) Reset() { 415 *x = ModelMonitoringObjectiveConfig_TrainingDataset{} 416 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[4] 417 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 418 ms.StoreMessageInfo(mi) 419 } 420 421 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) String() string { 422 return protoimpl.X.MessageStringOf(x) 423 } 424 425 func (*ModelMonitoringObjectiveConfig_TrainingDataset) ProtoMessage() {} 426 427 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) ProtoReflect() protoreflect.Message { 428 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[4] 429 if x != nil { 430 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 431 if ms.LoadMessageInfo() == nil { 432 ms.StoreMessageInfo(mi) 433 } 434 return ms 435 } 436 return mi.MessageOf(x) 437 } 438 439 // Deprecated: Use ModelMonitoringObjectiveConfig_TrainingDataset.ProtoReflect.Descriptor instead. 440 func (*ModelMonitoringObjectiveConfig_TrainingDataset) Descriptor() ([]byte, []int) { 441 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{0, 0} 442 } 443 444 func (m *ModelMonitoringObjectiveConfig_TrainingDataset) GetDataSource() isModelMonitoringObjectiveConfig_TrainingDataset_DataSource { 445 if m != nil { 446 return m.DataSource 447 } 448 return nil 449 } 450 451 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) GetDataset() string { 452 if x, ok := x.GetDataSource().(*ModelMonitoringObjectiveConfig_TrainingDataset_Dataset); ok { 453 return x.Dataset 454 } 455 return "" 456 } 457 458 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) GetGcsSource() *GcsSource { 459 if x, ok := x.GetDataSource().(*ModelMonitoringObjectiveConfig_TrainingDataset_GcsSource); ok { 460 return x.GcsSource 461 } 462 return nil 463 } 464 465 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) GetBigquerySource() *BigQuerySource { 466 if x, ok := x.GetDataSource().(*ModelMonitoringObjectiveConfig_TrainingDataset_BigquerySource); ok { 467 return x.BigquerySource 468 } 469 return nil 470 } 471 472 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) GetDataFormat() string { 473 if x != nil { 474 return x.DataFormat 475 } 476 return "" 477 } 478 479 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) GetTargetField() string { 480 if x != nil { 481 return x.TargetField 482 } 483 return "" 484 } 485 486 func (x *ModelMonitoringObjectiveConfig_TrainingDataset) GetLoggingSamplingStrategy() *SamplingStrategy { 487 if x != nil { 488 return x.LoggingSamplingStrategy 489 } 490 return nil 491 } 492 493 type isModelMonitoringObjectiveConfig_TrainingDataset_DataSource interface { 494 isModelMonitoringObjectiveConfig_TrainingDataset_DataSource() 495 } 496 497 type ModelMonitoringObjectiveConfig_TrainingDataset_Dataset struct { 498 // The resource name of the Dataset used to train this Model. 499 Dataset string `protobuf:"bytes,3,opt,name=dataset,proto3,oneof"` 500 } 501 502 type ModelMonitoringObjectiveConfig_TrainingDataset_GcsSource struct { 503 // The Google Cloud Storage uri of the unmanaged Dataset used to train 504 // this Model. 505 GcsSource *GcsSource `protobuf:"bytes,4,opt,name=gcs_source,json=gcsSource,proto3,oneof"` 506 } 507 508 type ModelMonitoringObjectiveConfig_TrainingDataset_BigquerySource struct { 509 // The BigQuery table of the unmanaged Dataset used to train this 510 // Model. 511 BigquerySource *BigQuerySource `protobuf:"bytes,5,opt,name=bigquery_source,json=bigquerySource,proto3,oneof"` 512 } 513 514 func (*ModelMonitoringObjectiveConfig_TrainingDataset_Dataset) isModelMonitoringObjectiveConfig_TrainingDataset_DataSource() { 515 } 516 517 func (*ModelMonitoringObjectiveConfig_TrainingDataset_GcsSource) isModelMonitoringObjectiveConfig_TrainingDataset_DataSource() { 518 } 519 520 func (*ModelMonitoringObjectiveConfig_TrainingDataset_BigquerySource) isModelMonitoringObjectiveConfig_TrainingDataset_DataSource() { 521 } 522 523 // The config for Training & Prediction data skew detection. It specifies the 524 // training dataset sources and the skew detection parameters. 525 type ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig struct { 526 state protoimpl.MessageState 527 sizeCache protoimpl.SizeCache 528 unknownFields protoimpl.UnknownFields 529 530 // Key is the feature name and value is the threshold. If a feature needs to 531 // be monitored for skew, a value threshold must be configured for that 532 // feature. The threshold here is against feature distribution distance 533 // between the training and prediction feature. 534 SkewThresholds map[string]*ThresholdConfig `protobuf:"bytes,1,rep,name=skew_thresholds,json=skewThresholds,proto3" json:"skew_thresholds,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 535 // Key is the feature name and value is the threshold. The threshold here is 536 // against attribution score distance between the training and prediction 537 // feature. 538 AttributionScoreSkewThresholds map[string]*ThresholdConfig `protobuf:"bytes,2,rep,name=attribution_score_skew_thresholds,json=attributionScoreSkewThresholds,proto3" json:"attribution_score_skew_thresholds,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 539 // Skew anomaly detection threshold used by all features. 540 // When the per-feature thresholds are not set, this field can be used to 541 // specify a threshold for all features. 542 DefaultSkewThreshold *ThresholdConfig `protobuf:"bytes,6,opt,name=default_skew_threshold,json=defaultSkewThreshold,proto3" json:"default_skew_threshold,omitempty"` 543 } 544 545 func (x *ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig) Reset() { 546 *x = ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig{} 547 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[5] 548 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 549 ms.StoreMessageInfo(mi) 550 } 551 552 func (x *ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig) String() string { 553 return protoimpl.X.MessageStringOf(x) 554 } 555 556 func (*ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig) ProtoMessage() {} 557 558 func (x *ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig) ProtoReflect() protoreflect.Message { 559 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[5] 560 if x != nil { 561 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 562 if ms.LoadMessageInfo() == nil { 563 ms.StoreMessageInfo(mi) 564 } 565 return ms 566 } 567 return mi.MessageOf(x) 568 } 569 570 // Deprecated: Use ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig.ProtoReflect.Descriptor instead. 571 func (*ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig) Descriptor() ([]byte, []int) { 572 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{0, 1} 573 } 574 575 func (x *ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig) GetSkewThresholds() map[string]*ThresholdConfig { 576 if x != nil { 577 return x.SkewThresholds 578 } 579 return nil 580 } 581 582 func (x *ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig) GetAttributionScoreSkewThresholds() map[string]*ThresholdConfig { 583 if x != nil { 584 return x.AttributionScoreSkewThresholds 585 } 586 return nil 587 } 588 589 func (x *ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig) GetDefaultSkewThreshold() *ThresholdConfig { 590 if x != nil { 591 return x.DefaultSkewThreshold 592 } 593 return nil 594 } 595 596 // The config for Prediction data drift detection. 597 type ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig struct { 598 state protoimpl.MessageState 599 sizeCache protoimpl.SizeCache 600 unknownFields protoimpl.UnknownFields 601 602 // Key is the feature name and value is the threshold. If a feature needs to 603 // be monitored for drift, a value threshold must be configured for that 604 // feature. The threshold here is against feature distribution distance 605 // between different time windws. 606 DriftThresholds map[string]*ThresholdConfig `protobuf:"bytes,1,rep,name=drift_thresholds,json=driftThresholds,proto3" json:"drift_thresholds,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 607 // Key is the feature name and value is the threshold. The threshold here is 608 // against attribution score distance between different time windows. 609 AttributionScoreDriftThresholds map[string]*ThresholdConfig `protobuf:"bytes,2,rep,name=attribution_score_drift_thresholds,json=attributionScoreDriftThresholds,proto3" json:"attribution_score_drift_thresholds,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` 610 // Drift anomaly detection threshold used by all features. 611 // When the per-feature thresholds are not set, this field can be used to 612 // specify a threshold for all features. 613 DefaultDriftThreshold *ThresholdConfig `protobuf:"bytes,5,opt,name=default_drift_threshold,json=defaultDriftThreshold,proto3" json:"default_drift_threshold,omitempty"` 614 } 615 616 func (x *ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig) Reset() { 617 *x = ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig{} 618 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[6] 619 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 620 ms.StoreMessageInfo(mi) 621 } 622 623 func (x *ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig) String() string { 624 return protoimpl.X.MessageStringOf(x) 625 } 626 627 func (*ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig) ProtoMessage() {} 628 629 func (x *ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig) ProtoReflect() protoreflect.Message { 630 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[6] 631 if x != nil { 632 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 633 if ms.LoadMessageInfo() == nil { 634 ms.StoreMessageInfo(mi) 635 } 636 return ms 637 } 638 return mi.MessageOf(x) 639 } 640 641 // Deprecated: Use ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig.ProtoReflect.Descriptor instead. 642 func (*ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig) Descriptor() ([]byte, []int) { 643 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{0, 2} 644 } 645 646 func (x *ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig) GetDriftThresholds() map[string]*ThresholdConfig { 647 if x != nil { 648 return x.DriftThresholds 649 } 650 return nil 651 } 652 653 func (x *ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig) GetAttributionScoreDriftThresholds() map[string]*ThresholdConfig { 654 if x != nil { 655 return x.AttributionScoreDriftThresholds 656 } 657 return nil 658 } 659 660 func (x *ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig) GetDefaultDriftThreshold() *ThresholdConfig { 661 if x != nil { 662 return x.DefaultDriftThreshold 663 } 664 return nil 665 } 666 667 // The config for integrating with Vertex Explainable AI. Only applicable if 668 // the Model has explanation_spec populated. 669 type ModelMonitoringObjectiveConfig_ExplanationConfig struct { 670 state protoimpl.MessageState 671 sizeCache protoimpl.SizeCache 672 unknownFields protoimpl.UnknownFields 673 674 // If want to analyze the Vertex Explainable AI feature attribute scores or 675 // not. If set to true, Vertex AI will log the feature attributions from 676 // explain response and do the skew/drift detection for them. 677 EnableFeatureAttributes bool `protobuf:"varint,1,opt,name=enable_feature_attributes,json=enableFeatureAttributes,proto3" json:"enable_feature_attributes,omitempty"` 678 // Predictions generated by the BatchPredictionJob using baseline dataset. 679 ExplanationBaseline *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline `protobuf:"bytes,2,opt,name=explanation_baseline,json=explanationBaseline,proto3" json:"explanation_baseline,omitempty"` 680 } 681 682 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig) Reset() { 683 *x = ModelMonitoringObjectiveConfig_ExplanationConfig{} 684 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[7] 685 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 686 ms.StoreMessageInfo(mi) 687 } 688 689 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig) String() string { 690 return protoimpl.X.MessageStringOf(x) 691 } 692 693 func (*ModelMonitoringObjectiveConfig_ExplanationConfig) ProtoMessage() {} 694 695 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig) ProtoReflect() protoreflect.Message { 696 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[7] 697 if x != nil { 698 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 699 if ms.LoadMessageInfo() == nil { 700 ms.StoreMessageInfo(mi) 701 } 702 return ms 703 } 704 return mi.MessageOf(x) 705 } 706 707 // Deprecated: Use ModelMonitoringObjectiveConfig_ExplanationConfig.ProtoReflect.Descriptor instead. 708 func (*ModelMonitoringObjectiveConfig_ExplanationConfig) Descriptor() ([]byte, []int) { 709 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{0, 3} 710 } 711 712 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig) GetEnableFeatureAttributes() bool { 713 if x != nil { 714 return x.EnableFeatureAttributes 715 } 716 return false 717 } 718 719 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig) GetExplanationBaseline() *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline { 720 if x != nil { 721 return x.ExplanationBaseline 722 } 723 return nil 724 } 725 726 // Output from 727 // [BatchPredictionJob][google.cloud.aiplatform.v1.BatchPredictionJob] for 728 // Model Monitoring baseline dataset, which can be used to generate baseline 729 // attribution scores. 730 type ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline struct { 731 state protoimpl.MessageState 732 sizeCache protoimpl.SizeCache 733 unknownFields protoimpl.UnknownFields 734 735 // The configuration specifying of BatchExplain job output. This can be 736 // used to generate the baseline of feature attribution scores. 737 // 738 // Types that are assignable to Destination: 739 // 740 // *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Gcs 741 // *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Bigquery 742 Destination isModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Destination `protobuf_oneof:"destination"` 743 // The storage format of the predictions generated BatchPrediction job. 744 PredictionFormat ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat `protobuf:"varint,1,opt,name=prediction_format,json=predictionFormat,proto3,enum=google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat" json:"prediction_format,omitempty"` 745 } 746 747 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) Reset() { 748 *x = ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline{} 749 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[12] 750 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 751 ms.StoreMessageInfo(mi) 752 } 753 754 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) String() string { 755 return protoimpl.X.MessageStringOf(x) 756 } 757 758 func (*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) ProtoMessage() {} 759 760 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) ProtoReflect() protoreflect.Message { 761 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[12] 762 if x != nil { 763 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 764 if ms.LoadMessageInfo() == nil { 765 ms.StoreMessageInfo(mi) 766 } 767 return ms 768 } 769 return mi.MessageOf(x) 770 } 771 772 // Deprecated: Use ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline.ProtoReflect.Descriptor instead. 773 func (*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) Descriptor() ([]byte, []int) { 774 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{0, 3, 0} 775 } 776 777 func (m *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) GetDestination() isModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Destination { 778 if m != nil { 779 return m.Destination 780 } 781 return nil 782 } 783 784 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) GetGcs() *GcsDestination { 785 if x, ok := x.GetDestination().(*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Gcs); ok { 786 return x.Gcs 787 } 788 return nil 789 } 790 791 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) GetBigquery() *BigQueryDestination { 792 if x, ok := x.GetDestination().(*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Bigquery); ok { 793 return x.Bigquery 794 } 795 return nil 796 } 797 798 func (x *ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline) GetPredictionFormat() ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat { 799 if x != nil { 800 return x.PredictionFormat 801 } 802 return ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PREDICTION_FORMAT_UNSPECIFIED 803 } 804 805 type isModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Destination interface { 806 isModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Destination() 807 } 808 809 type ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Gcs struct { 810 // Cloud Storage location for BatchExplain output. 811 Gcs *GcsDestination `protobuf:"bytes,2,opt,name=gcs,proto3,oneof"` 812 } 813 814 type ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Bigquery struct { 815 // BigQuery location for BatchExplain output. 816 Bigquery *BigQueryDestination `protobuf:"bytes,3,opt,name=bigquery,proto3,oneof"` 817 } 818 819 func (*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Gcs) isModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Destination() { 820 } 821 822 func (*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Bigquery) isModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Destination() { 823 } 824 825 // The config for email alert. 826 type ModelMonitoringAlertConfig_EmailAlertConfig struct { 827 state protoimpl.MessageState 828 sizeCache protoimpl.SizeCache 829 unknownFields protoimpl.UnknownFields 830 831 // The email addresses to send the alert. 832 UserEmails []string `protobuf:"bytes,1,rep,name=user_emails,json=userEmails,proto3" json:"user_emails,omitempty"` 833 } 834 835 func (x *ModelMonitoringAlertConfig_EmailAlertConfig) Reset() { 836 *x = ModelMonitoringAlertConfig_EmailAlertConfig{} 837 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[13] 838 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 839 ms.StoreMessageInfo(mi) 840 } 841 842 func (x *ModelMonitoringAlertConfig_EmailAlertConfig) String() string { 843 return protoimpl.X.MessageStringOf(x) 844 } 845 846 func (*ModelMonitoringAlertConfig_EmailAlertConfig) ProtoMessage() {} 847 848 func (x *ModelMonitoringAlertConfig_EmailAlertConfig) ProtoReflect() protoreflect.Message { 849 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[13] 850 if x != nil { 851 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 852 if ms.LoadMessageInfo() == nil { 853 ms.StoreMessageInfo(mi) 854 } 855 return ms 856 } 857 return mi.MessageOf(x) 858 } 859 860 // Deprecated: Use ModelMonitoringAlertConfig_EmailAlertConfig.ProtoReflect.Descriptor instead. 861 func (*ModelMonitoringAlertConfig_EmailAlertConfig) Descriptor() ([]byte, []int) { 862 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{1, 0} 863 } 864 865 func (x *ModelMonitoringAlertConfig_EmailAlertConfig) GetUserEmails() []string { 866 if x != nil { 867 return x.UserEmails 868 } 869 return nil 870 } 871 872 // Requests are randomly selected. 873 type SamplingStrategy_RandomSampleConfig struct { 874 state protoimpl.MessageState 875 sizeCache protoimpl.SizeCache 876 unknownFields protoimpl.UnknownFields 877 878 // Sample rate (0, 1] 879 SampleRate float64 `protobuf:"fixed64,1,opt,name=sample_rate,json=sampleRate,proto3" json:"sample_rate,omitempty"` 880 } 881 882 func (x *SamplingStrategy_RandomSampleConfig) Reset() { 883 *x = SamplingStrategy_RandomSampleConfig{} 884 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[14] 885 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 886 ms.StoreMessageInfo(mi) 887 } 888 889 func (x *SamplingStrategy_RandomSampleConfig) String() string { 890 return protoimpl.X.MessageStringOf(x) 891 } 892 893 func (*SamplingStrategy_RandomSampleConfig) ProtoMessage() {} 894 895 func (x *SamplingStrategy_RandomSampleConfig) ProtoReflect() protoreflect.Message { 896 mi := &file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[14] 897 if x != nil { 898 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 899 if ms.LoadMessageInfo() == nil { 900 ms.StoreMessageInfo(mi) 901 } 902 return ms 903 } 904 return mi.MessageOf(x) 905 } 906 907 // Deprecated: Use SamplingStrategy_RandomSampleConfig.ProtoReflect.Descriptor instead. 908 func (*SamplingStrategy_RandomSampleConfig) Descriptor() ([]byte, []int) { 909 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP(), []int{3, 0} 910 } 911 912 func (x *SamplingStrategy_RandomSampleConfig) GetSampleRate() float64 { 913 if x != nil { 914 return x.SampleRate 915 } 916 return 0 917 } 918 919 var File_google_cloud_aiplatform_v1_model_monitoring_proto protoreflect.FileDescriptor 920 921 var file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDesc = []byte{ 922 0x0a, 0x31, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x61, 923 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 924 0x65, 0x6c, 0x5f, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 925 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 926 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x1a, 927 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 928 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67, 0x6f, 0x6f, 0x67, 929 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 930 0x6f, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 931 0x8f, 0x19, 0x0a, 0x1e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 932 0x69, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 933 0x69, 0x67, 0x12, 0x75, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x64, 934 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x67, 935 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 936 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 937 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 938 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 939 0x67, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 940 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0xba, 0x01, 0x0a, 0x29, 0x74, 0x72, 941 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 942 0x6e, 0x5f, 0x73, 0x6b, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 943 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x60, 0x2e, 944 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 945 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 946 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 947 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 948 0x6e, 0x67, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6b, 0x65, 0x77, 949 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 950 0x25, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 951 0x69, 0x6f, 0x6e, 0x53, 0x6b, 0x65, 0x77, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 952 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0xa4, 0x01, 0x0a, 0x21, 0x70, 0x72, 0x65, 0x64, 0x69, 953 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x65, 954 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 955 0x28, 0x0b, 0x32, 0x59, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 956 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 957 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x4f, 958 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 959 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x72, 0x69, 0x66, 0x74, 0x44, 0x65, 960 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x1e, 0x70, 961 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x72, 0x69, 0x66, 0x74, 0x44, 0x65, 962 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x7b, 0x0a, 963 0x12, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 964 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 965 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 966 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 0x69, 967 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 968 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 969 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x11, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 970 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0xb1, 0x03, 0x0a, 0x0f, 0x54, 971 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x12, 0x42, 972 0x0a, 0x07, 0x64, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 973 0x26, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 974 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 975 0x44, 0x61, 0x74, 0x61, 0x73, 0x65, 0x74, 0x48, 0x00, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x73, 976 0x65, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 977 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 978 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 979 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 980 0x09, 0x67, 0x63, 0x73, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x0f, 0x62, 0x69, 981 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 982 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 983 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 984 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 985 0x00, 0x52, 0x0e, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 986 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 987 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 988 0x61, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x65, 989 0x6c, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 990 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x68, 0x0a, 0x19, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 991 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 992 0x67, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 993 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 994 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x74, 995 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x17, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x53, 996 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x42, 997 0x0d, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, 0xed, 998 0x05, 0x0a, 0x25, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x64, 0x69, 999 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6b, 0x65, 0x77, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 1000 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x9d, 0x01, 0x0a, 0x0f, 0x73, 0x6b, 0x65, 1001 0x77, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 1002 0x28, 0x0b, 0x32, 0x74, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 1003 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 1004 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x4f, 1005 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 1006 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 1007 0x6e, 0x53, 0x6b, 0x65, 0x77, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 1008 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x6b, 0x65, 0x77, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 1009 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x73, 0x6b, 0x65, 0x77, 0x54, 0x68, 1010 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0xd0, 0x01, 0x0a, 0x21, 0x61, 0x74, 0x74, 1011 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x73, 1012 0x6b, 0x65, 0x77, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x02, 1013 0x20, 0x03, 0x28, 0x0b, 0x32, 0x84, 0x01, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 1014 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 1015 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 1016 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 1017 0x67, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 1018 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x6b, 0x65, 0x77, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 1019 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 1020 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x53, 0x6b, 0x65, 0x77, 0x54, 0x68, 0x72, 0x65, 1021 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1e, 0x61, 0x74, 0x74, 1022 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x53, 0x6b, 0x65, 1023 0x77, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0x61, 0x0a, 0x16, 0x64, 1024 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x6b, 0x65, 0x77, 0x5f, 0x74, 0x68, 0x72, 0x65, 1025 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 1026 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 1027 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 1028 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x14, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 1029 0x74, 0x53, 0x6b, 0x65, 0x77, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x1a, 0x6e, 1030 0x0a, 0x13, 0x53, 0x6b, 0x65, 0x77, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 1031 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 1032 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 1033 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 1034 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 1035 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 1036 0x66, 0x69, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7e, 1037 0x0a, 0x23, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 1038 0x72, 0x65, 0x53, 0x6b, 0x65, 0x77, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 1039 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 1040 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 1041 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 1042 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 1043 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 1044 0x66, 0x69, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xe1, 1045 0x05, 0x0a, 0x1e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x72, 0x69, 1046 0x66, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 1047 0x67, 0x12, 0x99, 0x01, 0x0a, 0x10, 0x64, 0x72, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 1048 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x6e, 0x2e, 0x67, 1049 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 1050 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 1051 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 1052 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 1053 0x69, 0x6f, 0x6e, 0x44, 0x72, 0x69, 0x66, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 1054 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x72, 0x69, 0x66, 0x74, 0x54, 0x68, 0x72, 1055 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x64, 0x72, 1056 0x69, 0x66, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0xcb, 0x01, 1057 0x0a, 0x22, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 1058 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 1059 0x6f, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x7e, 0x2e, 0x67, 0x6f, 0x6f, 1060 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 1061 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 1062 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 1063 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 1064 0x6e, 0x44, 0x72, 0x69, 0x66, 0x74, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 1065 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 1066 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x44, 0x72, 0x69, 0x66, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 1067 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1f, 0x61, 0x74, 0x74, 0x72, 1068 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x44, 0x72, 0x69, 0x66, 1069 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x12, 0x63, 0x0a, 0x17, 0x64, 1070 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x5f, 0x74, 0x68, 0x72, 1071 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 1072 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 1073 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 1074 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 1075 0x6c, 0x74, 0x44, 0x72, 0x69, 0x66, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 1076 0x1a, 0x6f, 0x0a, 0x14, 0x44, 0x72, 0x69, 0x66, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 1077 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 1078 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 0x61, 1079 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 1080 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 1081 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 1082 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 1083 0x01, 0x1a, 0x7f, 0x0a, 0x24, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 1084 0x53, 0x63, 0x6f, 0x72, 0x65, 0x44, 0x72, 0x69, 0x66, 0x74, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 1085 0x6f, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 1086 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x76, 1087 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 1088 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 1089 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 1090 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 1091 0x38, 0x01, 0x1a, 0x8c, 0x05, 0x0a, 0x11, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 1092 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x19, 0x65, 0x6e, 0x61, 0x62, 1093 0x6c, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 1094 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x65, 0x6e, 0x61, 1095 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 1096 0x75, 0x74, 0x65, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 1097 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 1098 0x01, 0x28, 0x0b, 0x32, 0x60, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 1099 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 1100 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 1101 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 1102 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 1103 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x73, 1104 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x13, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 1105 0x6f, 0x6e, 0x42, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x1a, 0xa4, 0x03, 0x0a, 0x13, 0x45, 1106 0x78, 0x70, 0x6c, 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x73, 0x65, 0x6c, 0x69, 1107 0x6e, 0x65, 0x12, 0x3e, 0x0a, 0x03, 0x67, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 1108 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 1109 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x63, 0x73, 1110 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x67, 1111 0x63, 0x73, 0x12, 0x4d, 0x0a, 0x08, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 1112 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 1113 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 1114 0x31, 0x2e, 0x42, 0x69, 0x67, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 1115 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x62, 0x69, 0x67, 0x71, 0x75, 0x65, 0x72, 1116 0x79, 0x12, 0x9e, 0x01, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 1117 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x71, 0x2e, 1118 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 1119 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 1120 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 1121 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x6e, 1122 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x78, 0x70, 0x6c, 1123 0x61, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 1124 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 1125 0x52, 0x10, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 1126 0x61, 0x74, 0x22, 0x4e, 0x0a, 0x10, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 1127 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x45, 0x44, 0x49, 0x43, 1128 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 1129 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4a, 0x53, 0x4f, 1130 0x4e, 0x4c, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x49, 0x47, 0x51, 0x55, 0x45, 0x52, 0x59, 1131 0x10, 0x03, 0x42, 0x0d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 1132 0x6e, 0x22, 0xe3, 0x02, 0x0a, 0x1a, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 1133 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 1134 0x12, 0x77, 0x0a, 0x12, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x5f, 1135 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x67, 1136 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 1137 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 1138 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x6f, 1139 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 1140 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x10, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x6c, 1141 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x6e, 0x61, 1142 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 1143 0x08, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x67, 0x69, 0x6e, 0x67, 1144 0x12, 0x67, 0x0a, 0x15, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 1145 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 1146 0x32, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 1147 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 1148 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 1149 0x6e, 0x65, 0x6c, 0x52, 0x14, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 1150 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x1a, 0x33, 0x0a, 0x10, 0x45, 0x6d, 0x61, 1151 0x69, 0x6c, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 1152 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 1153 0x28, 0x09, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x07, 1154 0x0a, 0x05, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x22, 0x36, 0x0a, 0x0f, 0x54, 0x68, 0x72, 0x65, 0x73, 1155 0x68, 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x05, 0x76, 0x61, 1156 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 1157 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x22, 1158 0xbc, 0x01, 0x0a, 0x10, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x61, 1159 0x74, 0x65, 0x67, 0x79, 0x12, 0x71, 0x0a, 0x14, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x5f, 0x73, 1160 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 1161 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 1162 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 1163 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 1164 0x2e, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 1165 0x66, 0x69, 0x67, 0x52, 0x12, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x53, 0x61, 0x6d, 0x70, 0x6c, 1166 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x35, 0x0a, 0x12, 0x52, 0x61, 0x6e, 0x64, 0x6f, 1167 0x6d, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 1168 0x0b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 1169 0x28, 0x01, 0x52, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x61, 0x74, 0x65, 0x42, 0xc4, 1170 0x02, 0xea, 0x41, 0x6f, 0x0a, 0x2d, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 1171 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 1172 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 1173 0x6e, 0x65, 0x6c, 0x12, 0x3e, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 1174 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 1175 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 1176 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 1177 0x65, 0x6c, 0x7d, 0x0a, 0x1e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 1178 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 1179 0x2e, 0x76, 0x31, 0x42, 0x14, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x4d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 1180 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3e, 0x63, 0x6c, 0x6f, 1181 0x75, 0x64, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 1182 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x61, 0x70, 0x69, 0x76, 1183 0x31, 0x2f, 0x61, 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0x3b, 0x61, 1184 0x69, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x70, 0x62, 0xaa, 0x02, 0x1a, 0x47, 0x6f, 1185 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x41, 0x49, 0x50, 0x6c, 0x61, 1186 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x1a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 1187 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 1188 0x72, 0x6d, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x1d, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 1189 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x41, 0x49, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 1190 0x6d, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 1191 } 1192 1193 var ( 1194 file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescOnce sync.Once 1195 file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescData = file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDesc 1196 ) 1197 1198 func file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescGZIP() []byte { 1199 file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescOnce.Do(func() { 1200 file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescData) 1201 }) 1202 return file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDescData 1203 } 1204 1205 var file_google_cloud_aiplatform_v1_model_monitoring_proto_enumTypes = make([]protoimpl.EnumInfo, 1) 1206 var file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes = make([]protoimpl.MessageInfo, 15) 1207 var file_google_cloud_aiplatform_v1_model_monitoring_proto_goTypes = []any{ 1208 (ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_PredictionFormat)(0), // 0: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig.ExplanationBaseline.PredictionFormat 1209 (*ModelMonitoringObjectiveConfig)(nil), // 1: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig 1210 (*ModelMonitoringAlertConfig)(nil), // 2: google.cloud.aiplatform.v1.ModelMonitoringAlertConfig 1211 (*ThresholdConfig)(nil), // 3: google.cloud.aiplatform.v1.ThresholdConfig 1212 (*SamplingStrategy)(nil), // 4: google.cloud.aiplatform.v1.SamplingStrategy 1213 (*ModelMonitoringObjectiveConfig_TrainingDataset)(nil), // 5: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingDataset 1214 (*ModelMonitoringObjectiveConfig_TrainingPredictionSkewDetectionConfig)(nil), // 6: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig 1215 (*ModelMonitoringObjectiveConfig_PredictionDriftDetectionConfig)(nil), // 7: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig 1216 (*ModelMonitoringObjectiveConfig_ExplanationConfig)(nil), // 8: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig 1217 nil, // 9: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.SkewThresholdsEntry 1218 nil, // 10: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.AttributionScoreSkewThresholdsEntry 1219 nil, // 11: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.DriftThresholdsEntry 1220 nil, // 12: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.AttributionScoreDriftThresholdsEntry 1221 (*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline)(nil), // 13: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig.ExplanationBaseline 1222 (*ModelMonitoringAlertConfig_EmailAlertConfig)(nil), // 14: google.cloud.aiplatform.v1.ModelMonitoringAlertConfig.EmailAlertConfig 1223 (*SamplingStrategy_RandomSampleConfig)(nil), // 15: google.cloud.aiplatform.v1.SamplingStrategy.RandomSampleConfig 1224 (*GcsSource)(nil), // 16: google.cloud.aiplatform.v1.GcsSource 1225 (*BigQuerySource)(nil), // 17: google.cloud.aiplatform.v1.BigQuerySource 1226 (*GcsDestination)(nil), // 18: google.cloud.aiplatform.v1.GcsDestination 1227 (*BigQueryDestination)(nil), // 19: google.cloud.aiplatform.v1.BigQueryDestination 1228 } 1229 var file_google_cloud_aiplatform_v1_model_monitoring_proto_depIdxs = []int32{ 1230 5, // 0: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.training_dataset:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingDataset 1231 6, // 1: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.training_prediction_skew_detection_config:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig 1232 7, // 2: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.prediction_drift_detection_config:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig 1233 8, // 3: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.explanation_config:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig 1234 14, // 4: google.cloud.aiplatform.v1.ModelMonitoringAlertConfig.email_alert_config:type_name -> google.cloud.aiplatform.v1.ModelMonitoringAlertConfig.EmailAlertConfig 1235 15, // 5: google.cloud.aiplatform.v1.SamplingStrategy.random_sample_config:type_name -> google.cloud.aiplatform.v1.SamplingStrategy.RandomSampleConfig 1236 16, // 6: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingDataset.gcs_source:type_name -> google.cloud.aiplatform.v1.GcsSource 1237 17, // 7: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingDataset.bigquery_source:type_name -> google.cloud.aiplatform.v1.BigQuerySource 1238 4, // 8: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingDataset.logging_sampling_strategy:type_name -> google.cloud.aiplatform.v1.SamplingStrategy 1239 9, // 9: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.skew_thresholds:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.SkewThresholdsEntry 1240 10, // 10: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.attribution_score_skew_thresholds:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.AttributionScoreSkewThresholdsEntry 1241 3, // 11: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.default_skew_threshold:type_name -> google.cloud.aiplatform.v1.ThresholdConfig 1242 11, // 12: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.drift_thresholds:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.DriftThresholdsEntry 1243 12, // 13: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.attribution_score_drift_thresholds:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.AttributionScoreDriftThresholdsEntry 1244 3, // 14: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.default_drift_threshold:type_name -> google.cloud.aiplatform.v1.ThresholdConfig 1245 13, // 15: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig.explanation_baseline:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig.ExplanationBaseline 1246 3, // 16: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.SkewThresholdsEntry.value:type_name -> google.cloud.aiplatform.v1.ThresholdConfig 1247 3, // 17: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.TrainingPredictionSkewDetectionConfig.AttributionScoreSkewThresholdsEntry.value:type_name -> google.cloud.aiplatform.v1.ThresholdConfig 1248 3, // 18: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.DriftThresholdsEntry.value:type_name -> google.cloud.aiplatform.v1.ThresholdConfig 1249 3, // 19: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.PredictionDriftDetectionConfig.AttributionScoreDriftThresholdsEntry.value:type_name -> google.cloud.aiplatform.v1.ThresholdConfig 1250 18, // 20: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig.ExplanationBaseline.gcs:type_name -> google.cloud.aiplatform.v1.GcsDestination 1251 19, // 21: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig.ExplanationBaseline.bigquery:type_name -> google.cloud.aiplatform.v1.BigQueryDestination 1252 0, // 22: google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig.ExplanationBaseline.prediction_format:type_name -> google.cloud.aiplatform.v1.ModelMonitoringObjectiveConfig.ExplanationConfig.ExplanationBaseline.PredictionFormat 1253 23, // [23:23] is the sub-list for method output_type 1254 23, // [23:23] is the sub-list for method input_type 1255 23, // [23:23] is the sub-list for extension type_name 1256 23, // [23:23] is the sub-list for extension extendee 1257 0, // [0:23] is the sub-list for field type_name 1258 } 1259 1260 func init() { file_google_cloud_aiplatform_v1_model_monitoring_proto_init() } 1261 func file_google_cloud_aiplatform_v1_model_monitoring_proto_init() { 1262 if File_google_cloud_aiplatform_v1_model_monitoring_proto != nil { 1263 return 1264 } 1265 file_google_cloud_aiplatform_v1_io_proto_init() 1266 file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[1].OneofWrappers = []any{ 1267 (*ModelMonitoringAlertConfig_EmailAlertConfig_)(nil), 1268 } 1269 file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[2].OneofWrappers = []any{ 1270 (*ThresholdConfig_Value)(nil), 1271 } 1272 file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[4].OneofWrappers = []any{ 1273 (*ModelMonitoringObjectiveConfig_TrainingDataset_Dataset)(nil), 1274 (*ModelMonitoringObjectiveConfig_TrainingDataset_GcsSource)(nil), 1275 (*ModelMonitoringObjectiveConfig_TrainingDataset_BigquerySource)(nil), 1276 } 1277 file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes[12].OneofWrappers = []any{ 1278 (*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Gcs)(nil), 1279 (*ModelMonitoringObjectiveConfig_ExplanationConfig_ExplanationBaseline_Bigquery)(nil), 1280 } 1281 type x struct{} 1282 out := protoimpl.TypeBuilder{ 1283 File: protoimpl.DescBuilder{ 1284 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 1285 RawDescriptor: file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDesc, 1286 NumEnums: 1, 1287 NumMessages: 15, 1288 NumExtensions: 0, 1289 NumServices: 0, 1290 }, 1291 GoTypes: file_google_cloud_aiplatform_v1_model_monitoring_proto_goTypes, 1292 DependencyIndexes: file_google_cloud_aiplatform_v1_model_monitoring_proto_depIdxs, 1293 EnumInfos: file_google_cloud_aiplatform_v1_model_monitoring_proto_enumTypes, 1294 MessageInfos: file_google_cloud_aiplatform_v1_model_monitoring_proto_msgTypes, 1295 }.Build() 1296 File_google_cloud_aiplatform_v1_model_monitoring_proto = out.File 1297 file_google_cloud_aiplatform_v1_model_monitoring_proto_rawDesc = nil 1298 file_google_cloud_aiplatform_v1_model_monitoring_proto_goTypes = nil 1299 file_google_cloud_aiplatform_v1_model_monitoring_proto_depIdxs = nil 1300 }