diff --git a/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go b/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go index 2a27ab6f8a..f945864f62 100644 --- a/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go +++ b/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go @@ -2283,6 +2283,11 @@ type TransformPiiText struct { // If not provided, will use a default language if specified on the server. // Depending on the server configuration, may attempt to autodetect from input. Language *string `protobuf:"bytes,6,opt,name=language,proto3,oneof" json:"language,omitempty"` + // A map of entity names to anonymizer configurations. + // The key in this map corresponds to a recognized entity (e.g. PERSON, PHONE_NUMBER) which can be found via the GetPiiTextEntities() RPC method. + // The value in this map corresponds to the anonymizer configuration to use for that entity. + // If not provided, the default_anonymizer will be used. + EntityAnonymizers map[string]*PiiAnonymizer `protobuf:"bytes,7,rep,name=entity_anonymizers,json=entityAnonymizers,proto3" json:"entity_anonymizers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *TransformPiiText) Reset() { @@ -2357,6 +2362,13 @@ func (x *TransformPiiText) GetLanguage() string { return "" } +func (x *TransformPiiText) GetEntityAnonymizers() map[string]*PiiAnonymizer { + if x != nil { + return x.EntityAnonymizers + } + return nil +} + type PiiDenyRecognizer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4820,13 +4832,13 @@ type PiiAnonymizer_Replace struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The value to replace. If not provided, a template token of the anonymizer is used. + // The value to replace. If not provided, a template token of the anonymizer is used (e.g. A PERSON entity is replaced with: ) Value *string `protobuf:"bytes,1,opt,name=value,proto3,oneof" json:"value,omitempty"` } func (x *PiiAnonymizer_Replace) Reset() { *x = PiiAnonymizer_Replace{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[74] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4838,7 +4850,7 @@ func (x *PiiAnonymizer_Replace) String() string { func (*PiiAnonymizer_Replace) ProtoMessage() {} func (x *PiiAnonymizer_Replace) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[74] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4869,7 +4881,7 @@ type PiiAnonymizer_Redact struct { func (x *PiiAnonymizer_Redact) Reset() { *x = PiiAnonymizer_Redact{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[75] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4881,7 +4893,7 @@ func (x *PiiAnonymizer_Redact) String() string { func (*PiiAnonymizer_Redact) ProtoMessage() {} func (x *PiiAnonymizer_Redact) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[75] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4912,7 +4924,7 @@ type PiiAnonymizer_Mask struct { func (x *PiiAnonymizer_Mask) Reset() { *x = PiiAnonymizer_Mask{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[76] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4924,7 +4936,7 @@ func (x *PiiAnonymizer_Mask) String() string { func (*PiiAnonymizer_Mask) ProtoMessage() {} func (x *PiiAnonymizer_Mask) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[76] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4972,7 +4984,7 @@ type PiiAnonymizer_Hash struct { func (x *PiiAnonymizer_Hash) Reset() { *x = PiiAnonymizer_Hash{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[77] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4984,7 +4996,7 @@ func (x *PiiAnonymizer_Hash) String() string { func (*PiiAnonymizer_Hash) ProtoMessage() {} func (x *PiiAnonymizer_Hash) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[77] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5475,7 +5487,7 @@ var file_mgmt_v1alpha1_transformer_proto_rawDesc = []byte{ 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x75, 0x69, 0x64, 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x75, 0x69, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x0f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0xf6, 0x02, 0x0a, 0x10, 0x54, 0x72, 0x61, + 0x67, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0xc1, 0x04, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x54, 0x65, 0x78, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x0f, 0xba, 0x48, 0x0c, 0x0a, 0x0a, 0x1d, 0x00, 0x00, @@ -5498,608 +5510,620 @@ var file_mgmt_v1alpha1_transformer_proto_rawDesc = []byte{ 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, - 0x65, 0x22, 0x70, 0x0a, 0x11, 0x50, 0x69, 0x69, 0x44, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x63, 0x6f, - 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xba, 0x48, 0x17, 0x72, 0x15, 0x32, 0x13, 0x5e, 0x5b, 0x61, - 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x7b, 0x31, 0x2c, 0x31, 0x30, 0x30, 0x7d, 0x24, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x0a, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x77, - 0x6f, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xba, 0x48, 0x09, 0x92, - 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x65, 0x6e, 0x79, 0x57, 0x6f, - 0x72, 0x64, 0x73, 0x22, 0xad, 0x05, 0x0a, 0x0d, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, - 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x61, + 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x36, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x54, 0x65, 0x78, + 0x74, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, + 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x1a, 0x62, 0x0a, 0x16, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x48, 0x00, 0x52, 0x07, - 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x64, 0x61, 0x63, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, - 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x06, - 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x12, - 0x37, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, - 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x48, 0x61, 0x73, 0x68, - 0x48, 0x00, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x1a, 0x2e, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, - 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x64, 0x61, - 0x63, 0x74, 0x1a, 0xa7, 0x01, 0x0a, 0x04, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x26, 0x0a, 0x0c, 0x6d, - 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, - 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x0b, 0x63, 0x68, - 0x61, 0x72, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, - 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, - 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x45, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x42, 0x10, 0x0a, - 0x0e, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x42, - 0x0b, 0x0a, 0x09, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x1a, 0xba, 0x01, 0x0a, - 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x43, 0x0a, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, - 0x72, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x48, - 0x00, 0x52, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x88, 0x01, 0x01, 0x22, 0x64, 0x0a, 0x08, 0x48, 0x61, - 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, - 0x44, 0x35, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x41, - 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x10, 0x03, - 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0x64, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x87, 0x03, 0x0a, 0x0e, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x0f, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x44, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, 0x52, 0x09, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x58, 0x0a, 0x14, 0x69, 0x6e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x12, 0x69, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x69, - 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x0e, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, - 0x6f, 0x6f, 0x6c, 0x22, 0x47, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, - 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x5f, 0x6c, 0x75, 0x68, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, - 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4c, 0x75, 0x68, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, - 0x0b, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6c, 0x75, 0x68, 0x6e, 0x22, 0x0e, 0x0a, 0x0c, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x69, 0x74, 0x79, 0x22, 0x11, 0x0a, 0x0f, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, - 0x57, 0x0a, 0x17, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x31, 0x36, 0x34, 0x50, - 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, - 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, - 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbf, 0x01, - 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, - 0x34, 0x12, 0x2a, 0x0a, 0x0e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, - 0x69, 0x67, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x61, 0x6e, - 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, - 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x69, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x01, 0x48, 0x02, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x70, - 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, - 0x52, 0x09, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x11, - 0x0a, 0x0f, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, - 0x78, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0x15, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x0e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0a, - 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x00, 0x52, 0x0a, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x88, 0x01, - 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, - 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x8c, 0x01, 0x0a, - 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, - 0x0a, 0x0e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, - 0x69, 0x7a, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, - 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, - 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x72, 0x61, 0x6e, - 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, - 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x12, 0x0a, 0x10, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x14, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x32, 0x35, - 0x36, 0x48, 0x61, 0x73, 0x68, 0x22, 0x0d, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x53, 0x53, 0x4e, 0x22, 0x59, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x17, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x65, - 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x59, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, - 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, - 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, - 0x6d, 0x61, 0x78, 0x22, 0x4e, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x69, 0x7a, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, + 0x0b, 0x0a, 0x09, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x70, 0x0a, 0x11, + 0x50, 0x69, 0x69, 0x44, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, + 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1a, 0xba, 0x48, 0x17, 0x72, 0x15, 0x32, 0x13, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, + 0x2d, 0x5f, 0x5d, 0x7b, 0x31, 0x2c, 0x31, 0x30, 0x30, 0x7d, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x2b, 0x0a, 0x0a, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xba, 0x48, 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x65, 0x6e, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x22, 0xad, + 0x05, 0x0a, 0x0d, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, + 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, + 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, + 0x2e, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x64, 0x61, 0x63, + 0x74, 0x12, 0x37, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x4d, 0x61, + 0x73, 0x6b, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x37, 0x0a, 0x04, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, + 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x04, 0x68, + 0x61, 0x73, 0x68, 0x1a, 0x2e, 0x0a, 0x07, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x19, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x1a, 0xa7, 0x01, + 0x0a, 0x04, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x26, 0x0a, 0x0c, 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, + 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, + 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x72, 0x88, 0x01, 0x01, 0x12, 0x27, + 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x72, 0x73, 0x54, 0x6f, + 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x5f, + 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x07, 0x66, 0x72, 0x6f, + 0x6d, 0x45, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6d, 0x61, 0x73, 0x6b, + 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, 0x68, 0x61, + 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x66, + 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x1a, 0xba, 0x01, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x43, 0x0a, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, + 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, + 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x48, 0x61, 0x73, + 0x68, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x61, 0x6c, + 0x67, 0x6f, 0x88, 0x01, 0x01, 0x22, 0x64, 0x0a, 0x08, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, + 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x44, 0x35, 0x10, 0x01, 0x12, + 0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, + 0x32, 0x35, 0x36, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x10, 0x03, 0x42, 0x07, 0x0a, 0x05, 0x5f, + 0x61, 0x6c, 0x67, 0x6f, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x64, + 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, + 0x44, 0x0a, 0x0a, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, + 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x87, 0x03, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, + 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x44, + 0x0a, 0x0a, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, 0x52, 0x09, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x58, 0x0a, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x12, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x12, + 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x0e, + 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x22, 0x47, + 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x64, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6c, 0x75, + 0x68, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x4c, 0x75, 0x68, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x5f, 0x6c, 0x75, 0x68, 0x6e, 0x22, 0x0e, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x43, 0x69, 0x74, 0x79, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x57, 0x0a, 0x17, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x31, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, - 0x6d, 0x61, 0x78, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, - 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x12, 0x0a, 0x10, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x74, 0x63, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x50, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, 0x79, 0x70, 0x68, - 0x65, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, - 0x64, 0x65, 0x5f, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5a, 0x69, 0x70, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x5c, 0x0a, - 0x18, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x31, 0x36, 0x34, 0x50, 0x68, - 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x56, 0x0a, 0x12, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, - 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x22, 0xc4, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, - 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, - 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x15, 0x72, 0x61, 0x6e, - 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, - 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x88, - 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x1a, - 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x55, 0x0a, 0x11, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, - 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0x5d, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, - 0x74, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, - 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, - 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x22, 0xc2, 0x01, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, + 0x6d, 0x61, 0x78, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x0a, 0x0e, + 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, + 0x65, 0x53, 0x69, 0x67, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, + 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, 0x03, + 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x09, 0x70, 0x72, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x72, 0x61, + 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x42, 0x06, 0x0a, 0x04, + 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x0c, 0x0a, 0x0a, + 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0a, 0x61, 0x62, 0x62, 0x72, 0x65, + 0x76, 0x69, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0a, 0x61, + 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, + 0x5f, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, + 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x8c, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x0a, 0x0e, 0x72, 0x61, 0x6e, + 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x53, 0x69, + 0x67, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, + 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x03, 0x6d, 0x61, 0x78, + 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, + 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, + 0x22, 0x0d, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x53, 0x4e, 0x22, + 0x59, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x31, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, + 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x10, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, + 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x22, 0x59, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, + 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x4e, + 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, + 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x17, + 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x74, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x22, 0x50, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, + 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x68, + 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x88, 0x01, + 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x68, 0x79, + 0x70, 0x68, 0x65, 0x6e, 0x73, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x5a, 0x69, 0x70, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x5c, 0x0a, 0x18, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x31, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, + 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, + 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x56, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x6f, 0x72, 0x6d, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xc4, + 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, + 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x01, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x01, 0x48, 0x01, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x55, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x4c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, + 0x72, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x58, 0x0a, 0x14, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, - 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, - 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, - 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x53, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x5d, 0x0a, 0x19, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x50, 0x68, + 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x0d, 0x0a, 0x0b, 0x50, - 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x06, 0x0a, 0x04, 0x4e, 0x75, - 0x6c, 0x6c, 0x22, 0x29, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4a, - 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x38, 0x0a, - 0x1c, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, - 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x46, 0x0a, 0x21, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, - 0x02, 0x10, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, - 0x3a, 0x0a, 0x22, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, - 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x49, 0x0a, 0x13, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, - 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x6f, 0x72, 0x6d, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x53, 0x63, 0x72, 0x61, - 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x64, 0x52, 0x65, 0x67, 0x65, 0x78, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x65, - 0x78, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x54, 0x0a, 0x1c, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, - 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x52, 0x65, 0x67, 0x65, 0x78, 0x4a, 0x04, 0x08, 0x01, 0x10, - 0x02, 0x22, 0x35, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x31, 0x0a, 0x12, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x15, - 0x0a, 0x13, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x49, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, - 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, - 0x22, 0x3d, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, - 0x16, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x75, 0x73, 0x69, 0x6e, - 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x07, - 0x69, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, - 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, - 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x06, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x69, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0f, 0x0a, 0x0d, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x75, 0x69, 0x64, 0x2a, 0x87, 0x11, - 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, - 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x41, - 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x54, + 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xc2, 0x01, 0x0a, 0x0e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x3b, + 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, + 0x00, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x72, + 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x15, + 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, + 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, + 0x22, 0x55, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x61, 0x73, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, + 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x58, 0x0a, 0x14, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, + 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x22, 0x53, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, + 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, + 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, + 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x06, 0x0a, 0x04, 0x4e, 0x75, 0x6c, 0x6c, 0x22, 0x29, 0x0a, + 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x38, 0x0a, 0x1c, 0x55, 0x73, 0x65, 0x72, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x46, 0x0a, 0x21, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x3a, 0x0a, 0x22, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x49, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x23, 0x0a, + 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x88, + 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, + 0x73, 0x22, 0x69, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x68, + 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x53, 0x63, 0x72, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, + 0x33, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x11, + 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x52, 0x65, 0x67, 0x65, + 0x78, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x22, 0x28, 0x0a, 0x12, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x54, 0x0a, 0x1c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x64, 0x52, 0x65, 0x67, 0x65, 0x78, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x35, 0x0a, 0x1d, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, + 0x78, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x31, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, + 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x49, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, + 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x1f, 0x47, + 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, + 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x70, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x69, 0x70, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, + 0x52, 0x06, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, + 0x69, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x75, 0x69, 0x64, 0x2a, 0x87, 0x11, 0x0a, 0x11, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x22, + 0x0a, 0x1e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, + 0x4f, 0x55, 0x47, 0x48, 0x10, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, + 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x02, 0x12, + 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, + 0x4a, 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x03, 0x12, 0x25, 0x0a, 0x21, + 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4d, 0x41, 0x49, + 0x4c, 0x10, 0x04, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, + 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x4f, 0x52, 0x4d, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x05, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, - 0x4c, 0x54, 0x10, 0x02, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, - 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, - 0x03, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, + 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, + 0x06, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, - 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x04, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, - 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x05, - 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, - 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x06, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, - 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, - 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x41, 0x52, 0x44, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, - 0x52, 0x10, 0x07, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, + 0x5f, 0x43, 0x41, 0x52, 0x44, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x07, 0x12, 0x24, + 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x49, + 0x54, 0x59, 0x10, 0x08, 0x12, 0x31, 0x0a, 0x2d, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, + 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, + 0x41, 0x54, 0x45, 0x5f, 0x45, 0x31, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, + 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x09, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, + 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, + 0x45, 0x10, 0x0a, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, - 0x54, 0x45, 0x5f, 0x43, 0x49, 0x54, 0x59, 0x10, 0x08, 0x12, 0x31, 0x0a, 0x2d, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x31, 0x36, 0x34, 0x5f, 0x50, 0x48, - 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x09, 0x12, 0x2a, 0x0a, 0x26, + 0x54, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x0b, 0x12, 0x2c, 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x49, 0x52, 0x53, - 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x0a, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, + 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, + 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x0c, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, + 0x41, 0x4d, 0x45, 0x10, 0x0d, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, + 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, + 0x52, 0x41, 0x54, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x10, 0x0e, 0x12, 0x32, 0x0a, + 0x2e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, + 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, + 0x0f, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, + 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, + 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x10, 0x12, 0x2c, 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, - 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, - 0x0b, 0x12, 0x2c, 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, + 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x5f, 0x49, + 0x4e, 0x54, 0x36, 0x34, 0x10, 0x11, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, + 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, + 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, - 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x0c, 0x12, - 0x29, 0x0a, 0x25, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, - 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x0d, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, - 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, - 0x10, 0x0e, 0x12, 0x32, 0x0a, 0x2e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x48, 0x41, 0x53, 0x48, 0x10, 0x13, 0x12, 0x23, 0x0a, + 0x1f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x53, 0x4e, + 0x10, 0x14, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, - 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, - 0x4d, 0x42, 0x45, 0x52, 0x10, 0x0f, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, - 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, - 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x10, 0x12, 0x2c, 0x0a, - 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x4e, - 0x44, 0x4f, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x11, 0x12, 0x29, 0x0a, 0x25, 0x54, - 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, - 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x15, 0x12, 0x2e, 0x0a, 0x2a, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, + 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x16, 0x12, 0x33, 0x0a, 0x2f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, + 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x17, 0x12, 0x26, + 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, + 0x52, 0x49, 0x4e, 0x47, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, - 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x48, 0x41, 0x53, 0x48, - 0x10, 0x13, 0x12, 0x23, 0x0a, 0x1f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x5f, 0x53, 0x54, 0x52, + 0x49, 0x4e, 0x47, 0x10, 0x19, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, + 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, + 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, + 0x4d, 0x50, 0x10, 0x1a, 0x12, 0x28, 0x0a, 0x24, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, + 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, + 0x41, 0x54, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x1b, 0x12, 0x2c, + 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x54, + 0x43, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x1c, 0x12, 0x24, 0x0a, 0x20, + 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x55, 0x49, 0x44, + 0x10, 0x1d, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, - 0x45, 0x5f, 0x53, 0x53, 0x4e, 0x10, 0x14, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, - 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x15, 0x12, 0x2e, - 0x0a, 0x2a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, - 0x52, 0x45, 0x45, 0x54, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x16, 0x12, 0x33, - 0x0a, 0x2f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, - 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, - 0x52, 0x10, 0x17, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, - 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, - 0x54, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x54, + 0x45, 0x5f, 0x5a, 0x49, 0x50, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x1e, 0x12, 0x32, 0x0a, 0x2e, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x45, 0x31, 0x36, 0x34, + 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x1f, 0x12, + 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, + 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, + 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x4c, 0x4f, + 0x41, 0x54, 0x36, 0x34, 0x10, 0x21, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, + 0x10, 0x22, 0x12, 0x33, 0x0a, 0x2f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, + 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, + 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x23, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x24, 0x12, + 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, + 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x25, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, - 0x4d, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x19, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, + 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x48, 0x4f, 0x4e, + 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x26, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x54, 0x49, - 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x1a, 0x12, 0x28, 0x0a, 0x24, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x4e, 0x41, 0x4d, - 0x45, 0x10, 0x1b, 0x12, 0x2c, 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, + 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x27, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, - 0x54, 0x45, 0x5f, 0x55, 0x54, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, - 0x1c, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, - 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, - 0x5f, 0x55, 0x55, 0x49, 0x44, 0x10, 0x1d, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, - 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x5a, 0x49, 0x50, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x1e, - 0x12, 0x32, 0x0a, 0x2e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, - 0x5f, 0x45, 0x31, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, - 0x45, 0x52, 0x10, 0x1f, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, - 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, - 0x20, 0x12, 0x28, 0x0a, 0x24, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, - 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, - 0x4d, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x21, 0x12, 0x2a, 0x0a, 0x26, 0x54, + 0x54, 0x45, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x28, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, + 0x49, 0x43, 0x41, 0x4c, 0x10, 0x2a, 0x12, 0x33, 0x0a, 0x2f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, + 0x5f, 0x53, 0x43, 0x52, 0x41, 0x4d, 0x42, 0x4c, 0x45, 0x10, 0x2b, 0x12, 0x23, 0x0a, 0x1f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x55, 0x4c, 0x4c, - 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x22, 0x12, 0x33, 0x0a, 0x2f, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, - 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x5f, 0x50, 0x48, - 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x23, 0x12, 0x26, 0x0a, 0x22, + 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x2c, + 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, + 0x4a, 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x2d, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x54, - 0x36, 0x34, 0x10, 0x24, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, - 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x25, + 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x55, 0x4e, + 0x54, 0x52, 0x59, 0x10, 0x2e, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, + 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, + 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x49, 0x49, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0x2f, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, - 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x26, 0x12, - 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, - 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x27, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, - 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x28, 0x12, 0x2b, - 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x41, - 0x54, 0x45, 0x47, 0x4f, 0x52, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x2a, 0x12, 0x33, 0x0a, 0x2f, 0x54, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, + 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x30, 0x12, + 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, + 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x31, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x43, 0x48, 0x41, 0x52, - 0x41, 0x43, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x43, 0x52, 0x41, 0x4d, 0x42, 0x4c, 0x45, 0x10, 0x2b, - 0x12, 0x23, 0x0a, 0x1f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x46, 0x49, - 0x4e, 0x45, 0x44, 0x10, 0x2c, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, - 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, - 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, - 0x2d, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, - 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, - 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x52, 0x59, 0x10, 0x2e, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, - 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x49, 0x49, 0x5f, 0x54, - 0x45, 0x58, 0x54, 0x10, 0x2f, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, - 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, - 0x52, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x41, - 0x4d, 0x45, 0x10, 0x30, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, - 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, - 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x31, - 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, - 0x5f, 0x55, 0x55, 0x49, 0x44, 0x10, 0x32, 0x2a, 0xc4, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, - 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x54, 0x52, 0x41, + 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x55, 0x55, 0x49, 0x44, + 0x10, 0x32, 0x2a, 0xc4, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x20, 0x0a, 0x1c, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, + 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, + 0x36, 0x34, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, + 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, + 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x04, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x41, 0x4e, 0x59, 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, - 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x04, 0x12, - 0x1e, 0x0a, 0x1a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x05, 0x12, - 0x1d, 0x0a, 0x19, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x4e, 0x59, 0x10, 0x06, 0x12, 0x1e, - 0x0a, 0x1a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x07, 0x12, 0x1e, - 0x0a, 0x1a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x55, 0x49, 0x44, 0x10, 0x08, 0x2a, 0x74, - 0x0a, 0x10, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, - 0x4a, 0x4f, 0x42, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, - 0x54, 0x45, 0x44, 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x59, 0x4e, - 0x43, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, - 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, - 0x54, 0x45, 0x10, 0x02, 0x2a, 0x7b, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x1f, 0x47, 0x45, 0x4e, + 0x50, 0x45, 0x5f, 0x55, 0x55, 0x49, 0x44, 0x10, 0x08, 0x2a, 0x74, 0x0a, 0x10, 0x53, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, + 0x1e, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x4a, 0x4f, 0x42, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x4a, + 0x4f, 0x42, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x01, 0x12, 0x1f, + 0x0a, 0x1b, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x5f, 0x4a, 0x4f, 0x42, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x10, 0x02, 0x2a, + 0x7b, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x1f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, + 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, - 0x0a, 0x1b, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x55, 0x49, 0x44, 0x5f, 0x56, 0x34, 0x10, 0x01, 0x12, - 0x20, 0x0a, 0x1c, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4d, 0x41, 0x49, - 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x4e, 0x41, 0x4d, 0x45, 0x10, - 0x02, 0x2a, 0xc3, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x56, 0x41, - 0x4c, 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, - 0x0a, 0x1b, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, - 0x1d, 0x0a, 0x19, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x24, - 0x0a, 0x20, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, - 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, - 0x47, 0x48, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, - 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x47, 0x45, 0x4e, - 0x45, 0x52, 0x41, 0x54, 0x45, 0x10, 0x04, 0x2a, 0x8c, 0x03, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x28, 0x0a, 0x24, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, - 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x47, - 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, - 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, - 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x56, 0x34, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x10, 0x02, 0x12, 0x29, + 0x5f, 0x55, 0x55, 0x49, 0x44, 0x5f, 0x56, 0x34, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x45, + 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x02, 0x2a, 0xc3, 0x01, 0x0a, + 0x12, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x45, + 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x56, + 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x4e, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x41, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x56, + 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x03, 0x12, + 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, + 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, + 0x10, 0x04, 0x2a, 0x8c, 0x03, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, + 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x24, + 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, + 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x26, 0x0a, 0x22, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, + 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x50, 0x52, - 0x49, 0x56, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x10, 0x03, 0x12, 0x29, 0x0a, 0x25, 0x47, 0x45, 0x4e, + 0x49, 0x56, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x10, 0x02, 0x12, 0x29, 0x0a, 0x25, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, - 0x5f, 0x43, 0x10, 0x04, 0x12, 0x2a, 0x0a, 0x26, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, + 0x5f, 0x42, 0x10, 0x03, 0x12, 0x29, 0x0a, 0x25, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x56, 0x34, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x05, - 0x12, 0x29, 0x0a, 0x25, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, - 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, - 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x43, 0x41, 0x53, 0x54, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x47, + 0x5f, 0x56, 0x34, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x10, 0x04, 0x12, + 0x2a, 0x0a, 0x26, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, + 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x4c, + 0x49, 0x4e, 0x4b, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x05, 0x12, 0x29, 0x0a, 0x25, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, - 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x42, - 0x41, 0x43, 0x4b, 0x10, 0x07, 0x12, 0x1f, 0x0a, 0x1b, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, - 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x56, 0x36, 0x10, 0x08, 0x32, 0xd1, 0x0b, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x74, - 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x2b, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, + 0x43, 0x41, 0x53, 0x54, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, + 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x56, 0x34, 0x5f, 0x4c, 0x4f, 0x4f, 0x50, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x07, + 0x12, 0x1f, 0x0a, 0x1b, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, + 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x36, 0x10, + 0x08, 0x32, 0xd1, 0x0b, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, + 0x72, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x74, 0x0a, 0x15, 0x47, 0x65, 0x74, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, + 0x72, 0x73, 0x12, 0x2b, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x89, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x32, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x89, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x32, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x67, 0x6d, 0x74, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, - 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x83, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x12, - 0x30, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x8c, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x55, 0x73, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x67, 0x6d, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x12, 0x33, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, + 0x72, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, + 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x8c, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, + 0x79, 0x49, 0x64, 0x12, 0x33, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, 0x49, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, - 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x89, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x67, 0x6d, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x89, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x65, 0x72, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x89, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, + 0x72, 0x12, 0x32, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x65, 0x72, 0x12, 0x32, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x89, 0x01, - 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, - 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x12, 0x32, - 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, - 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x1a, 0x49, 0x73, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x41, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x30, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x89, 0x01, 0x0a, + 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x12, 0x32, 0x2e, + 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x33, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, + 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x89, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x6d, 0x67, 0x6d, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, + 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x1a, 0x49, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x67, 0x6d, - 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x73, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x83, 0x01, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, - 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x30, - 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, + 0x62, 0x6c, 0x65, 0x12, 0x30, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x49, 0x73, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, + 0x6d, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x1a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x31, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x74, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2b, - 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, - 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x67, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x2e, 0x6d, 0x67, 0x6d, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x42, 0xcc, 0x01, 0x0a, 0x11, 0x63, - 0x6f, 0x6d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x42, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6e, 0x75, 0x63, 0x6c, 0x65, 0x75, 0x73, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x6e, 0x65, - 0x6f, 0x73, 0x79, 0x6e, 0x63, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x67, 0x65, - 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x6d, 0x67, 0x6d, 0x74, - 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x3b, 0x6d, 0x67, 0x6d, 0x74, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x4d, - 0x67, 0x6d, 0x74, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x0d, 0x4d, - 0x67, 0x6d, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x19, 0x4d, - 0x67, 0x6d, 0x74, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x67, 0x6d, 0x74, 0x3a, - 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x74, 0x0a, 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2b, 0x2e, 0x6d, 0x67, 0x6d, 0x74, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, + 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2e, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x03, 0x90, 0x02, 0x01, 0x42, 0xcc, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x67, + 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x42, 0x10, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x50, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x75, 0x63, 0x6c, + 0x65, 0x75, 0x73, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x6e, 0x65, 0x6f, 0x73, 0x79, 0x6e, 0x63, + 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x6d, 0x67, 0x6d, 0x74, 0x2f, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x3b, 0x6d, 0x67, 0x6d, 0x74, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x4d, 0x67, 0x6d, 0x74, 0x2e, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xca, 0x02, 0x0d, 0x4d, 0x67, 0x6d, 0x74, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0xe2, 0x02, 0x19, 0x4d, 0x67, 0x6d, 0x74, 0x5c, 0x56, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x4d, 0x67, 0x6d, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6115,7 +6139,7 @@ func file_mgmt_v1alpha1_transformer_proto_rawDescGZIP() []byte { } var file_mgmt_v1alpha1_transformer_proto_enumTypes = make([]protoimpl.EnumInfo, 7) -var file_mgmt_v1alpha1_transformer_proto_msgTypes = make([]protoimpl.MessageInfo, 78) +var file_mgmt_v1alpha1_transformer_proto_msgTypes = make([]protoimpl.MessageInfo, 79) var file_mgmt_v1alpha1_transformer_proto_goTypes = []any{ (TransformerSource)(0), // 0: mgmt.v1alpha1.TransformerSource (TransformerDataType)(0), // 1: mgmt.v1alpha1.TransformerDataType @@ -6198,11 +6222,12 @@ var file_mgmt_v1alpha1_transformer_proto_goTypes = []any{ (*GenerateBusinessName)(nil), // 78: mgmt.v1alpha1.GenerateBusinessName (*GenerateIpAddress)(nil), // 79: mgmt.v1alpha1.GenerateIpAddress (*TransformUuid)(nil), // 80: mgmt.v1alpha1.TransformUuid - (*PiiAnonymizer_Replace)(nil), // 81: mgmt.v1alpha1.PiiAnonymizer.Replace - (*PiiAnonymizer_Redact)(nil), // 82: mgmt.v1alpha1.PiiAnonymizer.Redact - (*PiiAnonymizer_Mask)(nil), // 83: mgmt.v1alpha1.PiiAnonymizer.Mask - (*PiiAnonymizer_Hash)(nil), // 84: mgmt.v1alpha1.PiiAnonymizer.Hash - (*timestamppb.Timestamp)(nil), // 85: google.protobuf.Timestamp + nil, // 81: mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry + (*PiiAnonymizer_Replace)(nil), // 82: mgmt.v1alpha1.PiiAnonymizer.Replace + (*PiiAnonymizer_Redact)(nil), // 83: mgmt.v1alpha1.PiiAnonymizer.Redact + (*PiiAnonymizer_Mask)(nil), // 84: mgmt.v1alpha1.PiiAnonymizer.Mask + (*PiiAnonymizer_Hash)(nil), // 85: mgmt.v1alpha1.PiiAnonymizer.Hash + (*timestamppb.Timestamp)(nil), // 86: google.protobuf.Timestamp } var file_mgmt_v1alpha1_transformer_proto_depIdxs = []int32{ 24, // 0: mgmt.v1alpha1.GetSystemTransformersResponse.transformers:type_name -> mgmt.v1alpha1.SystemTransformer @@ -6218,8 +6243,8 @@ var file_mgmt_v1alpha1_transformer_proto_depIdxs = []int32{ 1, // 10: mgmt.v1alpha1.UserDefinedTransformer.data_type:type_name -> mgmt.v1alpha1.TransformerDataType 0, // 11: mgmt.v1alpha1.UserDefinedTransformer.source:type_name -> mgmt.v1alpha1.TransformerSource 25, // 12: mgmt.v1alpha1.UserDefinedTransformer.config:type_name -> mgmt.v1alpha1.TransformerConfig - 85, // 13: mgmt.v1alpha1.UserDefinedTransformer.created_at:type_name -> google.protobuf.Timestamp - 85, // 14: mgmt.v1alpha1.UserDefinedTransformer.updated_at:type_name -> google.protobuf.Timestamp + 86, // 13: mgmt.v1alpha1.UserDefinedTransformer.created_at:type_name -> google.protobuf.Timestamp + 86, // 14: mgmt.v1alpha1.UserDefinedTransformer.updated_at:type_name -> google.protobuf.Timestamp 1, // 15: mgmt.v1alpha1.UserDefinedTransformer.data_types:type_name -> mgmt.v1alpha1.TransformerDataType 1, // 16: mgmt.v1alpha1.SystemTransformer.data_type:type_name -> mgmt.v1alpha1.TransformerDataType 0, // 17: mgmt.v1alpha1.SystemTransformer.source:type_name -> mgmt.v1alpha1.TransformerSource @@ -6275,42 +6300,44 @@ var file_mgmt_v1alpha1_transformer_proto_depIdxs = []int32{ 80, // 67: mgmt.v1alpha1.TransformerConfig.transform_uuid_config:type_name -> mgmt.v1alpha1.TransformUuid 28, // 68: mgmt.v1alpha1.TransformPiiText.default_anonymizer:type_name -> mgmt.v1alpha1.PiiAnonymizer 27, // 69: mgmt.v1alpha1.TransformPiiText.deny_recognizers:type_name -> mgmt.v1alpha1.PiiDenyRecognizer - 81, // 70: mgmt.v1alpha1.PiiAnonymizer.replace:type_name -> mgmt.v1alpha1.PiiAnonymizer.Replace - 82, // 71: mgmt.v1alpha1.PiiAnonymizer.redact:type_name -> mgmt.v1alpha1.PiiAnonymizer.Redact - 83, // 72: mgmt.v1alpha1.PiiAnonymizer.mask:type_name -> mgmt.v1alpha1.PiiAnonymizer.Mask - 84, // 73: mgmt.v1alpha1.PiiAnonymizer.hash:type_name -> mgmt.v1alpha1.PiiAnonymizer.Hash - 3, // 74: mgmt.v1alpha1.GenerateEmail.email_type:type_name -> mgmt.v1alpha1.GenerateEmailType - 3, // 75: mgmt.v1alpha1.TransformEmail.email_type:type_name -> mgmt.v1alpha1.GenerateEmailType - 4, // 76: mgmt.v1alpha1.TransformEmail.invalid_email_action:type_name -> mgmt.v1alpha1.InvalidEmailAction - 5, // 77: mgmt.v1alpha1.GenerateIpAddress.ip_type:type_name -> mgmt.v1alpha1.GenerateIpAddressType - 6, // 78: mgmt.v1alpha1.PiiAnonymizer.Hash.algo:type_name -> mgmt.v1alpha1.PiiAnonymizer.Hash.HashType - 7, // 79: mgmt.v1alpha1.TransformersService.GetSystemTransformers:input_type -> mgmt.v1alpha1.GetSystemTransformersRequest - 9, // 80: mgmt.v1alpha1.TransformersService.GetSystemTransformerBySource:input_type -> mgmt.v1alpha1.GetSystemTransformerBySourceRequest - 11, // 81: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformers:input_type -> mgmt.v1alpha1.GetUserDefinedTransformersRequest - 13, // 82: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformerById:input_type -> mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest - 15, // 83: mgmt.v1alpha1.TransformersService.CreateUserDefinedTransformer:input_type -> mgmt.v1alpha1.CreateUserDefinedTransformerRequest - 17, // 84: mgmt.v1alpha1.TransformersService.DeleteUserDefinedTransformer:input_type -> mgmt.v1alpha1.DeleteUserDefinedTransformerRequest - 19, // 85: mgmt.v1alpha1.TransformersService.UpdateUserDefinedTransformer:input_type -> mgmt.v1alpha1.UpdateUserDefinedTransformerRequest - 21, // 86: mgmt.v1alpha1.TransformersService.IsTransformerNameAvailable:input_type -> mgmt.v1alpha1.IsTransformerNameAvailableRequest - 68, // 87: mgmt.v1alpha1.TransformersService.ValidateUserJavascriptCode:input_type -> mgmt.v1alpha1.ValidateUserJavascriptCodeRequest - 73, // 88: mgmt.v1alpha1.TransformersService.ValidateUserRegexCode:input_type -> mgmt.v1alpha1.ValidateUserRegexCodeRequest - 76, // 89: mgmt.v1alpha1.TransformersService.GetTransformPiiEntities:input_type -> mgmt.v1alpha1.GetTransformPiiEntitiesRequest - 8, // 90: mgmt.v1alpha1.TransformersService.GetSystemTransformers:output_type -> mgmt.v1alpha1.GetSystemTransformersResponse - 10, // 91: mgmt.v1alpha1.TransformersService.GetSystemTransformerBySource:output_type -> mgmt.v1alpha1.GetSystemTransformerBySourceResponse - 12, // 92: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformers:output_type -> mgmt.v1alpha1.GetUserDefinedTransformersResponse - 14, // 93: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformerById:output_type -> mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse - 16, // 94: mgmt.v1alpha1.TransformersService.CreateUserDefinedTransformer:output_type -> mgmt.v1alpha1.CreateUserDefinedTransformerResponse - 18, // 95: mgmt.v1alpha1.TransformersService.DeleteUserDefinedTransformer:output_type -> mgmt.v1alpha1.DeleteUserDefinedTransformerResponse - 20, // 96: mgmt.v1alpha1.TransformersService.UpdateUserDefinedTransformer:output_type -> mgmt.v1alpha1.UpdateUserDefinedTransformerResponse - 22, // 97: mgmt.v1alpha1.TransformersService.IsTransformerNameAvailable:output_type -> mgmt.v1alpha1.IsTransformerNameAvailableResponse - 69, // 98: mgmt.v1alpha1.TransformersService.ValidateUserJavascriptCode:output_type -> mgmt.v1alpha1.ValidateUserJavascriptCodeResponse - 74, // 99: mgmt.v1alpha1.TransformersService.ValidateUserRegexCode:output_type -> mgmt.v1alpha1.ValidateUserRegexCodeResponse - 77, // 100: mgmt.v1alpha1.TransformersService.GetTransformPiiEntities:output_type -> mgmt.v1alpha1.GetTransformPiiEntitiesResponse - 90, // [90:101] is the sub-list for method output_type - 79, // [79:90] is the sub-list for method input_type - 79, // [79:79] is the sub-list for extension type_name - 79, // [79:79] is the sub-list for extension extendee - 0, // [0:79] is the sub-list for field type_name + 81, // 70: mgmt.v1alpha1.TransformPiiText.entity_anonymizers:type_name -> mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry + 82, // 71: mgmt.v1alpha1.PiiAnonymizer.replace:type_name -> mgmt.v1alpha1.PiiAnonymizer.Replace + 83, // 72: mgmt.v1alpha1.PiiAnonymizer.redact:type_name -> mgmt.v1alpha1.PiiAnonymizer.Redact + 84, // 73: mgmt.v1alpha1.PiiAnonymizer.mask:type_name -> mgmt.v1alpha1.PiiAnonymizer.Mask + 85, // 74: mgmt.v1alpha1.PiiAnonymizer.hash:type_name -> mgmt.v1alpha1.PiiAnonymizer.Hash + 3, // 75: mgmt.v1alpha1.GenerateEmail.email_type:type_name -> mgmt.v1alpha1.GenerateEmailType + 3, // 76: mgmt.v1alpha1.TransformEmail.email_type:type_name -> mgmt.v1alpha1.GenerateEmailType + 4, // 77: mgmt.v1alpha1.TransformEmail.invalid_email_action:type_name -> mgmt.v1alpha1.InvalidEmailAction + 5, // 78: mgmt.v1alpha1.GenerateIpAddress.ip_type:type_name -> mgmt.v1alpha1.GenerateIpAddressType + 28, // 79: mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry.value:type_name -> mgmt.v1alpha1.PiiAnonymizer + 6, // 80: mgmt.v1alpha1.PiiAnonymizer.Hash.algo:type_name -> mgmt.v1alpha1.PiiAnonymizer.Hash.HashType + 7, // 81: mgmt.v1alpha1.TransformersService.GetSystemTransformers:input_type -> mgmt.v1alpha1.GetSystemTransformersRequest + 9, // 82: mgmt.v1alpha1.TransformersService.GetSystemTransformerBySource:input_type -> mgmt.v1alpha1.GetSystemTransformerBySourceRequest + 11, // 83: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformers:input_type -> mgmt.v1alpha1.GetUserDefinedTransformersRequest + 13, // 84: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformerById:input_type -> mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest + 15, // 85: mgmt.v1alpha1.TransformersService.CreateUserDefinedTransformer:input_type -> mgmt.v1alpha1.CreateUserDefinedTransformerRequest + 17, // 86: mgmt.v1alpha1.TransformersService.DeleteUserDefinedTransformer:input_type -> mgmt.v1alpha1.DeleteUserDefinedTransformerRequest + 19, // 87: mgmt.v1alpha1.TransformersService.UpdateUserDefinedTransformer:input_type -> mgmt.v1alpha1.UpdateUserDefinedTransformerRequest + 21, // 88: mgmt.v1alpha1.TransformersService.IsTransformerNameAvailable:input_type -> mgmt.v1alpha1.IsTransformerNameAvailableRequest + 68, // 89: mgmt.v1alpha1.TransformersService.ValidateUserJavascriptCode:input_type -> mgmt.v1alpha1.ValidateUserJavascriptCodeRequest + 73, // 90: mgmt.v1alpha1.TransformersService.ValidateUserRegexCode:input_type -> mgmt.v1alpha1.ValidateUserRegexCodeRequest + 76, // 91: mgmt.v1alpha1.TransformersService.GetTransformPiiEntities:input_type -> mgmt.v1alpha1.GetTransformPiiEntitiesRequest + 8, // 92: mgmt.v1alpha1.TransformersService.GetSystemTransformers:output_type -> mgmt.v1alpha1.GetSystemTransformersResponse + 10, // 93: mgmt.v1alpha1.TransformersService.GetSystemTransformerBySource:output_type -> mgmt.v1alpha1.GetSystemTransformerBySourceResponse + 12, // 94: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformers:output_type -> mgmt.v1alpha1.GetUserDefinedTransformersResponse + 14, // 95: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformerById:output_type -> mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse + 16, // 96: mgmt.v1alpha1.TransformersService.CreateUserDefinedTransformer:output_type -> mgmt.v1alpha1.CreateUserDefinedTransformerResponse + 18, // 97: mgmt.v1alpha1.TransformersService.DeleteUserDefinedTransformer:output_type -> mgmt.v1alpha1.DeleteUserDefinedTransformerResponse + 20, // 98: mgmt.v1alpha1.TransformersService.UpdateUserDefinedTransformer:output_type -> mgmt.v1alpha1.UpdateUserDefinedTransformerResponse + 22, // 99: mgmt.v1alpha1.TransformersService.IsTransformerNameAvailable:output_type -> mgmt.v1alpha1.IsTransformerNameAvailableResponse + 69, // 100: mgmt.v1alpha1.TransformersService.ValidateUserJavascriptCode:output_type -> mgmt.v1alpha1.ValidateUserJavascriptCodeResponse + 74, // 101: mgmt.v1alpha1.TransformersService.ValidateUserRegexCode:output_type -> mgmt.v1alpha1.ValidateUserRegexCodeResponse + 77, // 102: mgmt.v1alpha1.TransformersService.GetTransformPiiEntities:output_type -> mgmt.v1alpha1.GetTransformPiiEntitiesResponse + 92, // [92:103] is the sub-list for method output_type + 81, // [81:92] is the sub-list for method input_type + 81, // [81:81] is the sub-list for extension type_name + 81, // [81:81] is the sub-list for extension extendee + 0, // [0:81] is the sub-list for field type_name } func init() { file_mgmt_v1alpha1_transformer_proto_init() } @@ -6398,16 +6425,16 @@ func file_mgmt_v1alpha1_transformer_proto_init() { file_mgmt_v1alpha1_transformer_proto_msgTypes[64].OneofWrappers = []any{} file_mgmt_v1alpha1_transformer_proto_msgTypes[68].OneofWrappers = []any{} file_mgmt_v1alpha1_transformer_proto_msgTypes[72].OneofWrappers = []any{} - file_mgmt_v1alpha1_transformer_proto_msgTypes[74].OneofWrappers = []any{} - file_mgmt_v1alpha1_transformer_proto_msgTypes[76].OneofWrappers = []any{} + file_mgmt_v1alpha1_transformer_proto_msgTypes[75].OneofWrappers = []any{} file_mgmt_v1alpha1_transformer_proto_msgTypes[77].OneofWrappers = []any{} + file_mgmt_v1alpha1_transformer_proto_msgTypes[78].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_mgmt_v1alpha1_transformer_proto_rawDesc, NumEnums: 7, - NumMessages: 78, + NumMessages: 79, NumExtensions: 0, NumServices: 1, }, diff --git a/backend/protos/mgmt/v1alpha1/transformer.proto b/backend/protos/mgmt/v1alpha1/transformer.proto index 8386517d57..8908506251 100644 --- a/backend/protos/mgmt/v1alpha1/transformer.proto +++ b/backend/protos/mgmt/v1alpha1/transformer.proto @@ -254,6 +254,12 @@ message TransformPiiText { // If not provided, will use a default language if specified on the server. // Depending on the server configuration, may attempt to autodetect from input. optional string language = 6; + + // A map of entity names to anonymizer configurations. + // The key in this map corresponds to a recognized entity (e.g. PERSON, PHONE_NUMBER) which can be found via the GetPiiTextEntities() RPC method. + // The value in this map corresponds to the anonymizer configuration to use for that entity. + // If not provided, the default_anonymizer will be used. + map entity_anonymizers = 7; } message PiiDenyRecognizer { @@ -280,7 +286,7 @@ message PiiAnonymizer { } message Replace { - // The value to replace. If not provided, a template token of the anonymizer is used. + // The value to replace. If not provided, a template token of the anonymizer is used (e.g. A PERSON entity is replaced with: ) optional string value = 1; } message Redact {} diff --git a/docs/openapi/mgmt/v1alpha1/anonymization.openapi.yaml b/docs/openapi/mgmt/v1alpha1/anonymization.openapi.yaml index 736659d0c5..0a78562793 100644 --- a/docs/openapi/mgmt/v1alpha1/anonymization.openapi.yaml +++ b/docs/openapi/mgmt/v1alpha1/anonymization.openapi.yaml @@ -873,7 +873,7 @@ components: value: type: string title: value - description: The value to replace. If not provided, a template token of the anonymizer is used. + description: 'The value to replace. If not provided, a template token of the anonymizer is used (e.g. A PERSON entity is replaced with: )' title: Replace additionalProperties: false mgmt.v1alpha1.PiiDenyRecognizer: @@ -1237,9 +1237,33 @@ components: Two characters for the desired language in ISO_639-1 format. If not provided, will use a default language if specified on the server. Depending on the server configuration, may attempt to autodetect from input. + entityAnonymizers: + type: object + title: entity_anonymizers + additionalProperties: + allOf: + - title: value + - $ref: '#/components/schemas/mgmt.v1alpha1.PiiAnonymizer' + description: |- + A map of entity names to anonymizer configurations. + The key in this map corresponds to a recognized entity (e.g. PERSON, PHONE_NUMBER) which can be found via the GetPiiTextEntities() RPC method. + The value in this map corresponds to the anonymizer configuration to use for that entity. + If not provided, the default_anonymizer will be used. title: TransformPiiText additionalProperties: false description: NeosyncCloud/Enterprise only transformer for anonymizing PII Text + mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry: + type: object + properties: + key: + type: string + title: key + value: + allOf: + - title: value + - $ref: '#/components/schemas/mgmt.v1alpha1.PiiAnonymizer' + title: EntityAnonymizersEntry + additionalProperties: false mgmt.v1alpha1.TransformString: type: object allOf: diff --git a/docs/openapi/mgmt/v1alpha1/job.openapi.yaml b/docs/openapi/mgmt/v1alpha1/job.openapi.yaml index b5718fb32e..08bb5b12e0 100644 --- a/docs/openapi/mgmt/v1alpha1/job.openapi.yaml +++ b/docs/openapi/mgmt/v1alpha1/job.openapi.yaml @@ -4284,7 +4284,7 @@ components: value: type: string title: value - description: The value to replace. If not provided, a template token of the anonymizer is used. + description: 'The value to replace. If not provided, a template token of the anonymizer is used (e.g. A PERSON entity is replaced with: )' title: Replace additionalProperties: false mgmt.v1alpha1.PiiDenyRecognizer: @@ -5033,9 +5033,33 @@ components: Two characters for the desired language in ISO_639-1 format. If not provided, will use a default language if specified on the server. Depending on the server configuration, may attempt to autodetect from input. + entityAnonymizers: + type: object + title: entity_anonymizers + additionalProperties: + allOf: + - title: value + - $ref: '#/components/schemas/mgmt.v1alpha1.PiiAnonymizer' + description: |- + A map of entity names to anonymizer configurations. + The key in this map corresponds to a recognized entity (e.g. PERSON, PHONE_NUMBER) which can be found via the GetPiiTextEntities() RPC method. + The value in this map corresponds to the anonymizer configuration to use for that entity. + If not provided, the default_anonymizer will be used. title: TransformPiiText additionalProperties: false description: NeosyncCloud/Enterprise only transformer for anonymizing PII Text + mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry: + type: object + properties: + key: + type: string + title: key + value: + allOf: + - title: value + - $ref: '#/components/schemas/mgmt.v1alpha1.PiiAnonymizer' + title: EntityAnonymizersEntry + additionalProperties: false mgmt.v1alpha1.TransformString: type: object allOf: diff --git a/docs/openapi/mgmt/v1alpha1/transformer.openapi.yaml b/docs/openapi/mgmt/v1alpha1/transformer.openapi.yaml index 328621a38e..85686d8a33 100644 --- a/docs/openapi/mgmt/v1alpha1/transformer.openapi.yaml +++ b/docs/openapi/mgmt/v1alpha1/transformer.openapi.yaml @@ -1357,7 +1357,7 @@ components: value: type: string title: value - description: The value to replace. If not provided, a template token of the anonymizer is used. + description: 'The value to replace. If not provided, a template token of the anonymizer is used (e.g. A PERSON entity is replaced with: )' title: Replace additionalProperties: false mgmt.v1alpha1.PiiDenyRecognizer: @@ -1754,9 +1754,33 @@ components: Two characters for the desired language in ISO_639-1 format. If not provided, will use a default language if specified on the server. Depending on the server configuration, may attempt to autodetect from input. + entityAnonymizers: + type: object + title: entity_anonymizers + additionalProperties: + allOf: + - title: value + - $ref: '#/components/schemas/mgmt.v1alpha1.PiiAnonymizer' + description: |- + A map of entity names to anonymizer configurations. + The key in this map corresponds to a recognized entity (e.g. PERSON, PHONE_NUMBER) which can be found via the GetPiiTextEntities() RPC method. + The value in this map corresponds to the anonymizer configuration to use for that entity. + If not provided, the default_anonymizer will be used. title: TransformPiiText additionalProperties: false description: NeosyncCloud/Enterprise only transformer for anonymizing PII Text + mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry: + type: object + properties: + key: + type: string + title: key + value: + allOf: + - title: value + - $ref: '#/components/schemas/mgmt.v1alpha1.PiiAnonymizer' + title: EntityAnonymizersEntry + additionalProperties: false mgmt.v1alpha1.TransformString: type: object allOf: diff --git a/docs/openapi/neosync.mgmt.v1alpha1.yaml b/docs/openapi/neosync.mgmt.v1alpha1.yaml index 004f821e8f..fca62bdb3a 100644 --- a/docs/openapi/neosync.mgmt.v1alpha1.yaml +++ b/docs/openapi/neosync.mgmt.v1alpha1.yaml @@ -4706,7 +4706,7 @@ components: title: value description: >- The value to replace. If not provided, a template token of the - anonymizer is used. + anonymizer is used (e.g. A PERSON entity is replaced with: ) title: Replace additionalProperties: false mgmt.v1alpha1.PiiDenyRecognizer: @@ -5085,9 +5085,33 @@ components: Two characters for the desired language in ISO_639-1 format. If not provided, will use a default language if specified on the server. Depending on the server configuration, may attempt to autodetect from input. + entityAnonymizers: + type: object + title: entity_anonymizers + additionalProperties: + allOf: + - title: value + - $ref: '#/components/schemas/mgmt.v1alpha1.PiiAnonymizer' + description: |- + A map of entity names to anonymizer configurations. + The key in this map corresponds to a recognized entity (e.g. PERSON, PHONE_NUMBER) which can be found via the GetPiiTextEntities() RPC method. + The value in this map corresponds to the anonymizer configuration to use for that entity. + If not provided, the default_anonymizer will be used. title: TransformPiiText additionalProperties: false description: NeosyncCloud/Enterprise only transformer for anonymizing PII Text + mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry: + type: object + properties: + key: + type: string + title: key + value: + allOf: + - title: value + - $ref: '#/components/schemas/mgmt.v1alpha1.PiiAnonymizer' + title: EntityAnonymizersEntry + additionalProperties: false mgmt.v1alpha1.TransformString: type: object allOf: diff --git a/docs/protos/mgmt/v1alpha1/transformer.proto.mdx b/docs/protos/mgmt/v1alpha1/transformer.proto.mdx index ddceba326a..6cadc4649a 100644 --- a/docs/protos/mgmt/v1alpha1/transformer.proto.mdx +++ b/docs/protos/mgmt/v1alpha1/transformer.proto.mdx @@ -226,7 +226,7 @@ _**package** mgmt.v1alpha1_ ### `PiiAnonymizer.Replace` - +)","label":"optional","type":"string","longType":"string","fullType":"string","ismap":false,"isoneof":true,"oneofdecl":"_value","defaultValue":""}]}} /> ### `PiiDenyRecognizer` @@ -282,51 +282,55 @@ _**package** mgmt.v1alpha1_ ### `TransformPiiText` - + + + +### `TransformPiiText.EntityAnonymizersEntry` + ### `TransformString` - + ### `TransformUuid` - + ### `TransformerConfig` - + ### `UpdateUserDefinedTransformerRequest` - + ### `UpdateUserDefinedTransformerResponse` - + ### `UserDefinedTransformer` - + ### `UserDefinedTransformerConfig` - + ### `ValidateUserJavascriptCodeRequest` - + ### `ValidateUserJavascriptCodeResponse` - + ### `ValidateUserRegexCodeRequest` - + ### `ValidateUserRegexCodeResponse` - + --- ## Enums diff --git a/docs/protos/proto_docs.json b/docs/protos/proto_docs.json index 2ad072f63d..1f32c9c436 100644 --- a/docs/protos/proto_docs.json +++ b/docs/protos/proto_docs.json @@ -1686,7 +1686,7 @@ "fields": [ { "name": "value", - "description": "The value to replace. If not provided, a template token of the anonymizer is used.", + "description": "The value to replace. If not provided, a template token of the anonymizer is used (e.g. A PERSON entity is replaced with: \u003cPERSON\u003e)", "label": "optional", "type": "string", "longType": "string", @@ -2247,6 +2247,54 @@ "isoneof": true, "oneofdecl": "_language", "defaultValue": "" + }, + { + "name": "entity_anonymizers", + "description": "A map of entity names to anonymizer configurations.\nThe key in this map corresponds to a recognized entity (e.g. PERSON, PHONE_NUMBER) which can be found via the GetPiiTextEntities() RPC method.\nThe value in this map corresponds to the anonymizer configuration to use for that entity.\nIf not provided, the default_anonymizer will be used.", + "label": "repeated", + "type": "EntityAnonymizersEntry", + "longType": "TransformPiiText.EntityAnonymizersEntry", + "fullType": "mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry", + "ismap": true, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + } + ] + }, + { + "name": "EntityAnonymizersEntry", + "longName": "TransformPiiText.EntityAnonymizersEntry", + "fullName": "mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry", + "description": "", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": false, + "extensions": [], + "fields": [ + { + "name": "key", + "description": "", + "label": "", + "type": "string", + "longType": "string", + "fullType": "string", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" + }, + { + "name": "value", + "description": "", + "label": "", + "type": "PiiAnonymizer", + "longType": "PiiAnonymizer", + "fullType": "mgmt.v1alpha1.PiiAnonymizer", + "ismap": false, + "isoneof": false, + "oneofdecl": "", + "defaultValue": "" } ] }, diff --git a/frontend/packages/sdk/src/client/mgmt/v1alpha1/transformer_pb.ts b/frontend/packages/sdk/src/client/mgmt/v1alpha1/transformer_pb.ts index 2f84e3e6d6..c8a4deb865 100644 --- a/frontend/packages/sdk/src/client/mgmt/v1alpha1/transformer_pb.ts +++ b/frontend/packages/sdk/src/client/mgmt/v1alpha1/transformer_pb.ts @@ -13,7 +13,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file mgmt/v1alpha1/transformer.proto. */ export const file_mgmt_v1alpha1_transformer: GenFile = /*@__PURE__*/ - fileDesc("Ch9tZ210L3YxYWxwaGExL3RyYW5zZm9ybWVyLnByb3RvEg1tZ210LnYxYWxwaGExIh4KHEdldFN5c3RlbVRyYW5zZm9ybWVyc1JlcXVlc3QiVwodR2V0U3lzdGVtVHJhbnNmb3JtZXJzUmVzcG9uc2USNgoMdHJhbnNmb3JtZXJzGAEgAygLMiAubWdtdC52MWFscGhhMS5TeXN0ZW1UcmFuc2Zvcm1lciJXCiNHZXRTeXN0ZW1UcmFuc2Zvcm1lckJ5U291cmNlUmVxdWVzdBIwCgZzb3VyY2UYASABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlIl0KJEdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2VSZXNwb25zZRI1Cgt0cmFuc2Zvcm1lchgBIAEoCzIgLm1nbXQudjFhbHBoYTEuU3lzdGVtVHJhbnNmb3JtZXIiQQohR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBImEKIkdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJzUmVzcG9uc2USOwoMdHJhbnNmb3JtZXJzGAEgAygLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyIkgKJEdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJCeUlkUmVxdWVzdBIgCg50cmFuc2Zvcm1lcl9pZBgBIAEoCUIIukgFcgOwAQEiYwolR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lckJ5SWRSZXNwb25zZRI6Cgt0cmFuc2Zvcm1lchgBIAEoCzIlLm1nbXQudjFhbHBoYTEuVXNlckRlZmluZWRUcmFuc2Zvcm1lciL3AQojQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESJwoEbmFtZRgCIAEoCUIZukgWchQyEl5bYS16MC05LV17MywxMDB9JBITCgtkZXNjcmlwdGlvbhgDIAEoCRIwCgZzb3VyY2UYBSABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlEjwKEnRyYW5zZm9ybWVyX2NvbmZpZxgGIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWdKBAgEEAUiYgokQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlEjoKC3RyYW5zZm9ybWVyGAEgASgLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyIkcKI0RlbGV0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0EiAKDnRyYW5zZm9ybWVyX2lkGAEgASgJQgi6SAVyA7ABASImCiREZWxldGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVzcG9uc2UiwwEKI1VwZGF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0EiAKDnRyYW5zZm9ybWVyX2lkGAEgASgJQgi6SAVyA7ABARInCgRuYW1lGAIgASgJQhm6SBZyFDISXlthLXowLTktXXszLDEwMH0kEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjwKEnRyYW5zZm9ybWVyX2NvbmZpZxgEIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWciYgokVXBkYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlEjoKC3RyYW5zZm9ybWVyGAEgASgLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyInYKIUlzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIzChB0cmFuc2Zvcm1lcl9uYW1lGAIgASgJQhm6SBZyFDISXlthLXowLTktXXszLDEwMH0kIjoKIklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVzcG9uc2USFAoMaXNfYXZhaWxhYmxlGAEgASgIIpgDChZVc2VyRGVmaW5lZFRyYW5zZm9ybWVyEhQKAmlkGAEgASgJQgi6SAVyA7ABARIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjUKCWRhdGFfdHlwZRgFIAEoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZRIwCgZzb3VyY2UYBiABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlEjAKBmNvbmZpZxgHIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWcSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEgoKYWNjb3VudF9pZBgKIAEoCRI2CgpkYXRhX3R5cGVzGAsgAygOMiIubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1lckRhdGFUeXBlIscCChFTeXN0ZW1UcmFuc2Zvcm1lchIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEjUKCWRhdGFfdHlwZRgDIAEoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZRIwCgZzb3VyY2UYBCABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlEjAKBmNvbmZpZxgFIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWcSNgoKZGF0YV90eXBlcxgGIAMoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZRI8ChNzdXBwb3J0ZWRfam9iX3R5cGVzGAcgAygOMh8ubWdtdC52MWFscGhhMS5TdXBwb3J0ZWRKb2JUeXBlIr0aChFUcmFuc2Zvcm1lckNvbmZpZxI9ChVnZW5lcmF0ZV9lbWFpbF9jb25maWcYASABKAsyHC5tZ210LnYxYWxwaGExLkdlbmVyYXRlRW1haWxIABI/ChZ0cmFuc2Zvcm1fZW1haWxfY29uZmlnGAIgASgLMh0ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1FbWFpbEgAEjsKFGdlbmVyYXRlX2Jvb2xfY29uZmlnGAMgASgLMhsubWdtdC52MWFscGhhMS5HZW5lcmF0ZUJvb2xIABJIChtnZW5lcmF0ZV9jYXJkX251bWJlcl9jb25maWcYBCABKAsyIS5tZ210LnYxYWxwaGExLkdlbmVyYXRlQ2FyZE51bWJlckgAEjsKFGdlbmVyYXRlX2NpdHlfY29uZmlnGAUgASgLMhsubWdtdC52MWFscGhhMS5HZW5lcmF0ZUNpdHlIABJTCiFnZW5lcmF0ZV9lMTY0X3Bob25lX251bWJlcl9jb25maWcYBiABKAsyJi5tZ210LnYxYWxwaGExLkdlbmVyYXRlRTE2NFBob25lTnVtYmVySAASRgoaZ2VuZXJhdGVfZmlyc3RfbmFtZV9jb25maWcYByABKAsyIC5tZ210LnYxYWxwaGExLkdlbmVyYXRlRmlyc3ROYW1lSAASQQoXZ2VuZXJhdGVfZmxvYXQ2NF9jb25maWcYCCABKAsyHi5tZ210LnYxYWxwaGExLkdlbmVyYXRlRmxvYXQ2NEgAEkoKHGdlbmVyYXRlX2Z1bGxfYWRkcmVzc19jb25maWcYCSABKAsyIi5tZ210LnYxYWxwaGExLkdlbmVyYXRlRnVsbEFkZHJlc3NIABJEChlnZW5lcmF0ZV9mdWxsX25hbWVfY29uZmlnGAogASgLMh8ubWdtdC52MWFscGhhMS5HZW5lcmF0ZUZ1bGxOYW1lSAASPwoWZ2VuZXJhdGVfZ2VuZGVyX2NvbmZpZxgLIAEoCzIdLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVHZW5kZXJIABJVCiJnZW5lcmF0ZV9pbnQ2NF9waG9uZV9udW1iZXJfY29uZmlnGAwgASgLMicubWdtdC52MWFscGhhMS5HZW5lcmF0ZUludDY0UGhvbmVOdW1iZXJIABI9ChVnZW5lcmF0ZV9pbnQ2NF9jb25maWcYDSABKAsyHC5tZ210LnYxYWxwaGExLkdlbmVyYXRlSW50NjRIABJEChlnZW5lcmF0ZV9sYXN0X25hbWVfY29uZmlnGA4gASgLMh8ubWdtdC52MWFscGhhMS5HZW5lcmF0ZUxhc3ROYW1lSAASRwoaZ2VuZXJhdGVfc2hhMjU2aGFzaF9jb25maWcYDyABKAsyIS5tZ210LnYxYWxwaGExLkdlbmVyYXRlU2hhMjU2SGFzaEgAEjkKE2dlbmVyYXRlX3Nzbl9jb25maWcYECABKAsyGi5tZ210LnYxYWxwaGExLkdlbmVyYXRlU1NOSAASPQoVZ2VuZXJhdGVfc3RhdGVfY29uZmlnGBEgASgLMhwubWdtdC52MWFscGhhMS5HZW5lcmF0ZVN0YXRlSAASTgoeZ2VuZXJhdGVfc3RyZWV0X2FkZHJlc3NfY29uZmlnGBIgASgLMiQubWdtdC52MWFscGhhMS5HZW5lcmF0ZVN0cmVldEFkZHJlc3NIABJXCiNnZW5lcmF0ZV9zdHJpbmdfcGhvbmVfbnVtYmVyX2NvbmZpZxgTIAEoCzIoLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVTdHJpbmdQaG9uZU51bWJlckgAEj8KFmdlbmVyYXRlX3N0cmluZ19jb25maWcYFCABKAsyHS5tZ210LnYxYWxwaGExLkdlbmVyYXRlU3RyaW5nSAASTQodZ2VuZXJhdGVfdW5peHRpbWVzdGFtcF9jb25maWcYFSABKAsyJC5tZ210LnYxYWxwaGExLkdlbmVyYXRlVW5peFRpbWVzdGFtcEgAEkMKGGdlbmVyYXRlX3VzZXJuYW1lX2NvbmZpZxgWIAEoCzIfLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVVc2VybmFtZUgAEksKHGdlbmVyYXRlX3V0Y3RpbWVzdGFtcF9jb25maWcYFyABKAsyIy5tZ210LnYxYWxwaGExLkdlbmVyYXRlVXRjVGltZXN0YW1wSAASOwoUZ2VuZXJhdGVfdXVpZF9jb25maWcYGCABKAsyGy5tZ210LnYxYWxwaGExLkdlbmVyYXRlVXVpZEgAEkEKF2dlbmVyYXRlX3ppcGNvZGVfY29uZmlnGBkgASgLMh4ubWdtdC52MWFscGhhMS5HZW5lcmF0ZVppcGNvZGVIABJVCiJ0cmFuc2Zvcm1fZTE2NF9waG9uZV9udW1iZXJfY29uZmlnGBogASgLMicubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1FMTY0UGhvbmVOdW1iZXJIABJICht0cmFuc2Zvcm1fZmlyc3RfbmFtZV9jb25maWcYGyABKAsyIS5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUZpcnN0TmFtZUgAEkMKGHRyYW5zZm9ybV9mbG9hdDY0X2NvbmZpZxgcIAEoCzIfLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtRmxvYXQ2NEgAEkYKGnRyYW5zZm9ybV9mdWxsX25hbWVfY29uZmlnGB0gASgLMiAubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1GdWxsTmFtZUgAElcKI3RyYW5zZm9ybV9pbnQ2NF9waG9uZV9udW1iZXJfY29uZmlnGB4gASgLMigubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1JbnQ2NFBob25lTnVtYmVySAASPwoWdHJhbnNmb3JtX2ludDY0X2NvbmZpZxgfIAEoCzIdLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtSW50NjRIABJGChp0cmFuc2Zvcm1fbGFzdF9uYW1lX2NvbmZpZxggIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtTGFzdE5hbWVIABJMCh10cmFuc2Zvcm1fcGhvbmVfbnVtYmVyX2NvbmZpZxghIAEoCzIjLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtUGhvbmVOdW1iZXJIABJBChd0cmFuc2Zvcm1fc3RyaW5nX2NvbmZpZxgiIAEoCzIeLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtU3RyaW5nSAASOAoScGFzc3Rocm91Z2hfY29uZmlnGCMgASgLMhoubWdtdC52MWFscGhhMS5QYXNzdGhyb3VnaEgAEikKCm51bGxjb25maWcYJCABKAsyEy5tZ210LnYxYWxwaGExLk51bGxIABJWCh91c2VyX2RlZmluZWRfdHJhbnNmb3JtZXJfY29uZmlnGCUgASgLMisubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyQ29uZmlnSAASQQoXZ2VuZXJhdGVfZGVmYXVsdF9jb25maWcYJiABKAsyHi5tZ210LnYxYWxwaGExLkdlbmVyYXRlRGVmYXVsdEgAEkkKG3RyYW5zZm9ybV9qYXZhc2NyaXB0X2NvbmZpZxgnIAEoCzIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtSmF2YXNjcmlwdEgAEkkKG2dlbmVyYXRlX2NhdGVnb3JpY2FsX2NvbmZpZxgoIAEoCzIiLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVDYXRlZ29yaWNhbEgAElgKI3RyYW5zZm9ybV9jaGFyYWN0ZXJfc2NyYW1ibGVfY29uZmlnGCkgASgLMikubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1DaGFyYWN0ZXJTY3JhbWJsZUgAEkcKGmdlbmVyYXRlX2phdmFzY3JpcHRfY29uZmlnGCogASgLMiEubWdtdC52MWFscGhhMS5HZW5lcmF0ZUphdmFzY3JpcHRIABJBChdnZW5lcmF0ZV9jb3VudHJ5X2NvbmZpZxgrIAEoCzIeLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVDb3VudHJ5SAASRAoZdHJhbnNmb3JtX3BpaV90ZXh0X2NvbmZpZxgsIAEoCzIfLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtUGlpVGV4dEgAEkwKHWdlbmVyYXRlX2J1c2luZXNzX25hbWVfY29uZmlnGC0gASgLMiMubWdtdC52MWFscGhhMS5HZW5lcmF0ZUJ1c2luZXNzTmFtZUgAEkYKGmdlbmVyYXRlX2lwX2FkZHJlc3NfY29uZmlnGC4gASgLMiAubWdtdC52MWFscGhhMS5HZW5lcmF0ZUlwQWRkcmVzc0gAEj0KFXRyYW5zZm9ybV91dWlkX2NvbmZpZxgvIAEoCzIcLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtVXVpZEgAQg8KBmNvbmZpZxIFukgCCAEilwIKEFRyYW5zZm9ybVBpaVRleHQSKAoPc2NvcmVfdGhyZXNob2xkGAEgASgCQg+6SAwKCh0AAIA/LQAAAAASOAoSZGVmYXVsdF9hbm9ueW1pemVyGAIgASgLMhwubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyEjoKEGRlbnlfcmVjb2duaXplcnMYAyADKAsyIC5tZ210LnYxYWxwaGExLlBpaURlbnlSZWNvZ25pemVyEiYKEGFsbG93ZWRfZW50aXRpZXMYBCADKAlCDLpICZIBBiIEcgIQARIXCg9hbGxvd2VkX3BocmFzZXMYBSADKAkSFQoIbGFuZ3VhZ2UYBiABKAlIAIgBAUILCglfbGFuZ3VhZ2UiXwoRUGlpRGVueVJlY29nbml6ZXISKAoEbmFtZRgBIAEoCUIaukgXchUyE15bYS16MC05LV9dezEsMTAwfSQSIAoKZGVueV93b3JkcxgCIAMoCUIMukgJkgEGIgRyAhABIuAECg1QaWlBbm9ueW1pemVyEjcKB3JlcGxhY2UYASABKAsyJC5tZ210LnYxYWxwaGExLlBpaUFub255bWl6ZXIuUmVwbGFjZUgAEjUKBnJlZGFjdBgCIAEoCzIjLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplci5SZWRhY3RIABIxCgRtYXNrGAMgASgLMiEubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyLk1hc2tIABIxCgRoYXNoGAQgASgLMiEubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyLkhhc2hIABonCgdSZXBsYWNlEhIKBXZhbHVlGAEgASgJSACIAQFCCAoGX3ZhbHVlGggKBlJlZGFjdBqEAQoETWFzaxIZCgxtYXNraW5nX2NoYXIYASABKAlIAIgBARIaCg1jaGFyc190b19tYXNrGAIgASgFSAGIAQESFQoIZnJvbV9lbmQYAyABKAhIAogBAUIPCg1fbWFza2luZ19jaGFyQhAKDl9jaGFyc190b19tYXNrQgsKCV9mcm9tX2VuZBq0AQoESGFzaBI9CgRhbGdvGAEgASgOMioubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyLkhhc2guSGFzaFR5cGVIAIgBASJkCghIYXNoVHlwZRIZChVIQVNIX1RZUEVfVU5TUEVDSUZJRUQQABIRCg1IQVNIX1RZUEVfTUQ1EAESFAoQSEFTSF9UWVBFX1NIQTI1NhACEhQKEEhBU0hfVFlQRV9TSEE1MTIQA0IHCgVfYWxnb0IICgZjb25maWciWQoNR2VuZXJhdGVFbWFpbBI5CgplbWFpbF90eXBlGAEgASgOMiAubWdtdC52MWFscGhhMS5HZW5lcmF0ZUVtYWlsVHlwZUgAiAEBQg0KC19lbWFpbF90eXBlIrcCCg5UcmFuc2Zvcm1FbWFpbBIcCg9wcmVzZXJ2ZV9kb21haW4YASABKAhIAIgBARIcCg9wcmVzZXJ2ZV9sZW5ndGgYAiABKAhIAYgBARIYChBleGNsdWRlZF9kb21haW5zGAMgAygJEjkKCmVtYWlsX3R5cGUYBCABKA4yIC5tZ210LnYxYWxwaGExLkdlbmVyYXRlRW1haWxUeXBlSAKIAQESRAoUaW52YWxpZF9lbWFpbF9hY3Rpb24YBSABKA4yIS5tZ210LnYxYWxwaGExLkludmFsaWRFbWFpbEFjdGlvbkgDiAEBQhIKEF9wcmVzZXJ2ZV9kb21haW5CEgoQX3ByZXNlcnZlX2xlbmd0aEINCgtfZW1haWxfdHlwZUIXChVfaW52YWxpZF9lbWFpbF9hY3Rpb24iDgoMR2VuZXJhdGVCb29sIjwKEkdlbmVyYXRlQ2FyZE51bWJlchIXCgp2YWxpZF9sdWhuGAEgASgISACIAQFCDQoLX3ZhbGlkX2x1aG4iDgoMR2VuZXJhdGVDaXR5IhEKD0dlbmVyYXRlRGVmYXVsdCJNChdHZW5lcmF0ZUUxNjRQaG9uZU51bWJlchIQCgNtaW4YASABKANIAIgBARIQCgNtYXgYAiABKANIAYgBAUIGCgRfbWluQgYKBF9tYXgiEwoRR2VuZXJhdGVGaXJzdE5hbWUimwEKD0dlbmVyYXRlRmxvYXQ2NBIbCg5yYW5kb21pemVfc2lnbhgBIAEoCEgAiAEBEhAKA21pbhgCIAEoAUgBiAEBEhAKA21heBgDIAEoAUgCiAEBEhYKCXByZWNpc2lvbhgEIAEoA0gDiAEBQhEKD19yYW5kb21pemVfc2lnbkIGCgRfbWluQgYKBF9tYXhCDAoKX3ByZWNpc2lvbiIVChNHZW5lcmF0ZUZ1bGxBZGRyZXNzIhIKEEdlbmVyYXRlRnVsbE5hbWUiOAoOR2VuZXJhdGVHZW5kZXISFwoKYWJicmV2aWF0ZRgBIAEoCEgAiAEBQg0KC19hYmJyZXZpYXRlIhoKGEdlbmVyYXRlSW50NjRQaG9uZU51bWJlciJzCg1HZW5lcmF0ZUludDY0EhsKDnJhbmRvbWl6ZV9zaWduGAEgASgISACIAQESEAoDbWluGAIgASgDSAGIAQESEAoDbWF4GAMgASgDSAKIAQFCEQoPX3JhbmRvbWl6ZV9zaWduQgYKBF9taW5CBgoEX21heCISChBHZW5lcmF0ZUxhc3ROYW1lIhQKEkdlbmVyYXRlU2hhMjU2SGFzaCINCgtHZW5lcmF0ZVNTTiJHCg1HZW5lcmF0ZVN0YXRlEh8KEmdlbmVyYXRlX2Z1bGxfbmFtZRgBIAEoCEgAiAEBQhUKE19nZW5lcmF0ZV9mdWxsX25hbWUiFwoVR2VuZXJhdGVTdHJlZXRBZGRyZXNzIk8KGUdlbmVyYXRlU3RyaW5nUGhvbmVOdW1iZXISEAoDbWluGAIgASgDSACIAQESEAoDbWF4GAMgASgDSAGIAQFCBgoEX21pbkIGCgRfbWF4IkQKDkdlbmVyYXRlU3RyaW5nEhAKA21pbhgBIAEoA0gAiAEBEhAKA21heBgCIAEoA0gBiAEBQgYKBF9taW5CBgoEX21heCIXChVHZW5lcmF0ZVVuaXhUaW1lc3RhbXAiEgoQR2VuZXJhdGVVc2VybmFtZSIWChRHZW5lcmF0ZVV0Y1RpbWVzdGFtcCJACgxHZW5lcmF0ZVV1aWQSHAoPaW5jbHVkZV9oeXBoZW5zGAEgASgISACIAQFCEgoQX2luY2x1ZGVfaHlwaGVucyIRCg9HZW5lcmF0ZVppcGNvZGUiTAoYVHJhbnNmb3JtRTE2NFBob25lTnVtYmVyEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiRgoSVHJhbnNmb3JtRmlyc3ROYW1lEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgilgEKEFRyYW5zZm9ybUZsb2F0NjQSJAoXcmFuZG9taXphdGlvbl9yYW5nZV9taW4YASABKAFIAIgBARIkChdyYW5kb21pemF0aW9uX3JhbmdlX21heBgCIAEoAUgBiAEBQhoKGF9yYW5kb21pemF0aW9uX3JhbmdlX21pbkIaChhfcmFuZG9taXphdGlvbl9yYW5nZV9tYXgiRQoRVHJhbnNmb3JtRnVsbE5hbWUSHAoPcHJlc2VydmVfbGVuZ3RoGAEgASgISACIAQFCEgoQX3ByZXNlcnZlX2xlbmd0aCJNChlUcmFuc2Zvcm1JbnQ2NFBob25lTnVtYmVyEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgilAEKDlRyYW5zZm9ybUludDY0EiQKF3JhbmRvbWl6YXRpb25fcmFuZ2VfbWluGAEgASgDSACIAQESJAoXcmFuZG9taXphdGlvbl9yYW5nZV9tYXgYAiABKANIAYgBAUIaChhfcmFuZG9taXphdGlvbl9yYW5nZV9taW5CGgoYX3JhbmRvbWl6YXRpb25fcmFuZ2VfbWF4IkUKEVRyYW5zZm9ybUxhc3ROYW1lEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiSAoUVHJhbnNmb3JtUGhvbmVOdW1iZXISHAoPcHJlc2VydmVfbGVuZ3RoGAEgASgISACIAQFCEgoQX3ByZXNlcnZlX2xlbmd0aCJDCg9UcmFuc2Zvcm1TdHJpbmcSHAoPcHJlc2VydmVfbGVuZ3RoGAEgASgISACIAQFCEgoQX3ByZXNlcnZlX2xlbmd0aCINCgtQYXNzdGhyb3VnaCIGCgROdWxsIiMKE1RyYW5zZm9ybUphdmFzY3JpcHQSDAoEY29kZRgBIAEoCSI0ChxVc2VyRGVmaW5lZFRyYW5zZm9ybWVyQ29uZmlnEhQKAmlkGAEgASgJQgi6SAVyA7ABASJACiFWYWxpZGF0ZVVzZXJKYXZhc2NyaXB0Q29kZVJlcXVlc3QSFQoEY29kZRgCIAEoCUIHukgEcgIQAUoECAEQAiIzCiJWYWxpZGF0ZVVzZXJKYXZhc2NyaXB0Q29kZVJlc3BvbnNlEg0KBXZhbGlkGAEgASgIIj0KE0dlbmVyYXRlQ2F0ZWdvcmljYWwSFwoKY2F0ZWdvcmllcxgBIAEoCUgAiAEBQg0KC19jYXRlZ29yaWVzIlYKGlRyYW5zZm9ybUNoYXJhY3RlclNjcmFtYmxlEiAKE3VzZXJfcHJvdmlkZWRfcmVnZXgYASABKAlIAIgBAUIWChRfdXNlcl9wcm92aWRlZF9yZWdleCIiChJHZW5lcmF0ZUphdmFzY3JpcHQSDAoEY29kZRgBIAEoCSJBChxWYWxpZGF0ZVVzZXJSZWdleENvZGVSZXF1ZXN0EhsKE3VzZXJfcHJvdmlkZWRfcmVnZXgYAiABKAlKBAgBEAIiLgodVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVzcG9uc2USDQoFdmFsaWQYASABKAgiSQoPR2VuZXJhdGVDb3VudHJ5Eh8KEmdlbmVyYXRlX2Z1bGxfbmFtZRgBIAEoCEgAiAEBQhUKE19nZW5lcmF0ZV9mdWxsX25hbWUiPgoeR2V0VHJhbnNmb3JtUGlpRW50aXRpZXNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBIjMKH0dldFRyYW5zZm9ybVBpaUVudGl0aWVzUmVzcG9uc2USEAoIZW50aXRpZXMYASADKAkiFgoUR2VuZXJhdGVCdXNpbmVzc05hbWUiWwoRR2VuZXJhdGVJcEFkZHJlc3MSOgoHaXBfdHlwZRgBIAEoDjIkLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVJcEFkZHJlc3NUeXBlSACIAQFCCgoIX2lwX3R5cGUiDwoNVHJhbnNmb3JtVXVpZCqHEQoRVHJhbnNmb3JtZXJTb3VyY2USIgoeVFJBTlNGT1JNRVJfU09VUkNFX1VOU1BFQ0lGSUVEEAASIgoeVFJBTlNGT1JNRVJfU09VUkNFX1BBU1NUSFJPVUdIEAESJwojVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0RFRkFVTFQQAhIrCidUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0pBVkFTQ1JJUFQQAxIlCiFUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfRU1BSUwQBBImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0VNQUlMEAUSJAogVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0JPT0wQBhIrCidUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfQ0FSRF9OVU1CRVIQBxIkCiBUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfQ0lUWRAIEjEKLVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9FMTY0X1BIT05FX05VTUJFUhAJEioKJlRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9GSVJTVF9OQU1FEAoSJwojVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0ZMT0FUNjQQCxIsCihUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfRlVMTF9BRERSRVNTEAwSKQolVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0ZVTExfTkFNRRANEiYKIlRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9HRU5ERVIQDhIyCi5UUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfSU5UNjRfUEhPTkVfTlVNQkVSEA8SJQohVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0lOVDY0EBASLAooVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1JBTkRPTV9JTlQ2NBAREikKJVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9MQVNUX05BTUUQEhIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU0hBMjU2SEFTSBATEiMKH1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9TU04QFBIlCiFUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1RBVEUQFRIuCipUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1RSRUVUX0FERFJFU1MQFhIzCi9UUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1RSSU5HX1BIT05FX05VTUJFUhAXEiYKIlRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9TVFJJTkcQGBItCilUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfUkFORE9NX1NUUklORxAZEi0KKVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9VTklYVElNRVNUQU1QEBoSKAokVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1VTRVJOQU1FEBsSLAooVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1VUQ1RJTUVTVEFNUBAcEiQKIFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9VVUlEEB0SJwojVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1pJUENPREUQHhIyCi5UUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0UxNjRfUEhPTkVfTlVNQkVSEB8SKwonVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9GSVJTVF9OQU1FECASKAokVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9GTE9BVDY0ECESKgomVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9GVUxMX05BTUUQIhIzCi9UUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0lOVDY0X1BIT05FX05VTUJFUhAjEiYKIlRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fSU5UNjQQJBIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0xBU1RfTkFNRRAlEi0KKVRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fUEhPTkVfTlVNQkVSECYSJwojVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9TVFJJTkcQJxIkCiBUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfTlVMTBAoEisKJ1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9DQVRFR09SSUNBTBAqEjMKL1RSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fQ0hBUkFDVEVSX1NDUkFNQkxFECsSIwofVFJBTlNGT1JNRVJfU09VUkNFX1VTRVJfREVGSU5FRBAsEioKJlRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9KQVZBU0NSSVBUEC0SJwojVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0NPVU5UUlkQLhIpCiVUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX1BJSV9URVhUEC8SLQopVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0JVU0lORVNTX05BTUUQMBIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfSVBfQUREUkVTUxAxEiUKIVRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fVVVJRBAyKsQCChNUcmFuc2Zvcm1lckRhdGFUeXBlEiUKIVRSQU5TRk9STUVSX0RBVEFfVFlQRV9VTlNQRUNJRklFRBAAEiAKHFRSQU5TRk9STUVSX0RBVEFfVFlQRV9TVFJJTkcQARIfChtUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfSU5UNjQQAhIhCh1UUkFOU0ZPUk1FUl9EQVRBX1RZUEVfQk9PTEVBThADEiEKHVRSQU5TRk9STUVSX0RBVEFfVFlQRV9GTE9BVDY0EAQSHgoaVFJBTlNGT1JNRVJfREFUQV9UWVBFX05VTEwQBRIdChlUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfQU5ZEAYSHgoaVFJBTlNGT1JNRVJfREFUQV9UWVBFX1RJTUUQBxIeChpUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfVVVJRBAIKnQKEFN1cHBvcnRlZEpvYlR5cGUSIgoeU1VQUE9SVEVEX0pPQl9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXU1VQUE9SVEVEX0pPQl9UWVBFX1NZTkMQARIfChtTVVBQT1JURURfSk9CX1RZUEVfR0VORVJBVEUQAip7ChFHZW5lcmF0ZUVtYWlsVHlwZRIjCh9HRU5FUkFURV9FTUFJTF9UWVBFX1VOU1BFQ0lGSUVEEAASHwobR0VORVJBVEVfRU1BSUxfVFlQRV9VVUlEX1Y0EAESIAocR0VORVJBVEVfRU1BSUxfVFlQRV9GVUxMTkFNRRACKsMBChJJbnZhbGlkRW1haWxBY3Rpb24SJAogSU5WQUxJRF9FTUFJTF9BQ1RJT05fVU5TUEVDSUZJRUQQABIfChtJTlZBTElEX0VNQUlMX0FDVElPTl9SRUpFQ1QQARIdChlJTlZBTElEX0VNQUlMX0FDVElPTl9OVUxMEAISJAogSU5WQUxJRF9FTUFJTF9BQ1RJT05fUEFTU1RIUk9VR0gQAxIhCh1JTlZBTElEX0VNQUlMX0FDVElPTl9HRU5FUkFURRAEKowDChVHZW5lcmF0ZUlwQWRkcmVzc1R5cGUSKAokR0VORVJBVEVfSVBfQUREUkVTU19UWVBFX1VOU1BFQ0lGSUVEEAASJgoiR0VORVJBVEVfSVBfQUREUkVTU19UWVBFX1Y0X1BVQkxJQxABEikKJUdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9QUklWQVRFX0EQAhIpCiVHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfUFJJVkFURV9CEAMSKQolR0VORVJBVEVfSVBfQUREUkVTU19UWVBFX1Y0X1BSSVZBVEVfQxAEEioKJkdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9MSU5LX0xPQ0FMEAUSKQolR0VORVJBVEVfSVBfQUREUkVTU19UWVBFX1Y0X01VTFRJQ0FTVBAGEigKJEdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9MT09QQkFDSxAHEh8KG0dFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNhAIMtELChNUcmFuc2Zvcm1lcnNTZXJ2aWNlEnQKFUdldFN5c3RlbVRyYW5zZm9ybWVycxIrLm1nbXQudjFhbHBoYTEuR2V0U3lzdGVtVHJhbnNmb3JtZXJzUmVxdWVzdBosLm1nbXQudjFhbHBoYTEuR2V0U3lzdGVtVHJhbnNmb3JtZXJzUmVzcG9uc2UiABKJAQocR2V0U3lzdGVtVHJhbnNmb3JtZXJCeVNvdXJjZRIyLm1nbXQudjFhbHBoYTEuR2V0U3lzdGVtVHJhbnNmb3JtZXJCeVNvdXJjZVJlcXVlc3QaMy5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2VSZXNwb25zZSIAEoMBChpHZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVycxIwLm1nbXQudjFhbHBoYTEuR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnNSZXF1ZXN0GjEubWdtdC52MWFscGhhMS5HZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVyc1Jlc3BvbnNlIgASjAEKHUdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJCeUlkEjMubWdtdC52MWFscGhhMS5HZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVyQnlJZFJlcXVlc3QaNC5tZ210LnYxYWxwaGExLkdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJCeUlkUmVzcG9uc2UiABKJAQocQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lchIyLm1nbXQudjFhbHBoYTEuQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlcXVlc3QaMy5tZ210LnYxYWxwaGExLkNyZWF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXNwb25zZSIAEokBChxEZWxldGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyEjIubWdtdC52MWFscGhhMS5EZWxldGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVxdWVzdBozLm1nbXQudjFhbHBoYTEuRGVsZXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlIgASiQEKHFVwZGF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXISMi5tZ210LnYxYWxwaGExLlVwZGF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0GjMubWdtdC52MWFscGhhMS5VcGRhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVzcG9uc2UiABKDAQoaSXNUcmFuc2Zvcm1lck5hbWVBdmFpbGFibGUSMC5tZ210LnYxYWxwaGExLklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVxdWVzdBoxLm1nbXQudjFhbHBoYTEuSXNUcmFuc2Zvcm1lck5hbWVBdmFpbGFibGVSZXNwb25zZSIAEoMBChpWYWxpZGF0ZVVzZXJKYXZhc2NyaXB0Q29kZRIwLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXF1ZXN0GjEubWdtdC52MWFscGhhMS5WYWxpZGF0ZVVzZXJKYXZhc2NyaXB0Q29kZVJlc3BvbnNlIgASdAoVVmFsaWRhdGVVc2VyUmVnZXhDb2RlEisubWdtdC52MWFscGhhMS5WYWxpZGF0ZVVzZXJSZWdleENvZGVSZXF1ZXN0GiwubWdtdC52MWFscGhhMS5WYWxpZGF0ZVVzZXJSZWdleENvZGVSZXNwb25zZSIAEn0KF0dldFRyYW5zZm9ybVBpaUVudGl0aWVzEi0ubWdtdC52MWFscGhhMS5HZXRUcmFuc2Zvcm1QaWlFbnRpdGllc1JlcXVlc3QaLi5tZ210LnYxYWxwaGExLkdldFRyYW5zZm9ybVBpaUVudGl0aWVzUmVzcG9uc2UiA5ACAULMAQoRY29tLm1nbXQudjFhbHBoYTFCEFRyYW5zZm9ybWVyUHJvdG9QAVpQZ2l0aHViLmNvbS9udWNsZXVzY2xvdWQvbmVvc3luYy9iYWNrZW5kL2dlbi9nby9wcm90b3MvbWdtdC92MWFscGhhMTttZ210djFhbHBoYTGiAgNNWFiqAg1NZ210LlYxYWxwaGExygINTWdtdFxWMWFscGhhMeICGU1nbXRcVjFhbHBoYTFcR1BCTWV0YWRhdGHqAg5NZ210OjpWMWFscGhhMWIGcHJvdG8z", [file_buf_validate_validate, file_google_protobuf_timestamp]); + fileDesc("Ch9tZ210L3YxYWxwaGExL3RyYW5zZm9ybWVyLnByb3RvEg1tZ210LnYxYWxwaGExIh4KHEdldFN5c3RlbVRyYW5zZm9ybWVyc1JlcXVlc3QiVwodR2V0U3lzdGVtVHJhbnNmb3JtZXJzUmVzcG9uc2USNgoMdHJhbnNmb3JtZXJzGAEgAygLMiAubWdtdC52MWFscGhhMS5TeXN0ZW1UcmFuc2Zvcm1lciJXCiNHZXRTeXN0ZW1UcmFuc2Zvcm1lckJ5U291cmNlUmVxdWVzdBIwCgZzb3VyY2UYASABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlIl0KJEdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2VSZXNwb25zZRI1Cgt0cmFuc2Zvcm1lchgBIAEoCzIgLm1nbXQudjFhbHBoYTEuU3lzdGVtVHJhbnNmb3JtZXIiQQohR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBImEKIkdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJzUmVzcG9uc2USOwoMdHJhbnNmb3JtZXJzGAEgAygLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyIkgKJEdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJCeUlkUmVxdWVzdBIgCg50cmFuc2Zvcm1lcl9pZBgBIAEoCUIIukgFcgOwAQEiYwolR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lckJ5SWRSZXNwb25zZRI6Cgt0cmFuc2Zvcm1lchgBIAEoCzIlLm1nbXQudjFhbHBoYTEuVXNlckRlZmluZWRUcmFuc2Zvcm1lciL3AQojQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESJwoEbmFtZRgCIAEoCUIZukgWchQyEl5bYS16MC05LV17MywxMDB9JBITCgtkZXNjcmlwdGlvbhgDIAEoCRIwCgZzb3VyY2UYBSABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlEjwKEnRyYW5zZm9ybWVyX2NvbmZpZxgGIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWdKBAgEEAUiYgokQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlEjoKC3RyYW5zZm9ybWVyGAEgASgLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyIkcKI0RlbGV0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0EiAKDnRyYW5zZm9ybWVyX2lkGAEgASgJQgi6SAVyA7ABASImCiREZWxldGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVzcG9uc2UiwwEKI1VwZGF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0EiAKDnRyYW5zZm9ybWVyX2lkGAEgASgJQgi6SAVyA7ABARInCgRuYW1lGAIgASgJQhm6SBZyFDISXlthLXowLTktXXszLDEwMH0kEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjwKEnRyYW5zZm9ybWVyX2NvbmZpZxgEIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWciYgokVXBkYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlEjoKC3RyYW5zZm9ybWVyGAEgASgLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyInYKIUlzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIzChB0cmFuc2Zvcm1lcl9uYW1lGAIgASgJQhm6SBZyFDISXlthLXowLTktXXszLDEwMH0kIjoKIklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVzcG9uc2USFAoMaXNfYXZhaWxhYmxlGAEgASgIIpgDChZVc2VyRGVmaW5lZFRyYW5zZm9ybWVyEhQKAmlkGAEgASgJQgi6SAVyA7ABARIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjUKCWRhdGFfdHlwZRgFIAEoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZRIwCgZzb3VyY2UYBiABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlEjAKBmNvbmZpZxgHIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWcSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEgoKYWNjb3VudF9pZBgKIAEoCRI2CgpkYXRhX3R5cGVzGAsgAygOMiIubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1lckRhdGFUeXBlIscCChFTeXN0ZW1UcmFuc2Zvcm1lchIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEjUKCWRhdGFfdHlwZRgDIAEoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZRIwCgZzb3VyY2UYBCABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlEjAKBmNvbmZpZxgFIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWcSNgoKZGF0YV90eXBlcxgGIAMoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZRI8ChNzdXBwb3J0ZWRfam9iX3R5cGVzGAcgAygOMh8ubWdtdC52MWFscGhhMS5TdXBwb3J0ZWRKb2JUeXBlIr0aChFUcmFuc2Zvcm1lckNvbmZpZxI9ChVnZW5lcmF0ZV9lbWFpbF9jb25maWcYASABKAsyHC5tZ210LnYxYWxwaGExLkdlbmVyYXRlRW1haWxIABI/ChZ0cmFuc2Zvcm1fZW1haWxfY29uZmlnGAIgASgLMh0ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1FbWFpbEgAEjsKFGdlbmVyYXRlX2Jvb2xfY29uZmlnGAMgASgLMhsubWdtdC52MWFscGhhMS5HZW5lcmF0ZUJvb2xIABJIChtnZW5lcmF0ZV9jYXJkX251bWJlcl9jb25maWcYBCABKAsyIS5tZ210LnYxYWxwaGExLkdlbmVyYXRlQ2FyZE51bWJlckgAEjsKFGdlbmVyYXRlX2NpdHlfY29uZmlnGAUgASgLMhsubWdtdC52MWFscGhhMS5HZW5lcmF0ZUNpdHlIABJTCiFnZW5lcmF0ZV9lMTY0X3Bob25lX251bWJlcl9jb25maWcYBiABKAsyJi5tZ210LnYxYWxwaGExLkdlbmVyYXRlRTE2NFBob25lTnVtYmVySAASRgoaZ2VuZXJhdGVfZmlyc3RfbmFtZV9jb25maWcYByABKAsyIC5tZ210LnYxYWxwaGExLkdlbmVyYXRlRmlyc3ROYW1lSAASQQoXZ2VuZXJhdGVfZmxvYXQ2NF9jb25maWcYCCABKAsyHi5tZ210LnYxYWxwaGExLkdlbmVyYXRlRmxvYXQ2NEgAEkoKHGdlbmVyYXRlX2Z1bGxfYWRkcmVzc19jb25maWcYCSABKAsyIi5tZ210LnYxYWxwaGExLkdlbmVyYXRlRnVsbEFkZHJlc3NIABJEChlnZW5lcmF0ZV9mdWxsX25hbWVfY29uZmlnGAogASgLMh8ubWdtdC52MWFscGhhMS5HZW5lcmF0ZUZ1bGxOYW1lSAASPwoWZ2VuZXJhdGVfZ2VuZGVyX2NvbmZpZxgLIAEoCzIdLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVHZW5kZXJIABJVCiJnZW5lcmF0ZV9pbnQ2NF9waG9uZV9udW1iZXJfY29uZmlnGAwgASgLMicubWdtdC52MWFscGhhMS5HZW5lcmF0ZUludDY0UGhvbmVOdW1iZXJIABI9ChVnZW5lcmF0ZV9pbnQ2NF9jb25maWcYDSABKAsyHC5tZ210LnYxYWxwaGExLkdlbmVyYXRlSW50NjRIABJEChlnZW5lcmF0ZV9sYXN0X25hbWVfY29uZmlnGA4gASgLMh8ubWdtdC52MWFscGhhMS5HZW5lcmF0ZUxhc3ROYW1lSAASRwoaZ2VuZXJhdGVfc2hhMjU2aGFzaF9jb25maWcYDyABKAsyIS5tZ210LnYxYWxwaGExLkdlbmVyYXRlU2hhMjU2SGFzaEgAEjkKE2dlbmVyYXRlX3Nzbl9jb25maWcYECABKAsyGi5tZ210LnYxYWxwaGExLkdlbmVyYXRlU1NOSAASPQoVZ2VuZXJhdGVfc3RhdGVfY29uZmlnGBEgASgLMhwubWdtdC52MWFscGhhMS5HZW5lcmF0ZVN0YXRlSAASTgoeZ2VuZXJhdGVfc3RyZWV0X2FkZHJlc3NfY29uZmlnGBIgASgLMiQubWdtdC52MWFscGhhMS5HZW5lcmF0ZVN0cmVldEFkZHJlc3NIABJXCiNnZW5lcmF0ZV9zdHJpbmdfcGhvbmVfbnVtYmVyX2NvbmZpZxgTIAEoCzIoLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVTdHJpbmdQaG9uZU51bWJlckgAEj8KFmdlbmVyYXRlX3N0cmluZ19jb25maWcYFCABKAsyHS5tZ210LnYxYWxwaGExLkdlbmVyYXRlU3RyaW5nSAASTQodZ2VuZXJhdGVfdW5peHRpbWVzdGFtcF9jb25maWcYFSABKAsyJC5tZ210LnYxYWxwaGExLkdlbmVyYXRlVW5peFRpbWVzdGFtcEgAEkMKGGdlbmVyYXRlX3VzZXJuYW1lX2NvbmZpZxgWIAEoCzIfLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVVc2VybmFtZUgAEksKHGdlbmVyYXRlX3V0Y3RpbWVzdGFtcF9jb25maWcYFyABKAsyIy5tZ210LnYxYWxwaGExLkdlbmVyYXRlVXRjVGltZXN0YW1wSAASOwoUZ2VuZXJhdGVfdXVpZF9jb25maWcYGCABKAsyGy5tZ210LnYxYWxwaGExLkdlbmVyYXRlVXVpZEgAEkEKF2dlbmVyYXRlX3ppcGNvZGVfY29uZmlnGBkgASgLMh4ubWdtdC52MWFscGhhMS5HZW5lcmF0ZVppcGNvZGVIABJVCiJ0cmFuc2Zvcm1fZTE2NF9waG9uZV9udW1iZXJfY29uZmlnGBogASgLMicubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1FMTY0UGhvbmVOdW1iZXJIABJICht0cmFuc2Zvcm1fZmlyc3RfbmFtZV9jb25maWcYGyABKAsyIS5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUZpcnN0TmFtZUgAEkMKGHRyYW5zZm9ybV9mbG9hdDY0X2NvbmZpZxgcIAEoCzIfLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtRmxvYXQ2NEgAEkYKGnRyYW5zZm9ybV9mdWxsX25hbWVfY29uZmlnGB0gASgLMiAubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1GdWxsTmFtZUgAElcKI3RyYW5zZm9ybV9pbnQ2NF9waG9uZV9udW1iZXJfY29uZmlnGB4gASgLMigubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1JbnQ2NFBob25lTnVtYmVySAASPwoWdHJhbnNmb3JtX2ludDY0X2NvbmZpZxgfIAEoCzIdLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtSW50NjRIABJGChp0cmFuc2Zvcm1fbGFzdF9uYW1lX2NvbmZpZxggIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtTGFzdE5hbWVIABJMCh10cmFuc2Zvcm1fcGhvbmVfbnVtYmVyX2NvbmZpZxghIAEoCzIjLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtUGhvbmVOdW1iZXJIABJBChd0cmFuc2Zvcm1fc3RyaW5nX2NvbmZpZxgiIAEoCzIeLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtU3RyaW5nSAASOAoScGFzc3Rocm91Z2hfY29uZmlnGCMgASgLMhoubWdtdC52MWFscGhhMS5QYXNzdGhyb3VnaEgAEikKCm51bGxjb25maWcYJCABKAsyEy5tZ210LnYxYWxwaGExLk51bGxIABJWCh91c2VyX2RlZmluZWRfdHJhbnNmb3JtZXJfY29uZmlnGCUgASgLMisubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyQ29uZmlnSAASQQoXZ2VuZXJhdGVfZGVmYXVsdF9jb25maWcYJiABKAsyHi5tZ210LnYxYWxwaGExLkdlbmVyYXRlRGVmYXVsdEgAEkkKG3RyYW5zZm9ybV9qYXZhc2NyaXB0X2NvbmZpZxgnIAEoCzIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtSmF2YXNjcmlwdEgAEkkKG2dlbmVyYXRlX2NhdGVnb3JpY2FsX2NvbmZpZxgoIAEoCzIiLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVDYXRlZ29yaWNhbEgAElgKI3RyYW5zZm9ybV9jaGFyYWN0ZXJfc2NyYW1ibGVfY29uZmlnGCkgASgLMikubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1DaGFyYWN0ZXJTY3JhbWJsZUgAEkcKGmdlbmVyYXRlX2phdmFzY3JpcHRfY29uZmlnGCogASgLMiEubWdtdC52MWFscGhhMS5HZW5lcmF0ZUphdmFzY3JpcHRIABJBChdnZW5lcmF0ZV9jb3VudHJ5X2NvbmZpZxgrIAEoCzIeLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVDb3VudHJ5SAASRAoZdHJhbnNmb3JtX3BpaV90ZXh0X2NvbmZpZxgsIAEoCzIfLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtUGlpVGV4dEgAEkwKHWdlbmVyYXRlX2J1c2luZXNzX25hbWVfY29uZmlnGC0gASgLMiMubWdtdC52MWFscGhhMS5HZW5lcmF0ZUJ1c2luZXNzTmFtZUgAEkYKGmdlbmVyYXRlX2lwX2FkZHJlc3NfY29uZmlnGC4gASgLMiAubWdtdC52MWFscGhhMS5HZW5lcmF0ZUlwQWRkcmVzc0gAEj0KFXRyYW5zZm9ybV91dWlkX2NvbmZpZxgvIAEoCzIcLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtVXVpZEgAQg8KBmNvbmZpZxIFukgCCAEiwwMKEFRyYW5zZm9ybVBpaVRleHQSKAoPc2NvcmVfdGhyZXNob2xkGAEgASgCQg+6SAwKCh0AAIA/LQAAAAASOAoSZGVmYXVsdF9hbm9ueW1pemVyGAIgASgLMhwubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyEjoKEGRlbnlfcmVjb2duaXplcnMYAyADKAsyIC5tZ210LnYxYWxwaGExLlBpaURlbnlSZWNvZ25pemVyEiYKEGFsbG93ZWRfZW50aXRpZXMYBCADKAlCDLpICZIBBiIEcgIQARIXCg9hbGxvd2VkX3BocmFzZXMYBSADKAkSFQoIbGFuZ3VhZ2UYBiABKAlIAIgBARJSChJlbnRpdHlfYW5vbnltaXplcnMYByADKAsyNi5tZ210LnYxYWxwaGExLlRyYW5zZm9ybVBpaVRleHQuRW50aXR5QW5vbnltaXplcnNFbnRyeRpWChZFbnRpdHlBbm9ueW1pemVyc0VudHJ5EgsKA2tleRgBIAEoCRIrCgV2YWx1ZRgCIAEoCzIcLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplcjoCOAFCCwoJX2xhbmd1YWdlIl8KEVBpaURlbnlSZWNvZ25pemVyEigKBG5hbWUYASABKAlCGrpIF3IVMhNeW2EtejAtOS1fXXsxLDEwMH0kEiAKCmRlbnlfd29yZHMYAiADKAlCDLpICZIBBiIEcgIQASLgBAoNUGlpQW5vbnltaXplchI3CgdyZXBsYWNlGAEgASgLMiQubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyLlJlcGxhY2VIABI1CgZyZWRhY3QYAiABKAsyIy5tZ210LnYxYWxwaGExLlBpaUFub255bWl6ZXIuUmVkYWN0SAASMQoEbWFzaxgDIAEoCzIhLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplci5NYXNrSAASMQoEaGFzaBgEIAEoCzIhLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplci5IYXNoSAAaJwoHUmVwbGFjZRISCgV2YWx1ZRgBIAEoCUgAiAEBQggKBl92YWx1ZRoICgZSZWRhY3QahAEKBE1hc2sSGQoMbWFza2luZ19jaGFyGAEgASgJSACIAQESGgoNY2hhcnNfdG9fbWFzaxgCIAEoBUgBiAEBEhUKCGZyb21fZW5kGAMgASgISAKIAQFCDwoNX21hc2tpbmdfY2hhckIQCg5fY2hhcnNfdG9fbWFza0ILCglfZnJvbV9lbmQatAEKBEhhc2gSPQoEYWxnbxgBIAEoDjIqLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplci5IYXNoLkhhc2hUeXBlSACIAQEiZAoISGFzaFR5cGUSGQoVSEFTSF9UWVBFX1VOU1BFQ0lGSUVEEAASEQoNSEFTSF9UWVBFX01ENRABEhQKEEhBU0hfVFlQRV9TSEEyNTYQAhIUChBIQVNIX1RZUEVfU0hBNTEyEANCBwoFX2FsZ29CCAoGY29uZmlnIlkKDUdlbmVyYXRlRW1haWwSOQoKZW1haWxfdHlwZRgBIAEoDjIgLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVFbWFpbFR5cGVIAIgBAUINCgtfZW1haWxfdHlwZSK3AgoOVHJhbnNmb3JtRW1haWwSHAoPcHJlc2VydmVfZG9tYWluGAEgASgISACIAQESHAoPcHJlc2VydmVfbGVuZ3RoGAIgASgISAGIAQESGAoQZXhjbHVkZWRfZG9tYWlucxgDIAMoCRI5CgplbWFpbF90eXBlGAQgASgOMiAubWdtdC52MWFscGhhMS5HZW5lcmF0ZUVtYWlsVHlwZUgCiAEBEkQKFGludmFsaWRfZW1haWxfYWN0aW9uGAUgASgOMiEubWdtdC52MWFscGhhMS5JbnZhbGlkRW1haWxBY3Rpb25IA4gBAUISChBfcHJlc2VydmVfZG9tYWluQhIKEF9wcmVzZXJ2ZV9sZW5ndGhCDQoLX2VtYWlsX3R5cGVCFwoVX2ludmFsaWRfZW1haWxfYWN0aW9uIg4KDEdlbmVyYXRlQm9vbCI8ChJHZW5lcmF0ZUNhcmROdW1iZXISFwoKdmFsaWRfbHVobhgBIAEoCEgAiAEBQg0KC192YWxpZF9sdWhuIg4KDEdlbmVyYXRlQ2l0eSIRCg9HZW5lcmF0ZURlZmF1bHQiTQoXR2VuZXJhdGVFMTY0UGhvbmVOdW1iZXISEAoDbWluGAEgASgDSACIAQESEAoDbWF4GAIgASgDSAGIAQFCBgoEX21pbkIGCgRfbWF4IhMKEUdlbmVyYXRlRmlyc3ROYW1lIpsBCg9HZW5lcmF0ZUZsb2F0NjQSGwoOcmFuZG9taXplX3NpZ24YASABKAhIAIgBARIQCgNtaW4YAiABKAFIAYgBARIQCgNtYXgYAyABKAFIAogBARIWCglwcmVjaXNpb24YBCABKANIA4gBAUIRCg9fcmFuZG9taXplX3NpZ25CBgoEX21pbkIGCgRfbWF4QgwKCl9wcmVjaXNpb24iFQoTR2VuZXJhdGVGdWxsQWRkcmVzcyISChBHZW5lcmF0ZUZ1bGxOYW1lIjgKDkdlbmVyYXRlR2VuZGVyEhcKCmFiYnJldmlhdGUYASABKAhIAIgBAUINCgtfYWJicmV2aWF0ZSIaChhHZW5lcmF0ZUludDY0UGhvbmVOdW1iZXIicwoNR2VuZXJhdGVJbnQ2NBIbCg5yYW5kb21pemVfc2lnbhgBIAEoCEgAiAEBEhAKA21pbhgCIAEoA0gBiAEBEhAKA21heBgDIAEoA0gCiAEBQhEKD19yYW5kb21pemVfc2lnbkIGCgRfbWluQgYKBF9tYXgiEgoQR2VuZXJhdGVMYXN0TmFtZSIUChJHZW5lcmF0ZVNoYTI1Nkhhc2giDQoLR2VuZXJhdGVTU04iRwoNR2VuZXJhdGVTdGF0ZRIfChJnZW5lcmF0ZV9mdWxsX25hbWUYASABKAhIAIgBAUIVChNfZ2VuZXJhdGVfZnVsbF9uYW1lIhcKFUdlbmVyYXRlU3RyZWV0QWRkcmVzcyJPChlHZW5lcmF0ZVN0cmluZ1Bob25lTnVtYmVyEhAKA21pbhgCIAEoA0gAiAEBEhAKA21heBgDIAEoA0gBiAEBQgYKBF9taW5CBgoEX21heCJECg5HZW5lcmF0ZVN0cmluZxIQCgNtaW4YASABKANIAIgBARIQCgNtYXgYAiABKANIAYgBAUIGCgRfbWluQgYKBF9tYXgiFwoVR2VuZXJhdGVVbml4VGltZXN0YW1wIhIKEEdlbmVyYXRlVXNlcm5hbWUiFgoUR2VuZXJhdGVVdGNUaW1lc3RhbXAiQAoMR2VuZXJhdGVVdWlkEhwKD2luY2x1ZGVfaHlwaGVucxgBIAEoCEgAiAEBQhIKEF9pbmNsdWRlX2h5cGhlbnMiEQoPR2VuZXJhdGVaaXBjb2RlIkwKGFRyYW5zZm9ybUUxNjRQaG9uZU51bWJlchIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIkYKElRyYW5zZm9ybUZpcnN0TmFtZRIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIpYBChBUcmFuc2Zvcm1GbG9hdDY0EiQKF3JhbmRvbWl6YXRpb25fcmFuZ2VfbWluGAEgASgBSACIAQESJAoXcmFuZG9taXphdGlvbl9yYW5nZV9tYXgYAiABKAFIAYgBAUIaChhfcmFuZG9taXphdGlvbl9yYW5nZV9taW5CGgoYX3JhbmRvbWl6YXRpb25fcmFuZ2VfbWF4IkUKEVRyYW5zZm9ybUZ1bGxOYW1lEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiTQoZVHJhbnNmb3JtSW50NjRQaG9uZU51bWJlchIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIpQBCg5UcmFuc2Zvcm1JbnQ2NBIkChdyYW5kb21pemF0aW9uX3JhbmdlX21pbhgBIAEoA0gAiAEBEiQKF3JhbmRvbWl6YXRpb25fcmFuZ2VfbWF4GAIgASgDSAGIAQFCGgoYX3JhbmRvbWl6YXRpb25fcmFuZ2VfbWluQhoKGF9yYW5kb21pemF0aW9uX3JhbmdlX21heCJFChFUcmFuc2Zvcm1MYXN0TmFtZRIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIkgKFFRyYW5zZm9ybVBob25lTnVtYmVyEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiQwoPVHJhbnNmb3JtU3RyaW5nEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiDQoLUGFzc3Rocm91Z2giBgoETnVsbCIjChNUcmFuc2Zvcm1KYXZhc2NyaXB0EgwKBGNvZGUYASABKAkiNAocVXNlckRlZmluZWRUcmFuc2Zvcm1lckNvbmZpZxIUCgJpZBgBIAEoCUIIukgFcgOwAQEiQAohVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXF1ZXN0EhUKBGNvZGUYAiABKAlCB7pIBHICEAFKBAgBEAIiMwoiVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXNwb25zZRINCgV2YWxpZBgBIAEoCCI9ChNHZW5lcmF0ZUNhdGVnb3JpY2FsEhcKCmNhdGVnb3JpZXMYASABKAlIAIgBAUINCgtfY2F0ZWdvcmllcyJWChpUcmFuc2Zvcm1DaGFyYWN0ZXJTY3JhbWJsZRIgChN1c2VyX3Byb3ZpZGVkX3JlZ2V4GAEgASgJSACIAQFCFgoUX3VzZXJfcHJvdmlkZWRfcmVnZXgiIgoSR2VuZXJhdGVKYXZhc2NyaXB0EgwKBGNvZGUYASABKAkiQQocVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVxdWVzdBIbChN1c2VyX3Byb3ZpZGVkX3JlZ2V4GAIgASgJSgQIARACIi4KHVZhbGlkYXRlVXNlclJlZ2V4Q29kZVJlc3BvbnNlEg0KBXZhbGlkGAEgASgIIkkKD0dlbmVyYXRlQ291bnRyeRIfChJnZW5lcmF0ZV9mdWxsX25hbWUYASABKAhIAIgBAUIVChNfZ2VuZXJhdGVfZnVsbF9uYW1lIj4KHkdldFRyYW5zZm9ybVBpaUVudGl0aWVzUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABASIzCh9HZXRUcmFuc2Zvcm1QaWlFbnRpdGllc1Jlc3BvbnNlEhAKCGVudGl0aWVzGAEgAygJIhYKFEdlbmVyYXRlQnVzaW5lc3NOYW1lIlsKEUdlbmVyYXRlSXBBZGRyZXNzEjoKB2lwX3R5cGUYASABKA4yJC5tZ210LnYxYWxwaGExLkdlbmVyYXRlSXBBZGRyZXNzVHlwZUgAiAEBQgoKCF9pcF90eXBlIg8KDVRyYW5zZm9ybVV1aWQqhxEKEVRyYW5zZm9ybWVyU291cmNlEiIKHlRSQU5TRk9STUVSX1NPVVJDRV9VTlNQRUNJRklFRBAAEiIKHlRSQU5TRk9STUVSX1NPVVJDRV9QQVNTVEhST1VHSBABEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9ERUZBVUxUEAISKwonVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9KQVZBU0NSSVBUEAMSJQohVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0VNQUlMEAQSJgoiVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9FTUFJTBAFEiQKIFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9CT09MEAYSKwonVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0NBUkRfTlVNQkVSEAcSJAogVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0NJVFkQCBIxCi1UUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfRTE2NF9QSE9ORV9OVU1CRVIQCRIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfRklSU1RfTkFNRRAKEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9GTE9BVDY0EAsSLAooVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0ZVTExfQUREUkVTUxAMEikKJVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9GVUxMX05BTUUQDRImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfR0VOREVSEA4SMgouVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0lOVDY0X1BIT05FX05VTUJFUhAPEiUKIVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9JTlQ2NBAQEiwKKFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9SQU5ET01fSU5UNjQQERIpCiVUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfTEFTVF9OQU1FEBISKgomVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NIQTI1NkhBU0gQExIjCh9UUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1NOEBQSJQohVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUQVRFEBUSLgoqVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUUkVFVF9BRERSRVNTEBYSMwovVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUUklOR19QSE9ORV9OVU1CRVIQFxImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1RSSU5HEBgSLQopVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1JBTkRPTV9TVFJJTkcQGRItCilUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfVU5JWFRJTUVTVEFNUBAaEigKJFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9VU0VSTkFNRRAbEiwKKFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9VVENUSU1FU1RBTVAQHBIkCiBUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfVVVJRBAdEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9aSVBDT0RFEB4SMgouVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9FMTY0X1BIT05FX05VTUJFUhAfEisKJ1RSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRklSU1RfTkFNRRAgEigKJFRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRkxPQVQ2NBAhEioKJlRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRlVMTF9OQU1FECISMwovVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9JTlQ2NF9QSE9ORV9OVU1CRVIQIxImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0lOVDY0ECQSKgomVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9MQVNUX05BTUUQJRItCilUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX1BIT05FX05VTUJFUhAmEicKI1RSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fU1RSSU5HECcSJAogVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX05VTEwQKBIrCidUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfQ0FURUdPUklDQUwQKhIzCi9UUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0NIQVJBQ1RFUl9TQ1JBTUJMRRArEiMKH1RSQU5TRk9STUVSX1NPVVJDRV9VU0VSX0RFRklORUQQLBIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfSkFWQVNDUklQVBAtEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9DT1VOVFJZEC4SKQolVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9QSUlfVEVYVBAvEi0KKVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9CVVNJTkVTU19OQU1FEDASKgomVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0lQX0FERFJFU1MQMRIlCiFUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX1VVSUQQMirEAgoTVHJhbnNmb3JtZXJEYXRhVHlwZRIlCiFUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfVU5TUEVDSUZJRUQQABIgChxUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfU1RSSU5HEAESHwobVFJBTlNGT1JNRVJfREFUQV9UWVBFX0lOVDY0EAISIQodVFJBTlNGT1JNRVJfREFUQV9UWVBFX0JPT0xFQU4QAxIhCh1UUkFOU0ZPUk1FUl9EQVRBX1RZUEVfRkxPQVQ2NBAEEh4KGlRSQU5TRk9STUVSX0RBVEFfVFlQRV9OVUxMEAUSHQoZVFJBTlNGT1JNRVJfREFUQV9UWVBFX0FOWRAGEh4KGlRSQU5TRk9STUVSX0RBVEFfVFlQRV9USU1FEAcSHgoaVFJBTlNGT1JNRVJfREFUQV9UWVBFX1VVSUQQCCp0ChBTdXBwb3J0ZWRKb2JUeXBlEiIKHlNVUFBPUlRFRF9KT0JfVFlQRV9VTlNQRUNJRklFRBAAEhsKF1NVUFBPUlRFRF9KT0JfVFlQRV9TWU5DEAESHwobU1VQUE9SVEVEX0pPQl9UWVBFX0dFTkVSQVRFEAIqewoRR2VuZXJhdGVFbWFpbFR5cGUSIwofR0VORVJBVEVfRU1BSUxfVFlQRV9VTlNQRUNJRklFRBAAEh8KG0dFTkVSQVRFX0VNQUlMX1RZUEVfVVVJRF9WNBABEiAKHEdFTkVSQVRFX0VNQUlMX1RZUEVfRlVMTE5BTUUQAirDAQoSSW52YWxpZEVtYWlsQWN0aW9uEiQKIElOVkFMSURfRU1BSUxfQUNUSU9OX1VOU1BFQ0lGSUVEEAASHwobSU5WQUxJRF9FTUFJTF9BQ1RJT05fUkVKRUNUEAESHQoZSU5WQUxJRF9FTUFJTF9BQ1RJT05fTlVMTBACEiQKIElOVkFMSURfRU1BSUxfQUNUSU9OX1BBU1NUSFJPVUdIEAMSIQodSU5WQUxJRF9FTUFJTF9BQ1RJT05fR0VORVJBVEUQBCqMAwoVR2VuZXJhdGVJcEFkZHJlc3NUeXBlEigKJEdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9VTlNQRUNJRklFRBAAEiYKIkdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9QVUJMSUMQARIpCiVHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfUFJJVkFURV9BEAISKQolR0VORVJBVEVfSVBfQUREUkVTU19UWVBFX1Y0X1BSSVZBVEVfQhADEikKJUdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9QUklWQVRFX0MQBBIqCiZHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfTElOS19MT0NBTBAFEikKJUdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9NVUxUSUNBU1QQBhIoCiRHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfTE9PUEJBQ0sQBxIfChtHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjYQCDLRCwoTVHJhbnNmb3JtZXJzU2VydmljZRJ0ChVHZXRTeXN0ZW1UcmFuc2Zvcm1lcnMSKy5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyc1JlcXVlc3QaLC5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyc1Jlc3BvbnNlIgASiQEKHEdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2USMi5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2VSZXF1ZXN0GjMubWdtdC52MWFscGhhMS5HZXRTeXN0ZW1UcmFuc2Zvcm1lckJ5U291cmNlUmVzcG9uc2UiABKDAQoaR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnMSMC5tZ210LnYxYWxwaGExLkdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJzUmVxdWVzdBoxLm1nbXQudjFhbHBoYTEuR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnNSZXNwb25zZSIAEowBCh1HZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVyQnlJZBIzLm1nbXQudjFhbHBoYTEuR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lckJ5SWRSZXF1ZXN0GjQubWdtdC52MWFscGhhMS5HZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVyQnlJZFJlc3BvbnNlIgASiQEKHENyZWF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXISMi5tZ210LnYxYWxwaGExLkNyZWF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0GjMubWdtdC52MWFscGhhMS5DcmVhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVzcG9uc2UiABKJAQocRGVsZXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lchIyLm1nbXQudjFhbHBoYTEuRGVsZXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlcXVlc3QaMy5tZ210LnYxYWxwaGExLkRlbGV0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXNwb25zZSIAEokBChxVcGRhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyEjIubWdtdC52MWFscGhhMS5VcGRhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVxdWVzdBozLm1nbXQudjFhbHBoYTEuVXBkYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlIgASgwEKGklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlEjAubWdtdC52MWFscGhhMS5Jc1RyYW5zZm9ybWVyTmFtZUF2YWlsYWJsZVJlcXVlc3QaMS5tZ210LnYxYWxwaGExLklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVzcG9uc2UiABKDAQoaVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGUSMC5tZ210LnYxYWxwaGExLlZhbGlkYXRlVXNlckphdmFzY3JpcHRDb2RlUmVxdWVzdBoxLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXNwb25zZSIAEnQKFVZhbGlkYXRlVXNlclJlZ2V4Q29kZRIrLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVxdWVzdBosLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVzcG9uc2UiABJ9ChdHZXRUcmFuc2Zvcm1QaWlFbnRpdGllcxItLm1nbXQudjFhbHBoYTEuR2V0VHJhbnNmb3JtUGlpRW50aXRpZXNSZXF1ZXN0Gi4ubWdtdC52MWFscGhhMS5HZXRUcmFuc2Zvcm1QaWlFbnRpdGllc1Jlc3BvbnNlIgOQAgFCzAEKEWNvbS5tZ210LnYxYWxwaGExQhBUcmFuc2Zvcm1lclByb3RvUAFaUGdpdGh1Yi5jb20vbnVjbGV1c2Nsb3VkL25lb3N5bmMvYmFja2VuZC9nZW4vZ28vcHJvdG9zL21nbXQvdjFhbHBoYTE7bWdtdHYxYWxwaGExogIDTVhYqgINTWdtdC5WMWFscGhhMcoCDU1nbXRcVjFhbHBoYTHiAhlNZ210XFYxYWxwaGExXEdQQk1ldGFkYXRh6gIOTWdtdDo6VjFhbHBoYTFiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_timestamp]); /** * @generated from message mgmt.v1alpha1.GetSystemTransformersRequest @@ -782,6 +782,16 @@ export type TransformPiiText = Message<"mgmt.v1alpha1.TransformPiiText"> & { * @generated from field: optional string language = 6; */ language?: string; + + /** + * A map of entity names to anonymizer configurations. + * The key in this map corresponds to a recognized entity (e.g. PERSON, PHONE_NUMBER) which can be found via the GetPiiTextEntities() RPC method. + * The value in this map corresponds to the anonymizer configuration to use for that entity. + * If not provided, the default_anonymizer will be used. + * + * @generated from field: map entity_anonymizers = 7; + */ + entityAnonymizers: { [key: string]: PiiAnonymizer }; }; /** @@ -871,7 +881,7 @@ export const PiiAnonymizerSchema: GenMessage = /*@__PURE__*/ */ export type PiiAnonymizer_Replace = Message<"mgmt.v1alpha1.PiiAnonymizer.Replace"> & { /** - * The value to replace. If not provided, a template token of the anonymizer is used. + * The value to replace. If not provided, a template token of the anonymizer is used (e.g. A PERSON entity is replaced with: ) * * @generated from field: optional string value = 1; */ diff --git a/internal/ee/transformers/functions/functions.go b/internal/ee/transformers/functions/functions.go index c442bb81ac..bfad08c051 100644 --- a/internal/ee/transformers/functions/functions.go +++ b/internal/ee/transformers/functions/functions.go @@ -43,14 +43,11 @@ func TransformPiiText( analysisResults := removeAllowedPhrases(*analyzeResp.JSON200, value, config.GetAllowedPhrases()) - defaultAnon, ok, err := getDefaultAnonymizer(config.GetDefaultAnonymizer()) + anonymizers, err := buildAnonymizers(config) if err != nil { - return "", fmt.Errorf("unable to build default anonymizer: %w", err) - } - anonymizers := map[string]presidioapi.AnonymizeRequest_Anonymizers_AdditionalProperties{} - if ok { - anonymizers["DEFAULT"] = *defaultAnon + return "", fmt.Errorf("unable to build anonymizers: %w", err) } + anonResp, err := anonymizeClient.PostAnonymizeWithResponse(ctx, presidioapi.AnonymizeRequest{ AnalyzerResults: presidioapi.ToAnonymizeRecognizerResults(analysisResults), Text: value, @@ -66,6 +63,28 @@ func TransformPiiText( return *anonResp.JSON200.Text, nil } +func buildAnonymizers(config *mgmtv1alpha1.TransformPiiText) (map[string]presidioapi.AnonymizeRequest_Anonymizers_AdditionalProperties, error) { + output := map[string]presidioapi.AnonymizeRequest_Anonymizers_AdditionalProperties{} + defaultAnon, ok, err := toPresidioAnonymizerConfig(config.GetDefaultAnonymizer()) + if err != nil { + return nil, fmt.Errorf("unable to build default anonymizer: %w", err) + } + if ok { + output["DEFAULT"] = *defaultAnon + } + for entity, anonymizer := range config.GetEntityAnonymizers() { + ap, ok, err := toPresidioAnonymizerConfig(anonymizer) + if err != nil { + return nil, fmt.Errorf("unable to build entity %s anonymizer: %w", entity, err) + } + if ok { + output[entity] = *ap + } + } + + return output, nil +} + func removeAllowedPhrases( results []presidioapi.RecognizerResultWithAnaysisExplanation, text string, @@ -103,7 +122,7 @@ func buildAdhocRecognizers(dtos []*mgmtv1alpha1.PiiDenyRecognizer) []presidioapi return output } -func getDefaultAnonymizer(dto *mgmtv1alpha1.PiiAnonymizer) (*presidioapi.AnonymizeRequest_Anonymizers_AdditionalProperties, bool, error) { +func toPresidioAnonymizerConfig(dto *mgmtv1alpha1.PiiAnonymizer) (*presidioapi.AnonymizeRequest_Anonymizers_AdditionalProperties, bool, error) { switch cfg := dto.GetConfig().(type) { case *mgmtv1alpha1.PiiAnonymizer_Redact_: ap := &presidioapi.AnonymizeRequest_Anonymizers_AdditionalProperties{} diff --git a/internal/ee/transformers/functions/functions_test.go b/internal/ee/transformers/functions/functions_test.go index 7c77d341e4..5296fdc8d6 100644 --- a/internal/ee/transformers/functions/functions_test.go +++ b/internal/ee/transformers/functions/functions_test.go @@ -132,9 +132,48 @@ func Test_removeAllowedPhrases(t *testing.T) { // require.Equal(t, mockText, value) // } -func Test_getDefaultAnonymizer(t *testing.T) { +func Test_buildAnonymizers(t *testing.T) { + t.Run("entities", func(t *testing.T) { + replaceVal := "newval" + hashAlgo := mgmtv1alpha1.PiiAnonymizer_Hash_HASH_TYPE_SHA256 + output, err := buildAnonymizers(&mgmtv1alpha1.TransformPiiText{ + DefaultAnonymizer: &mgmtv1alpha1.PiiAnonymizer{ + Config: &mgmtv1alpha1.PiiAnonymizer_Replace_{ + Replace: &mgmtv1alpha1.PiiAnonymizer_Replace{ + Value: &replaceVal, + }, + }, + }, + EntityAnonymizers: map[string]*mgmtv1alpha1.PiiAnonymizer{ + "PERSON": { + Config: &mgmtv1alpha1.PiiAnonymizer_Hash_{ + Hash: &mgmtv1alpha1.PiiAnonymizer_Hash{ + Algo: &hashAlgo, + }, + }, + }, + }, + }) + require.NoError(t, err) + require.Equal(t, 2, len(output)) + + defaultEntity, ok := output["DEFAULT"] + require.True(t, ok) + replace, err := defaultEntity.AsReplace() + require.NoError(t, err) + require.Equal(t, replaceVal, replace.NewValue) + + person, ok := output["PERSON"] + require.True(t, ok) + hash, err := person.AsHash() + require.NoError(t, err) + require.Equal(t, presidioapi.Sha256, *hash.HashType) + }) +} + +func Test_toPresidioAnonymizerConfig(t *testing.T) { t.Run("redact", func(t *testing.T) { - actual, ok, err := getDefaultAnonymizer(&mgmtv1alpha1.PiiAnonymizer{ + actual, ok, err := toPresidioAnonymizerConfig(&mgmtv1alpha1.PiiAnonymizer{ Config: &mgmtv1alpha1.PiiAnonymizer_Redact_{ Redact: &mgmtv1alpha1.PiiAnonymizer_Redact{}, }, @@ -146,7 +185,7 @@ func Test_getDefaultAnonymizer(t *testing.T) { t.Run("replace", func(t *testing.T) { newval := "newval" - actual, ok, err := getDefaultAnonymizer(&mgmtv1alpha1.PiiAnonymizer{ + actual, ok, err := toPresidioAnonymizerConfig(&mgmtv1alpha1.PiiAnonymizer{ Config: &mgmtv1alpha1.PiiAnonymizer_Replace_{ Replace: &mgmtv1alpha1.PiiAnonymizer_Replace{ Value: &newval, @@ -160,7 +199,7 @@ func Test_getDefaultAnonymizer(t *testing.T) { t.Run("hash", func(t *testing.T) { sha256 := mgmtv1alpha1.PiiAnonymizer_Hash_HASH_TYPE_SHA512 - actual, ok, err := getDefaultAnonymizer(&mgmtv1alpha1.PiiAnonymizer{ + actual, ok, err := toPresidioAnonymizerConfig(&mgmtv1alpha1.PiiAnonymizer{ Config: &mgmtv1alpha1.PiiAnonymizer_Hash_{ Hash: &mgmtv1alpha1.PiiAnonymizer_Hash{ Algo: &sha256, @@ -176,7 +215,7 @@ func Test_getDefaultAnonymizer(t *testing.T) { maskingChar := "*" charsTomask := int32(5) fromend := false - actual, ok, err := getDefaultAnonymizer(&mgmtv1alpha1.PiiAnonymizer{ + actual, ok, err := toPresidioAnonymizerConfig(&mgmtv1alpha1.PiiAnonymizer{ Config: &mgmtv1alpha1.PiiAnonymizer_Mask_{ Mask: &mgmtv1alpha1.PiiAnonymizer_Mask{ MaskingChar: &maskingChar, @@ -191,7 +230,7 @@ func Test_getDefaultAnonymizer(t *testing.T) { }) t.Run("default", func(t *testing.T) { - actual, ok, err := getDefaultAnonymizer(nil) + actual, ok, err := toPresidioAnonymizerConfig(nil) require.NoError(t, err) require.Nil(t, actual) require.False(t, ok) diff --git a/python/src/neosync/mgmt/v1alpha1/transformer_pb2.py b/python/src/neosync/mgmt/v1alpha1/transformer_pb2.py index c003ab1038..7f8ee4933a 100644 --- a/python/src/neosync/mgmt/v1alpha1/transformer_pb2.py +++ b/python/src/neosync/mgmt/v1alpha1/transformer_pb2.py @@ -26,7 +26,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmgmt/v1alpha1/transformer.proto\x12\rmgmt.v1alpha1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x1e\n\x1cGetSystemTransformersRequest\"e\n\x1dGetSystemTransformersResponse\x12\x44\n\x0ctransformers\x18\x01 \x03(\x0b\x32 .mgmt.v1alpha1.SystemTransformerR\x0ctransformers\"_\n#GetSystemTransformerBySourceRequest\x12\x38\n\x06source\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\"j\n$GetSystemTransformerBySourceResponse\x12\x42\n\x0btransformer\x18\x01 \x01(\x0b\x32 .mgmt.v1alpha1.SystemTransformerR\x0btransformer\"L\n!GetUserDefinedTransformersRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"o\n\"GetUserDefinedTransformersResponse\x12I\n\x0ctransformers\x18\x01 \x03(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0ctransformers\"W\n$GetUserDefinedTransformerByIdRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\"p\n%GetUserDefinedTransformerByIdResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"\xb0\x02\n#CreateUserDefinedTransformerRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x38\n\x06source\x18\x05 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12O\n\x12transformer_config\x18\x06 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x11transformerConfigJ\x04\x08\x04\x10\x05\"o\n$CreateUserDefinedTransformerResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"V\n#DeleteUserDefinedTransformerRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\"&\n$DeleteUserDefinedTransformerResponse\"\xf8\x01\n#UpdateUserDefinedTransformerRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12O\n\x12transformer_config\x18\x04 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x11transformerConfig\"o\n$UpdateUserDefinedTransformerResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"\x92\x01\n!IsTransformerNameAvailableRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x44\n\x10transformer_name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x0ftransformerName\"G\n\"IsTransformerNameAvailableResponse\x12!\n\x0cis_available\x18\x01 \x01(\x08R\x0bisAvailable\"\xf5\x03\n\x16UserDefinedTransformer\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12?\n\tdata_type\x18\x05 \x01(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\x08\x64\x61taType\x12\x38\n\x06source\x18\x06 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x07 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\x12\x39\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x1d\n\naccount_id\x18\n \x01(\tR\taccountId\x12\x41\n\ndata_types\x18\x0b \x03(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\tdataTypes\"\x92\x03\n\x11SystemTransformer\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12?\n\tdata_type\x18\x03 \x01(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\x08\x64\x61taType\x12\x38\n\x06source\x18\x04 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x05 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\x12\x41\n\ndata_types\x18\x06 \x03(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\tdataTypes\x12O\n\x13supported_job_types\x18\x07 \x03(\x0e\x32\x1f.mgmt.v1alpha1.SupportedJobTypeR\x11supportedJobTypes\"\xce#\n\x11TransformerConfig\x12R\n\x15generate_email_config\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateEmailH\x00R\x13generateEmailConfig\x12U\n\x16transform_email_config\x18\x02 \x01(\x0b\x32\x1d.mgmt.v1alpha1.TransformEmailH\x00R\x14transformEmailConfig\x12O\n\x14generate_bool_config\x18\x03 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateBoolH\x00R\x12generateBoolConfig\x12\x62\n\x1bgenerate_card_number_config\x18\x04 \x01(\x0b\x32!.mgmt.v1alpha1.GenerateCardNumberH\x00R\x18generateCardNumberConfig\x12O\n\x14generate_city_config\x18\x05 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateCityH\x00R\x12generateCityConfig\x12r\n!generate_e164_phone_number_config\x18\x06 \x01(\x0b\x32&.mgmt.v1alpha1.GenerateE164PhoneNumberH\x00R\x1dgenerateE164PhoneNumberConfig\x12_\n\x1agenerate_first_name_config\x18\x07 \x01(\x0b\x32 .mgmt.v1alpha1.GenerateFirstNameH\x00R\x17generateFirstNameConfig\x12X\n\x17generate_float64_config\x18\x08 \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateFloat64H\x00R\x15generateFloat64Config\x12\x65\n\x1cgenerate_full_address_config\x18\t \x01(\x0b\x32\".mgmt.v1alpha1.GenerateFullAddressH\x00R\x19generateFullAddressConfig\x12\\\n\x19generate_full_name_config\x18\n \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateFullNameH\x00R\x16generateFullNameConfig\x12U\n\x16generate_gender_config\x18\x0b \x01(\x0b\x32\x1d.mgmt.v1alpha1.GenerateGenderH\x00R\x14generateGenderConfig\x12u\n\"generate_int64_phone_number_config\x18\x0c \x01(\x0b\x32\'.mgmt.v1alpha1.GenerateInt64PhoneNumberH\x00R\x1egenerateInt64PhoneNumberConfig\x12R\n\x15generate_int64_config\x18\r \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateInt64H\x00R\x13generateInt64Config\x12\\\n\x19generate_last_name_config\x18\x0e \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateLastNameH\x00R\x16generateLastNameConfig\x12\x61\n\x1agenerate_sha256hash_config\x18\x0f \x01(\x0b\x32!.mgmt.v1alpha1.GenerateSha256HashH\x00R\x18generateSha256hashConfig\x12L\n\x13generate_ssn_config\x18\x10 \x01(\x0b\x32\x1a.mgmt.v1alpha1.GenerateSSNH\x00R\x11generateSsnConfig\x12R\n\x15generate_state_config\x18\x11 \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateStateH\x00R\x13generateStateConfig\x12k\n\x1egenerate_street_address_config\x18\x12 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateStreetAddressH\x00R\x1bgenerateStreetAddressConfig\x12x\n#generate_string_phone_number_config\x18\x13 \x01(\x0b\x32(.mgmt.v1alpha1.GenerateStringPhoneNumberH\x00R\x1fgenerateStringPhoneNumberConfig\x12U\n\x16generate_string_config\x18\x14 \x01(\x0b\x32\x1d.mgmt.v1alpha1.GenerateStringH\x00R\x14generateStringConfig\x12j\n\x1dgenerate_unixtimestamp_config\x18\x15 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateUnixTimestampH\x00R\x1bgenerateUnixtimestampConfig\x12[\n\x18generate_username_config\x18\x16 \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateUsernameH\x00R\x16generateUsernameConfig\x12g\n\x1cgenerate_utctimestamp_config\x18\x17 \x01(\x0b\x32#.mgmt.v1alpha1.GenerateUtcTimestampH\x00R\x1agenerateUtctimestampConfig\x12O\n\x14generate_uuid_config\x18\x18 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateUuidH\x00R\x12generateUuidConfig\x12X\n\x17generate_zipcode_config\x18\x19 \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateZipcodeH\x00R\x15generateZipcodeConfig\x12u\n\"transform_e164_phone_number_config\x18\x1a \x01(\x0b\x32\'.mgmt.v1alpha1.TransformE164PhoneNumberH\x00R\x1etransformE164PhoneNumberConfig\x12\x62\n\x1btransform_first_name_config\x18\x1b \x01(\x0b\x32!.mgmt.v1alpha1.TransformFirstNameH\x00R\x18transformFirstNameConfig\x12[\n\x18transform_float64_config\x18\x1c \x01(\x0b\x32\x1f.mgmt.v1alpha1.TransformFloat64H\x00R\x16transformFloat64Config\x12_\n\x1atransform_full_name_config\x18\x1d \x01(\x0b\x32 .mgmt.v1alpha1.TransformFullNameH\x00R\x17transformFullNameConfig\x12x\n#transform_int64_phone_number_config\x18\x1e \x01(\x0b\x32(.mgmt.v1alpha1.TransformInt64PhoneNumberH\x00R\x1ftransformInt64PhoneNumberConfig\x12U\n\x16transform_int64_config\x18\x1f \x01(\x0b\x32\x1d.mgmt.v1alpha1.TransformInt64H\x00R\x14transformInt64Config\x12_\n\x1atransform_last_name_config\x18 \x01(\x0b\x32 .mgmt.v1alpha1.TransformLastNameH\x00R\x17transformLastNameConfig\x12h\n\x1dtransform_phone_number_config\x18! \x01(\x0b\x32#.mgmt.v1alpha1.TransformPhoneNumberH\x00R\x1atransformPhoneNumberConfig\x12X\n\x17transform_string_config\x18\" \x01(\x0b\x32\x1e.mgmt.v1alpha1.TransformStringH\x00R\x15transformStringConfig\x12K\n\x12passthrough_config\x18# \x01(\x0b\x32\x1a.mgmt.v1alpha1.PassthroughH\x00R\x11passthroughConfig\x12\x35\n\nnullconfig\x18$ \x01(\x0b\x32\x13.mgmt.v1alpha1.NullH\x00R\nnullconfig\x12t\n\x1fuser_defined_transformer_config\x18% \x01(\x0b\x32+.mgmt.v1alpha1.UserDefinedTransformerConfigH\x00R\x1cuserDefinedTransformerConfig\x12X\n\x17generate_default_config\x18& \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateDefaultH\x00R\x15generateDefaultConfig\x12\x64\n\x1btransform_javascript_config\x18\' \x01(\x0b\x32\".mgmt.v1alpha1.TransformJavascriptH\x00R\x19transformJavascriptConfig\x12\x64\n\x1bgenerate_categorical_config\x18( \x01(\x0b\x32\".mgmt.v1alpha1.GenerateCategoricalH\x00R\x19generateCategoricalConfig\x12z\n#transform_character_scramble_config\x18) \x01(\x0b\x32).mgmt.v1alpha1.TransformCharacterScrambleH\x00R transformCharacterScrambleConfig\x12\x61\n\x1agenerate_javascript_config\x18* \x01(\x0b\x32!.mgmt.v1alpha1.GenerateJavascriptH\x00R\x18generateJavascriptConfig\x12X\n\x17generate_country_config\x18+ \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateCountryH\x00R\x15generateCountryConfig\x12\\\n\x19transform_pii_text_config\x18, \x01(\x0b\x32\x1f.mgmt.v1alpha1.TransformPiiTextH\x00R\x16transformPiiTextConfig\x12h\n\x1dgenerate_business_name_config\x18- \x01(\x0b\x32#.mgmt.v1alpha1.GenerateBusinessNameH\x00R\x1agenerateBusinessNameConfig\x12_\n\x1agenerate_ip_address_config\x18. \x01(\x0b\x32 .mgmt.v1alpha1.GenerateIpAddressH\x00R\x17generateIpAddressConfig\x12R\n\x15transform_uuid_config\x18/ \x01(\x0b\x32\x1c.mgmt.v1alpha1.TransformUuidH\x00R\x13transformUuidConfigB\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"\xf6\x02\n\x10TransformPiiText\x12\x38\n\x0fscore_threshold\x18\x01 \x01(\x02\x42\x0f\xbaH\x0c\n\n\x1d\x00\x00\x80?-\x00\x00\x00\x00R\x0escoreThreshold\x12K\n\x12\x64\x65\x66\x61ult_anonymizer\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.PiiAnonymizerR\x11\x64\x65\x66\x61ultAnonymizer\x12K\n\x10\x64\x65ny_recognizers\x18\x03 \x03(\x0b\x32 .mgmt.v1alpha1.PiiDenyRecognizerR\x0f\x64\x65nyRecognizers\x12\x37\n\x10\x61llowed_entities\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\x0f\x61llowedEntities\x12\'\n\x0f\x61llowed_phrases\x18\x05 \x03(\tR\x0e\x61llowedPhrases\x12\x1f\n\x08language\x18\x06 \x01(\tH\x00R\x08language\x88\x01\x01\x42\x0b\n\t_language\"p\n\x11PiiDenyRecognizer\x12.\n\x04name\x18\x01 \x01(\tB\x1a\xbaH\x17r\x15\x32\x13^[a-z0-9-_]{1,100}$R\x04name\x12+\n\ndeny_words\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\tdenyWords\"\xad\x05\n\rPiiAnonymizer\x12@\n\x07replace\x18\x01 \x01(\x0b\x32$.mgmt.v1alpha1.PiiAnonymizer.ReplaceH\x00R\x07replace\x12=\n\x06redact\x18\x02 \x01(\x0b\x32#.mgmt.v1alpha1.PiiAnonymizer.RedactH\x00R\x06redact\x12\x37\n\x04mask\x18\x03 \x01(\x0b\x32!.mgmt.v1alpha1.PiiAnonymizer.MaskH\x00R\x04mask\x12\x37\n\x04hash\x18\x04 \x01(\x0b\x32!.mgmt.v1alpha1.PiiAnonymizer.HashH\x00R\x04hash\x1a.\n\x07Replace\x12\x19\n\x05value\x18\x01 \x01(\tH\x00R\x05value\x88\x01\x01\x42\x08\n\x06_value\x1a\x08\n\x06Redact\x1a\xa7\x01\n\x04Mask\x12&\n\x0cmasking_char\x18\x01 \x01(\tH\x00R\x0bmaskingChar\x88\x01\x01\x12\'\n\rchars_to_mask\x18\x02 \x01(\x05H\x01R\x0b\x63harsToMask\x88\x01\x01\x12\x1e\n\x08\x66rom_end\x18\x03 \x01(\x08H\x02R\x07\x66romEnd\x88\x01\x01\x42\x0f\n\r_masking_charB\x10\n\x0e_chars_to_maskB\x0b\n\t_from_end\x1a\xba\x01\n\x04Hash\x12\x43\n\x04\x61lgo\x18\x01 \x01(\x0e\x32*.mgmt.v1alpha1.PiiAnonymizer.Hash.HashTypeH\x00R\x04\x61lgo\x88\x01\x01\"d\n\x08HashType\x12\x19\n\x15HASH_TYPE_UNSPECIFIED\x10\x00\x12\x11\n\rHASH_TYPE_MD5\x10\x01\x12\x14\n\x10HASH_TYPE_SHA256\x10\x02\x12\x14\n\x10HASH_TYPE_SHA512\x10\x03\x42\x07\n\x05_algoB\x08\n\x06\x63onfig\"d\n\rGenerateEmail\x12\x44\n\nemail_type\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.GenerateEmailTypeH\x00R\temailType\x88\x01\x01\x42\r\n\x0b_email_type\"\x87\x03\n\x0eTransformEmail\x12,\n\x0fpreserve_domain\x18\x01 \x01(\x08H\x00R\x0epreserveDomain\x88\x01\x01\x12,\n\x0fpreserve_length\x18\x02 \x01(\x08H\x01R\x0epreserveLength\x88\x01\x01\x12)\n\x10\x65xcluded_domains\x18\x03 \x03(\tR\x0f\x65xcludedDomains\x12\x44\n\nemail_type\x18\x04 \x01(\x0e\x32 .mgmt.v1alpha1.GenerateEmailTypeH\x02R\temailType\x88\x01\x01\x12X\n\x14invalid_email_action\x18\x05 \x01(\x0e\x32!.mgmt.v1alpha1.InvalidEmailActionH\x03R\x12invalidEmailAction\x88\x01\x01\x42\x12\n\x10_preserve_domainB\x12\n\x10_preserve_lengthB\r\n\x0b_email_typeB\x17\n\x15_invalid_email_action\"\x0e\n\x0cGenerateBool\"G\n\x12GenerateCardNumber\x12\"\n\nvalid_luhn\x18\x01 \x01(\x08H\x00R\tvalidLuhn\x88\x01\x01\x42\r\n\x0b_valid_luhn\"\x0e\n\x0cGenerateCity\"\x11\n\x0fGenerateDefault\"W\n\x17GenerateE164PhoneNumber\x12\x15\n\x03min\x18\x01 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"\x13\n\x11GenerateFirstName\"\xbf\x01\n\x0fGenerateFloat64\x12*\n\x0erandomize_sign\x18\x01 \x01(\x08H\x00R\rrandomizeSign\x88\x01\x01\x12\x15\n\x03min\x18\x02 \x01(\x01H\x01R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x01H\x02R\x03max\x88\x01\x01\x12!\n\tprecision\x18\x04 \x01(\x03H\x03R\tprecision\x88\x01\x01\x42\x11\n\x0f_randomize_signB\x06\n\x04_minB\x06\n\x04_maxB\x0c\n\n_precision\"\x15\n\x13GenerateFullAddress\"\x12\n\x10GenerateFullName\"D\n\x0eGenerateGender\x12#\n\nabbreviate\x18\x01 \x01(\x08H\x00R\nabbreviate\x88\x01\x01\x42\r\n\x0b_abbreviate\"\x1a\n\x18GenerateInt64PhoneNumber\"\x8c\x01\n\rGenerateInt64\x12*\n\x0erandomize_sign\x18\x01 \x01(\x08H\x00R\rrandomizeSign\x88\x01\x01\x12\x15\n\x03min\x18\x02 \x01(\x03H\x01R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x03H\x02R\x03max\x88\x01\x01\x42\x11\n\x0f_randomize_signB\x06\n\x04_minB\x06\n\x04_max\"\x12\n\x10GenerateLastName\"\x14\n\x12GenerateSha256Hash\"\r\n\x0bGenerateSSN\"Y\n\rGenerateState\x12\x31\n\x12generate_full_name\x18\x01 \x01(\x08H\x00R\x10generateFullName\x88\x01\x01\x42\x15\n\x13_generate_full_name\"\x17\n\x15GenerateStreetAddress\"Y\n\x19GenerateStringPhoneNumber\x12\x15\n\x03min\x18\x02 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"N\n\x0eGenerateString\x12\x15\n\x03min\x18\x01 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"\x17\n\x15GenerateUnixTimestamp\"\x12\n\x10GenerateUsername\"\x16\n\x14GenerateUtcTimestamp\"P\n\x0cGenerateUuid\x12,\n\x0finclude_hyphens\x18\x01 \x01(\x08H\x00R\x0eincludeHyphens\x88\x01\x01\x42\x12\n\x10_include_hyphens\"\x11\n\x0fGenerateZipcode\"\\\n\x18TransformE164PhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"V\n\x12TransformFirstName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\xc4\x01\n\x10TransformFloat64\x12;\n\x17randomization_range_min\x18\x01 \x01(\x01H\x00R\x15randomizationRangeMin\x88\x01\x01\x12;\n\x17randomization_range_max\x18\x02 \x01(\x01H\x01R\x15randomizationRangeMax\x88\x01\x01\x42\x1a\n\x18_randomization_range_minB\x1a\n\x18_randomization_range_max\"U\n\x11TransformFullName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"]\n\x19TransformInt64PhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\xc2\x01\n\x0eTransformInt64\x12;\n\x17randomization_range_min\x18\x01 \x01(\x03H\x00R\x15randomizationRangeMin\x88\x01\x01\x12;\n\x17randomization_range_max\x18\x02 \x01(\x03H\x01R\x15randomizationRangeMax\x88\x01\x01\x42\x1a\n\x18_randomization_range_minB\x1a\n\x18_randomization_range_max\"U\n\x11TransformLastName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"X\n\x14TransformPhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"S\n\x0fTransformString\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\r\n\x0bPassthrough\"\x06\n\x04Null\")\n\x13TransformJavascript\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\"8\n\x1cUserDefinedTransformerConfig\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"F\n!ValidateUserJavascriptCodeRequest\x12\x1b\n\x04\x63ode\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04\x63odeJ\x04\x08\x01\x10\x02\":\n\"ValidateUserJavascriptCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"I\n\x13GenerateCategorical\x12#\n\ncategories\x18\x01 \x01(\tH\x00R\ncategories\x88\x01\x01\x42\r\n\x0b_categories\"i\n\x1aTransformCharacterScramble\x12\x33\n\x13user_provided_regex\x18\x01 \x01(\tH\x00R\x11userProvidedRegex\x88\x01\x01\x42\x16\n\x14_user_provided_regex\"(\n\x12GenerateJavascript\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\"T\n\x1cValidateUserRegexCodeRequest\x12.\n\x13user_provided_regex\x18\x02 \x01(\tR\x11userProvidedRegexJ\x04\x08\x01\x10\x02\"5\n\x1dValidateUserRegexCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"[\n\x0fGenerateCountry\x12\x31\n\x12generate_full_name\x18\x01 \x01(\x08H\x00R\x10generateFullName\x88\x01\x01\x42\x15\n\x13_generate_full_name\"I\n\x1eGetTransformPiiEntitiesRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"=\n\x1fGetTransformPiiEntitiesResponse\x12\x1a\n\x08\x65ntities\x18\x01 \x03(\tR\x08\x65ntities\"\x16\n\x14GenerateBusinessName\"c\n\x11GenerateIpAddress\x12\x42\n\x07ip_type\x18\x01 \x01(\x0e\x32$.mgmt.v1alpha1.GenerateIpAddressTypeH\x00R\x06ipType\x88\x01\x01\x42\n\n\x08_ip_type\"\x0f\n\rTransformUuid*\x87\x11\n\x11TransformerSource\x12\"\n\x1eTRANSFORMER_SOURCE_UNSPECIFIED\x10\x00\x12\"\n\x1eTRANSFORMER_SOURCE_PASSTHROUGH\x10\x01\x12\'\n#TRANSFORMER_SOURCE_GENERATE_DEFAULT\x10\x02\x12+\n\'TRANSFORMER_SOURCE_TRANSFORM_JAVASCRIPT\x10\x03\x12%\n!TRANSFORMER_SOURCE_GENERATE_EMAIL\x10\x04\x12&\n\"TRANSFORMER_SOURCE_TRANSFORM_EMAIL\x10\x05\x12$\n TRANSFORMER_SOURCE_GENERATE_BOOL\x10\x06\x12+\n\'TRANSFORMER_SOURCE_GENERATE_CARD_NUMBER\x10\x07\x12$\n TRANSFORMER_SOURCE_GENERATE_CITY\x10\x08\x12\x31\n-TRANSFORMER_SOURCE_GENERATE_E164_PHONE_NUMBER\x10\t\x12*\n&TRANSFORMER_SOURCE_GENERATE_FIRST_NAME\x10\n\x12\'\n#TRANSFORMER_SOURCE_GENERATE_FLOAT64\x10\x0b\x12,\n(TRANSFORMER_SOURCE_GENERATE_FULL_ADDRESS\x10\x0c\x12)\n%TRANSFORMER_SOURCE_GENERATE_FULL_NAME\x10\r\x12&\n\"TRANSFORMER_SOURCE_GENERATE_GENDER\x10\x0e\x12\x32\n.TRANSFORMER_SOURCE_GENERATE_INT64_PHONE_NUMBER\x10\x0f\x12%\n!TRANSFORMER_SOURCE_GENERATE_INT64\x10\x10\x12,\n(TRANSFORMER_SOURCE_GENERATE_RANDOM_INT64\x10\x11\x12)\n%TRANSFORMER_SOURCE_GENERATE_LAST_NAME\x10\x12\x12*\n&TRANSFORMER_SOURCE_GENERATE_SHA256HASH\x10\x13\x12#\n\x1fTRANSFORMER_SOURCE_GENERATE_SSN\x10\x14\x12%\n!TRANSFORMER_SOURCE_GENERATE_STATE\x10\x15\x12.\n*TRANSFORMER_SOURCE_GENERATE_STREET_ADDRESS\x10\x16\x12\x33\n/TRANSFORMER_SOURCE_GENERATE_STRING_PHONE_NUMBER\x10\x17\x12&\n\"TRANSFORMER_SOURCE_GENERATE_STRING\x10\x18\x12-\n)TRANSFORMER_SOURCE_GENERATE_RANDOM_STRING\x10\x19\x12-\n)TRANSFORMER_SOURCE_GENERATE_UNIXTIMESTAMP\x10\x1a\x12(\n$TRANSFORMER_SOURCE_GENERATE_USERNAME\x10\x1b\x12,\n(TRANSFORMER_SOURCE_GENERATE_UTCTIMESTAMP\x10\x1c\x12$\n TRANSFORMER_SOURCE_GENERATE_UUID\x10\x1d\x12\'\n#TRANSFORMER_SOURCE_GENERATE_ZIPCODE\x10\x1e\x12\x32\n.TRANSFORMER_SOURCE_TRANSFORM_E164_PHONE_NUMBER\x10\x1f\x12+\n\'TRANSFORMER_SOURCE_TRANSFORM_FIRST_NAME\x10 \x12(\n$TRANSFORMER_SOURCE_TRANSFORM_FLOAT64\x10!\x12*\n&TRANSFORMER_SOURCE_TRANSFORM_FULL_NAME\x10\"\x12\x33\n/TRANSFORMER_SOURCE_TRANSFORM_INT64_PHONE_NUMBER\x10#\x12&\n\"TRANSFORMER_SOURCE_TRANSFORM_INT64\x10$\x12*\n&TRANSFORMER_SOURCE_TRANSFORM_LAST_NAME\x10%\x12-\n)TRANSFORMER_SOURCE_TRANSFORM_PHONE_NUMBER\x10&\x12\'\n#TRANSFORMER_SOURCE_TRANSFORM_STRING\x10\'\x12$\n TRANSFORMER_SOURCE_GENERATE_NULL\x10(\x12+\n\'TRANSFORMER_SOURCE_GENERATE_CATEGORICAL\x10*\x12\x33\n/TRANSFORMER_SOURCE_TRANSFORM_CHARACTER_SCRAMBLE\x10+\x12#\n\x1fTRANSFORMER_SOURCE_USER_DEFINED\x10,\x12*\n&TRANSFORMER_SOURCE_GENERATE_JAVASCRIPT\x10-\x12\'\n#TRANSFORMER_SOURCE_GENERATE_COUNTRY\x10.\x12)\n%TRANSFORMER_SOURCE_TRANSFORM_PII_TEXT\x10/\x12-\n)TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME\x10\x30\x12*\n&TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS\x10\x31\x12%\n!TRANSFORMER_SOURCE_TRANSFORM_UUID\x10\x32*\xc4\x02\n\x13TransformerDataType\x12%\n!TRANSFORMER_DATA_TYPE_UNSPECIFIED\x10\x00\x12 \n\x1cTRANSFORMER_DATA_TYPE_STRING\x10\x01\x12\x1f\n\x1bTRANSFORMER_DATA_TYPE_INT64\x10\x02\x12!\n\x1dTRANSFORMER_DATA_TYPE_BOOLEAN\x10\x03\x12!\n\x1dTRANSFORMER_DATA_TYPE_FLOAT64\x10\x04\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_NULL\x10\x05\x12\x1d\n\x19TRANSFORMER_DATA_TYPE_ANY\x10\x06\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_TIME\x10\x07\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_UUID\x10\x08*t\n\x10SupportedJobType\x12\"\n\x1eSUPPORTED_JOB_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17SUPPORTED_JOB_TYPE_SYNC\x10\x01\x12\x1f\n\x1bSUPPORTED_JOB_TYPE_GENERATE\x10\x02*{\n\x11GenerateEmailType\x12#\n\x1fGENERATE_EMAIL_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bGENERATE_EMAIL_TYPE_UUID_V4\x10\x01\x12 \n\x1cGENERATE_EMAIL_TYPE_FULLNAME\x10\x02*\xc3\x01\n\x12InvalidEmailAction\x12$\n INVALID_EMAIL_ACTION_UNSPECIFIED\x10\x00\x12\x1f\n\x1bINVALID_EMAIL_ACTION_REJECT\x10\x01\x12\x1d\n\x19INVALID_EMAIL_ACTION_NULL\x10\x02\x12$\n INVALID_EMAIL_ACTION_PASSTHROUGH\x10\x03\x12!\n\x1dINVALID_EMAIL_ACTION_GENERATE\x10\x04*\x8c\x03\n\x15GenerateIpAddressType\x12(\n$GENERATE_IP_ADDRESS_TYPE_UNSPECIFIED\x10\x00\x12&\n\"GENERATE_IP_ADDRESS_TYPE_V4_PUBLIC\x10\x01\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_A\x10\x02\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_B\x10\x03\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_C\x10\x04\x12*\n&GENERATE_IP_ADDRESS_TYPE_V4_LINK_LOCAL\x10\x05\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_MULTICAST\x10\x06\x12(\n$GENERATE_IP_ADDRESS_TYPE_V4_LOOPBACK\x10\x07\x12\x1f\n\x1bGENERATE_IP_ADDRESS_TYPE_V6\x10\x08\x32\xd1\x0b\n\x13TransformersService\x12t\n\x15GetSystemTransformers\x12+.mgmt.v1alpha1.GetSystemTransformersRequest\x1a,.mgmt.v1alpha1.GetSystemTransformersResponse\"\x00\x12\x89\x01\n\x1cGetSystemTransformerBySource\x12\x32.mgmt.v1alpha1.GetSystemTransformerBySourceRequest\x1a\x33.mgmt.v1alpha1.GetSystemTransformerBySourceResponse\"\x00\x12\x83\x01\n\x1aGetUserDefinedTransformers\x12\x30.mgmt.v1alpha1.GetUserDefinedTransformersRequest\x1a\x31.mgmt.v1alpha1.GetUserDefinedTransformersResponse\"\x00\x12\x8c\x01\n\x1dGetUserDefinedTransformerById\x12\x33.mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest\x1a\x34.mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse\"\x00\x12\x89\x01\n\x1c\x43reateUserDefinedTransformer\x12\x32.mgmt.v1alpha1.CreateUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.CreateUserDefinedTransformerResponse\"\x00\x12\x89\x01\n\x1c\x44\x65leteUserDefinedTransformer\x12\x32.mgmt.v1alpha1.DeleteUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.DeleteUserDefinedTransformerResponse\"\x00\x12\x89\x01\n\x1cUpdateUserDefinedTransformer\x12\x32.mgmt.v1alpha1.UpdateUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.UpdateUserDefinedTransformerResponse\"\x00\x12\x83\x01\n\x1aIsTransformerNameAvailable\x12\x30.mgmt.v1alpha1.IsTransformerNameAvailableRequest\x1a\x31.mgmt.v1alpha1.IsTransformerNameAvailableResponse\"\x00\x12\x83\x01\n\x1aValidateUserJavascriptCode\x12\x30.mgmt.v1alpha1.ValidateUserJavascriptCodeRequest\x1a\x31.mgmt.v1alpha1.ValidateUserJavascriptCodeResponse\"\x00\x12t\n\x15ValidateUserRegexCode\x12+.mgmt.v1alpha1.ValidateUserRegexCodeRequest\x1a,.mgmt.v1alpha1.ValidateUserRegexCodeResponse\"\x00\x12}\n\x17GetTransformPiiEntities\x12-.mgmt.v1alpha1.GetTransformPiiEntitiesRequest\x1a..mgmt.v1alpha1.GetTransformPiiEntitiesResponse\"\x03\x90\x02\x01\x42\xcc\x01\n\x11\x63om.mgmt.v1alpha1B\x10TransformerProtoP\x01ZPgithub.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1;mgmtv1alpha1\xa2\x02\x03MXX\xaa\x02\rMgmt.V1alpha1\xca\x02\rMgmt\\V1alpha1\xe2\x02\x19Mgmt\\V1alpha1\\GPBMetadata\xea\x02\x0eMgmt::V1alpha1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmgmt/v1alpha1/transformer.proto\x12\rmgmt.v1alpha1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x1e\n\x1cGetSystemTransformersRequest\"e\n\x1dGetSystemTransformersResponse\x12\x44\n\x0ctransformers\x18\x01 \x03(\x0b\x32 .mgmt.v1alpha1.SystemTransformerR\x0ctransformers\"_\n#GetSystemTransformerBySourceRequest\x12\x38\n\x06source\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\"j\n$GetSystemTransformerBySourceResponse\x12\x42\n\x0btransformer\x18\x01 \x01(\x0b\x32 .mgmt.v1alpha1.SystemTransformerR\x0btransformer\"L\n!GetUserDefinedTransformersRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"o\n\"GetUserDefinedTransformersResponse\x12I\n\x0ctransformers\x18\x01 \x03(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0ctransformers\"W\n$GetUserDefinedTransformerByIdRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\"p\n%GetUserDefinedTransformerByIdResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"\xb0\x02\n#CreateUserDefinedTransformerRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x38\n\x06source\x18\x05 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12O\n\x12transformer_config\x18\x06 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x11transformerConfigJ\x04\x08\x04\x10\x05\"o\n$CreateUserDefinedTransformerResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"V\n#DeleteUserDefinedTransformerRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\"&\n$DeleteUserDefinedTransformerResponse\"\xf8\x01\n#UpdateUserDefinedTransformerRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12O\n\x12transformer_config\x18\x04 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x11transformerConfig\"o\n$UpdateUserDefinedTransformerResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"\x92\x01\n!IsTransformerNameAvailableRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x44\n\x10transformer_name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x0ftransformerName\"G\n\"IsTransformerNameAvailableResponse\x12!\n\x0cis_available\x18\x01 \x01(\x08R\x0bisAvailable\"\xf5\x03\n\x16UserDefinedTransformer\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12?\n\tdata_type\x18\x05 \x01(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\x08\x64\x61taType\x12\x38\n\x06source\x18\x06 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x07 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\x12\x39\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x1d\n\naccount_id\x18\n \x01(\tR\taccountId\x12\x41\n\ndata_types\x18\x0b \x03(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\tdataTypes\"\x92\x03\n\x11SystemTransformer\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12?\n\tdata_type\x18\x03 \x01(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\x08\x64\x61taType\x12\x38\n\x06source\x18\x04 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x05 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\x12\x41\n\ndata_types\x18\x06 \x03(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\tdataTypes\x12O\n\x13supported_job_types\x18\x07 \x03(\x0e\x32\x1f.mgmt.v1alpha1.SupportedJobTypeR\x11supportedJobTypes\"\xce#\n\x11TransformerConfig\x12R\n\x15generate_email_config\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateEmailH\x00R\x13generateEmailConfig\x12U\n\x16transform_email_config\x18\x02 \x01(\x0b\x32\x1d.mgmt.v1alpha1.TransformEmailH\x00R\x14transformEmailConfig\x12O\n\x14generate_bool_config\x18\x03 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateBoolH\x00R\x12generateBoolConfig\x12\x62\n\x1bgenerate_card_number_config\x18\x04 \x01(\x0b\x32!.mgmt.v1alpha1.GenerateCardNumberH\x00R\x18generateCardNumberConfig\x12O\n\x14generate_city_config\x18\x05 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateCityH\x00R\x12generateCityConfig\x12r\n!generate_e164_phone_number_config\x18\x06 \x01(\x0b\x32&.mgmt.v1alpha1.GenerateE164PhoneNumberH\x00R\x1dgenerateE164PhoneNumberConfig\x12_\n\x1agenerate_first_name_config\x18\x07 \x01(\x0b\x32 .mgmt.v1alpha1.GenerateFirstNameH\x00R\x17generateFirstNameConfig\x12X\n\x17generate_float64_config\x18\x08 \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateFloat64H\x00R\x15generateFloat64Config\x12\x65\n\x1cgenerate_full_address_config\x18\t \x01(\x0b\x32\".mgmt.v1alpha1.GenerateFullAddressH\x00R\x19generateFullAddressConfig\x12\\\n\x19generate_full_name_config\x18\n \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateFullNameH\x00R\x16generateFullNameConfig\x12U\n\x16generate_gender_config\x18\x0b \x01(\x0b\x32\x1d.mgmt.v1alpha1.GenerateGenderH\x00R\x14generateGenderConfig\x12u\n\"generate_int64_phone_number_config\x18\x0c \x01(\x0b\x32\'.mgmt.v1alpha1.GenerateInt64PhoneNumberH\x00R\x1egenerateInt64PhoneNumberConfig\x12R\n\x15generate_int64_config\x18\r \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateInt64H\x00R\x13generateInt64Config\x12\\\n\x19generate_last_name_config\x18\x0e \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateLastNameH\x00R\x16generateLastNameConfig\x12\x61\n\x1agenerate_sha256hash_config\x18\x0f \x01(\x0b\x32!.mgmt.v1alpha1.GenerateSha256HashH\x00R\x18generateSha256hashConfig\x12L\n\x13generate_ssn_config\x18\x10 \x01(\x0b\x32\x1a.mgmt.v1alpha1.GenerateSSNH\x00R\x11generateSsnConfig\x12R\n\x15generate_state_config\x18\x11 \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateStateH\x00R\x13generateStateConfig\x12k\n\x1egenerate_street_address_config\x18\x12 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateStreetAddressH\x00R\x1bgenerateStreetAddressConfig\x12x\n#generate_string_phone_number_config\x18\x13 \x01(\x0b\x32(.mgmt.v1alpha1.GenerateStringPhoneNumberH\x00R\x1fgenerateStringPhoneNumberConfig\x12U\n\x16generate_string_config\x18\x14 \x01(\x0b\x32\x1d.mgmt.v1alpha1.GenerateStringH\x00R\x14generateStringConfig\x12j\n\x1dgenerate_unixtimestamp_config\x18\x15 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateUnixTimestampH\x00R\x1bgenerateUnixtimestampConfig\x12[\n\x18generate_username_config\x18\x16 \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateUsernameH\x00R\x16generateUsernameConfig\x12g\n\x1cgenerate_utctimestamp_config\x18\x17 \x01(\x0b\x32#.mgmt.v1alpha1.GenerateUtcTimestampH\x00R\x1agenerateUtctimestampConfig\x12O\n\x14generate_uuid_config\x18\x18 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateUuidH\x00R\x12generateUuidConfig\x12X\n\x17generate_zipcode_config\x18\x19 \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateZipcodeH\x00R\x15generateZipcodeConfig\x12u\n\"transform_e164_phone_number_config\x18\x1a \x01(\x0b\x32\'.mgmt.v1alpha1.TransformE164PhoneNumberH\x00R\x1etransformE164PhoneNumberConfig\x12\x62\n\x1btransform_first_name_config\x18\x1b \x01(\x0b\x32!.mgmt.v1alpha1.TransformFirstNameH\x00R\x18transformFirstNameConfig\x12[\n\x18transform_float64_config\x18\x1c \x01(\x0b\x32\x1f.mgmt.v1alpha1.TransformFloat64H\x00R\x16transformFloat64Config\x12_\n\x1atransform_full_name_config\x18\x1d \x01(\x0b\x32 .mgmt.v1alpha1.TransformFullNameH\x00R\x17transformFullNameConfig\x12x\n#transform_int64_phone_number_config\x18\x1e \x01(\x0b\x32(.mgmt.v1alpha1.TransformInt64PhoneNumberH\x00R\x1ftransformInt64PhoneNumberConfig\x12U\n\x16transform_int64_config\x18\x1f \x01(\x0b\x32\x1d.mgmt.v1alpha1.TransformInt64H\x00R\x14transformInt64Config\x12_\n\x1atransform_last_name_config\x18 \x01(\x0b\x32 .mgmt.v1alpha1.TransformLastNameH\x00R\x17transformLastNameConfig\x12h\n\x1dtransform_phone_number_config\x18! \x01(\x0b\x32#.mgmt.v1alpha1.TransformPhoneNumberH\x00R\x1atransformPhoneNumberConfig\x12X\n\x17transform_string_config\x18\" \x01(\x0b\x32\x1e.mgmt.v1alpha1.TransformStringH\x00R\x15transformStringConfig\x12K\n\x12passthrough_config\x18# \x01(\x0b\x32\x1a.mgmt.v1alpha1.PassthroughH\x00R\x11passthroughConfig\x12\x35\n\nnullconfig\x18$ \x01(\x0b\x32\x13.mgmt.v1alpha1.NullH\x00R\nnullconfig\x12t\n\x1fuser_defined_transformer_config\x18% \x01(\x0b\x32+.mgmt.v1alpha1.UserDefinedTransformerConfigH\x00R\x1cuserDefinedTransformerConfig\x12X\n\x17generate_default_config\x18& \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateDefaultH\x00R\x15generateDefaultConfig\x12\x64\n\x1btransform_javascript_config\x18\' \x01(\x0b\x32\".mgmt.v1alpha1.TransformJavascriptH\x00R\x19transformJavascriptConfig\x12\x64\n\x1bgenerate_categorical_config\x18( \x01(\x0b\x32\".mgmt.v1alpha1.GenerateCategoricalH\x00R\x19generateCategoricalConfig\x12z\n#transform_character_scramble_config\x18) \x01(\x0b\x32).mgmt.v1alpha1.TransformCharacterScrambleH\x00R transformCharacterScrambleConfig\x12\x61\n\x1agenerate_javascript_config\x18* \x01(\x0b\x32!.mgmt.v1alpha1.GenerateJavascriptH\x00R\x18generateJavascriptConfig\x12X\n\x17generate_country_config\x18+ \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateCountryH\x00R\x15generateCountryConfig\x12\\\n\x19transform_pii_text_config\x18, \x01(\x0b\x32\x1f.mgmt.v1alpha1.TransformPiiTextH\x00R\x16transformPiiTextConfig\x12h\n\x1dgenerate_business_name_config\x18- \x01(\x0b\x32#.mgmt.v1alpha1.GenerateBusinessNameH\x00R\x1agenerateBusinessNameConfig\x12_\n\x1agenerate_ip_address_config\x18. \x01(\x0b\x32 .mgmt.v1alpha1.GenerateIpAddressH\x00R\x17generateIpAddressConfig\x12R\n\x15transform_uuid_config\x18/ \x01(\x0b\x32\x1c.mgmt.v1alpha1.TransformUuidH\x00R\x13transformUuidConfigB\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"\xc1\x04\n\x10TransformPiiText\x12\x38\n\x0fscore_threshold\x18\x01 \x01(\x02\x42\x0f\xbaH\x0c\n\n\x1d\x00\x00\x80?-\x00\x00\x00\x00R\x0escoreThreshold\x12K\n\x12\x64\x65\x66\x61ult_anonymizer\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.PiiAnonymizerR\x11\x64\x65\x66\x61ultAnonymizer\x12K\n\x10\x64\x65ny_recognizers\x18\x03 \x03(\x0b\x32 .mgmt.v1alpha1.PiiDenyRecognizerR\x0f\x64\x65nyRecognizers\x12\x37\n\x10\x61llowed_entities\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\x0f\x61llowedEntities\x12\'\n\x0f\x61llowed_phrases\x18\x05 \x03(\tR\x0e\x61llowedPhrases\x12\x1f\n\x08language\x18\x06 \x01(\tH\x00R\x08language\x88\x01\x01\x12\x65\n\x12\x65ntity_anonymizers\x18\x07 \x03(\x0b\x32\x36.mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntryR\x11\x65ntityAnonymizers\x1a\x62\n\x16\x45ntityAnonymizersEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.PiiAnonymizerR\x05value:\x02\x38\x01\x42\x0b\n\t_language\"p\n\x11PiiDenyRecognizer\x12.\n\x04name\x18\x01 \x01(\tB\x1a\xbaH\x17r\x15\x32\x13^[a-z0-9-_]{1,100}$R\x04name\x12+\n\ndeny_words\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\tdenyWords\"\xad\x05\n\rPiiAnonymizer\x12@\n\x07replace\x18\x01 \x01(\x0b\x32$.mgmt.v1alpha1.PiiAnonymizer.ReplaceH\x00R\x07replace\x12=\n\x06redact\x18\x02 \x01(\x0b\x32#.mgmt.v1alpha1.PiiAnonymizer.RedactH\x00R\x06redact\x12\x37\n\x04mask\x18\x03 \x01(\x0b\x32!.mgmt.v1alpha1.PiiAnonymizer.MaskH\x00R\x04mask\x12\x37\n\x04hash\x18\x04 \x01(\x0b\x32!.mgmt.v1alpha1.PiiAnonymizer.HashH\x00R\x04hash\x1a.\n\x07Replace\x12\x19\n\x05value\x18\x01 \x01(\tH\x00R\x05value\x88\x01\x01\x42\x08\n\x06_value\x1a\x08\n\x06Redact\x1a\xa7\x01\n\x04Mask\x12&\n\x0cmasking_char\x18\x01 \x01(\tH\x00R\x0bmaskingChar\x88\x01\x01\x12\'\n\rchars_to_mask\x18\x02 \x01(\x05H\x01R\x0b\x63harsToMask\x88\x01\x01\x12\x1e\n\x08\x66rom_end\x18\x03 \x01(\x08H\x02R\x07\x66romEnd\x88\x01\x01\x42\x0f\n\r_masking_charB\x10\n\x0e_chars_to_maskB\x0b\n\t_from_end\x1a\xba\x01\n\x04Hash\x12\x43\n\x04\x61lgo\x18\x01 \x01(\x0e\x32*.mgmt.v1alpha1.PiiAnonymizer.Hash.HashTypeH\x00R\x04\x61lgo\x88\x01\x01\"d\n\x08HashType\x12\x19\n\x15HASH_TYPE_UNSPECIFIED\x10\x00\x12\x11\n\rHASH_TYPE_MD5\x10\x01\x12\x14\n\x10HASH_TYPE_SHA256\x10\x02\x12\x14\n\x10HASH_TYPE_SHA512\x10\x03\x42\x07\n\x05_algoB\x08\n\x06\x63onfig\"d\n\rGenerateEmail\x12\x44\n\nemail_type\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.GenerateEmailTypeH\x00R\temailType\x88\x01\x01\x42\r\n\x0b_email_type\"\x87\x03\n\x0eTransformEmail\x12,\n\x0fpreserve_domain\x18\x01 \x01(\x08H\x00R\x0epreserveDomain\x88\x01\x01\x12,\n\x0fpreserve_length\x18\x02 \x01(\x08H\x01R\x0epreserveLength\x88\x01\x01\x12)\n\x10\x65xcluded_domains\x18\x03 \x03(\tR\x0f\x65xcludedDomains\x12\x44\n\nemail_type\x18\x04 \x01(\x0e\x32 .mgmt.v1alpha1.GenerateEmailTypeH\x02R\temailType\x88\x01\x01\x12X\n\x14invalid_email_action\x18\x05 \x01(\x0e\x32!.mgmt.v1alpha1.InvalidEmailActionH\x03R\x12invalidEmailAction\x88\x01\x01\x42\x12\n\x10_preserve_domainB\x12\n\x10_preserve_lengthB\r\n\x0b_email_typeB\x17\n\x15_invalid_email_action\"\x0e\n\x0cGenerateBool\"G\n\x12GenerateCardNumber\x12\"\n\nvalid_luhn\x18\x01 \x01(\x08H\x00R\tvalidLuhn\x88\x01\x01\x42\r\n\x0b_valid_luhn\"\x0e\n\x0cGenerateCity\"\x11\n\x0fGenerateDefault\"W\n\x17GenerateE164PhoneNumber\x12\x15\n\x03min\x18\x01 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"\x13\n\x11GenerateFirstName\"\xbf\x01\n\x0fGenerateFloat64\x12*\n\x0erandomize_sign\x18\x01 \x01(\x08H\x00R\rrandomizeSign\x88\x01\x01\x12\x15\n\x03min\x18\x02 \x01(\x01H\x01R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x01H\x02R\x03max\x88\x01\x01\x12!\n\tprecision\x18\x04 \x01(\x03H\x03R\tprecision\x88\x01\x01\x42\x11\n\x0f_randomize_signB\x06\n\x04_minB\x06\n\x04_maxB\x0c\n\n_precision\"\x15\n\x13GenerateFullAddress\"\x12\n\x10GenerateFullName\"D\n\x0eGenerateGender\x12#\n\nabbreviate\x18\x01 \x01(\x08H\x00R\nabbreviate\x88\x01\x01\x42\r\n\x0b_abbreviate\"\x1a\n\x18GenerateInt64PhoneNumber\"\x8c\x01\n\rGenerateInt64\x12*\n\x0erandomize_sign\x18\x01 \x01(\x08H\x00R\rrandomizeSign\x88\x01\x01\x12\x15\n\x03min\x18\x02 \x01(\x03H\x01R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x03H\x02R\x03max\x88\x01\x01\x42\x11\n\x0f_randomize_signB\x06\n\x04_minB\x06\n\x04_max\"\x12\n\x10GenerateLastName\"\x14\n\x12GenerateSha256Hash\"\r\n\x0bGenerateSSN\"Y\n\rGenerateState\x12\x31\n\x12generate_full_name\x18\x01 \x01(\x08H\x00R\x10generateFullName\x88\x01\x01\x42\x15\n\x13_generate_full_name\"\x17\n\x15GenerateStreetAddress\"Y\n\x19GenerateStringPhoneNumber\x12\x15\n\x03min\x18\x02 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"N\n\x0eGenerateString\x12\x15\n\x03min\x18\x01 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"\x17\n\x15GenerateUnixTimestamp\"\x12\n\x10GenerateUsername\"\x16\n\x14GenerateUtcTimestamp\"P\n\x0cGenerateUuid\x12,\n\x0finclude_hyphens\x18\x01 \x01(\x08H\x00R\x0eincludeHyphens\x88\x01\x01\x42\x12\n\x10_include_hyphens\"\x11\n\x0fGenerateZipcode\"\\\n\x18TransformE164PhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"V\n\x12TransformFirstName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\xc4\x01\n\x10TransformFloat64\x12;\n\x17randomization_range_min\x18\x01 \x01(\x01H\x00R\x15randomizationRangeMin\x88\x01\x01\x12;\n\x17randomization_range_max\x18\x02 \x01(\x01H\x01R\x15randomizationRangeMax\x88\x01\x01\x42\x1a\n\x18_randomization_range_minB\x1a\n\x18_randomization_range_max\"U\n\x11TransformFullName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"]\n\x19TransformInt64PhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\xc2\x01\n\x0eTransformInt64\x12;\n\x17randomization_range_min\x18\x01 \x01(\x03H\x00R\x15randomizationRangeMin\x88\x01\x01\x12;\n\x17randomization_range_max\x18\x02 \x01(\x03H\x01R\x15randomizationRangeMax\x88\x01\x01\x42\x1a\n\x18_randomization_range_minB\x1a\n\x18_randomization_range_max\"U\n\x11TransformLastName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"X\n\x14TransformPhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"S\n\x0fTransformString\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\r\n\x0bPassthrough\"\x06\n\x04Null\")\n\x13TransformJavascript\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\"8\n\x1cUserDefinedTransformerConfig\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"F\n!ValidateUserJavascriptCodeRequest\x12\x1b\n\x04\x63ode\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04\x63odeJ\x04\x08\x01\x10\x02\":\n\"ValidateUserJavascriptCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"I\n\x13GenerateCategorical\x12#\n\ncategories\x18\x01 \x01(\tH\x00R\ncategories\x88\x01\x01\x42\r\n\x0b_categories\"i\n\x1aTransformCharacterScramble\x12\x33\n\x13user_provided_regex\x18\x01 \x01(\tH\x00R\x11userProvidedRegex\x88\x01\x01\x42\x16\n\x14_user_provided_regex\"(\n\x12GenerateJavascript\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\"T\n\x1cValidateUserRegexCodeRequest\x12.\n\x13user_provided_regex\x18\x02 \x01(\tR\x11userProvidedRegexJ\x04\x08\x01\x10\x02\"5\n\x1dValidateUserRegexCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"[\n\x0fGenerateCountry\x12\x31\n\x12generate_full_name\x18\x01 \x01(\x08H\x00R\x10generateFullName\x88\x01\x01\x42\x15\n\x13_generate_full_name\"I\n\x1eGetTransformPiiEntitiesRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"=\n\x1fGetTransformPiiEntitiesResponse\x12\x1a\n\x08\x65ntities\x18\x01 \x03(\tR\x08\x65ntities\"\x16\n\x14GenerateBusinessName\"c\n\x11GenerateIpAddress\x12\x42\n\x07ip_type\x18\x01 \x01(\x0e\x32$.mgmt.v1alpha1.GenerateIpAddressTypeH\x00R\x06ipType\x88\x01\x01\x42\n\n\x08_ip_type\"\x0f\n\rTransformUuid*\x87\x11\n\x11TransformerSource\x12\"\n\x1eTRANSFORMER_SOURCE_UNSPECIFIED\x10\x00\x12\"\n\x1eTRANSFORMER_SOURCE_PASSTHROUGH\x10\x01\x12\'\n#TRANSFORMER_SOURCE_GENERATE_DEFAULT\x10\x02\x12+\n\'TRANSFORMER_SOURCE_TRANSFORM_JAVASCRIPT\x10\x03\x12%\n!TRANSFORMER_SOURCE_GENERATE_EMAIL\x10\x04\x12&\n\"TRANSFORMER_SOURCE_TRANSFORM_EMAIL\x10\x05\x12$\n TRANSFORMER_SOURCE_GENERATE_BOOL\x10\x06\x12+\n\'TRANSFORMER_SOURCE_GENERATE_CARD_NUMBER\x10\x07\x12$\n TRANSFORMER_SOURCE_GENERATE_CITY\x10\x08\x12\x31\n-TRANSFORMER_SOURCE_GENERATE_E164_PHONE_NUMBER\x10\t\x12*\n&TRANSFORMER_SOURCE_GENERATE_FIRST_NAME\x10\n\x12\'\n#TRANSFORMER_SOURCE_GENERATE_FLOAT64\x10\x0b\x12,\n(TRANSFORMER_SOURCE_GENERATE_FULL_ADDRESS\x10\x0c\x12)\n%TRANSFORMER_SOURCE_GENERATE_FULL_NAME\x10\r\x12&\n\"TRANSFORMER_SOURCE_GENERATE_GENDER\x10\x0e\x12\x32\n.TRANSFORMER_SOURCE_GENERATE_INT64_PHONE_NUMBER\x10\x0f\x12%\n!TRANSFORMER_SOURCE_GENERATE_INT64\x10\x10\x12,\n(TRANSFORMER_SOURCE_GENERATE_RANDOM_INT64\x10\x11\x12)\n%TRANSFORMER_SOURCE_GENERATE_LAST_NAME\x10\x12\x12*\n&TRANSFORMER_SOURCE_GENERATE_SHA256HASH\x10\x13\x12#\n\x1fTRANSFORMER_SOURCE_GENERATE_SSN\x10\x14\x12%\n!TRANSFORMER_SOURCE_GENERATE_STATE\x10\x15\x12.\n*TRANSFORMER_SOURCE_GENERATE_STREET_ADDRESS\x10\x16\x12\x33\n/TRANSFORMER_SOURCE_GENERATE_STRING_PHONE_NUMBER\x10\x17\x12&\n\"TRANSFORMER_SOURCE_GENERATE_STRING\x10\x18\x12-\n)TRANSFORMER_SOURCE_GENERATE_RANDOM_STRING\x10\x19\x12-\n)TRANSFORMER_SOURCE_GENERATE_UNIXTIMESTAMP\x10\x1a\x12(\n$TRANSFORMER_SOURCE_GENERATE_USERNAME\x10\x1b\x12,\n(TRANSFORMER_SOURCE_GENERATE_UTCTIMESTAMP\x10\x1c\x12$\n TRANSFORMER_SOURCE_GENERATE_UUID\x10\x1d\x12\'\n#TRANSFORMER_SOURCE_GENERATE_ZIPCODE\x10\x1e\x12\x32\n.TRANSFORMER_SOURCE_TRANSFORM_E164_PHONE_NUMBER\x10\x1f\x12+\n\'TRANSFORMER_SOURCE_TRANSFORM_FIRST_NAME\x10 \x12(\n$TRANSFORMER_SOURCE_TRANSFORM_FLOAT64\x10!\x12*\n&TRANSFORMER_SOURCE_TRANSFORM_FULL_NAME\x10\"\x12\x33\n/TRANSFORMER_SOURCE_TRANSFORM_INT64_PHONE_NUMBER\x10#\x12&\n\"TRANSFORMER_SOURCE_TRANSFORM_INT64\x10$\x12*\n&TRANSFORMER_SOURCE_TRANSFORM_LAST_NAME\x10%\x12-\n)TRANSFORMER_SOURCE_TRANSFORM_PHONE_NUMBER\x10&\x12\'\n#TRANSFORMER_SOURCE_TRANSFORM_STRING\x10\'\x12$\n TRANSFORMER_SOURCE_GENERATE_NULL\x10(\x12+\n\'TRANSFORMER_SOURCE_GENERATE_CATEGORICAL\x10*\x12\x33\n/TRANSFORMER_SOURCE_TRANSFORM_CHARACTER_SCRAMBLE\x10+\x12#\n\x1fTRANSFORMER_SOURCE_USER_DEFINED\x10,\x12*\n&TRANSFORMER_SOURCE_GENERATE_JAVASCRIPT\x10-\x12\'\n#TRANSFORMER_SOURCE_GENERATE_COUNTRY\x10.\x12)\n%TRANSFORMER_SOURCE_TRANSFORM_PII_TEXT\x10/\x12-\n)TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME\x10\x30\x12*\n&TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS\x10\x31\x12%\n!TRANSFORMER_SOURCE_TRANSFORM_UUID\x10\x32*\xc4\x02\n\x13TransformerDataType\x12%\n!TRANSFORMER_DATA_TYPE_UNSPECIFIED\x10\x00\x12 \n\x1cTRANSFORMER_DATA_TYPE_STRING\x10\x01\x12\x1f\n\x1bTRANSFORMER_DATA_TYPE_INT64\x10\x02\x12!\n\x1dTRANSFORMER_DATA_TYPE_BOOLEAN\x10\x03\x12!\n\x1dTRANSFORMER_DATA_TYPE_FLOAT64\x10\x04\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_NULL\x10\x05\x12\x1d\n\x19TRANSFORMER_DATA_TYPE_ANY\x10\x06\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_TIME\x10\x07\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_UUID\x10\x08*t\n\x10SupportedJobType\x12\"\n\x1eSUPPORTED_JOB_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17SUPPORTED_JOB_TYPE_SYNC\x10\x01\x12\x1f\n\x1bSUPPORTED_JOB_TYPE_GENERATE\x10\x02*{\n\x11GenerateEmailType\x12#\n\x1fGENERATE_EMAIL_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bGENERATE_EMAIL_TYPE_UUID_V4\x10\x01\x12 \n\x1cGENERATE_EMAIL_TYPE_FULLNAME\x10\x02*\xc3\x01\n\x12InvalidEmailAction\x12$\n INVALID_EMAIL_ACTION_UNSPECIFIED\x10\x00\x12\x1f\n\x1bINVALID_EMAIL_ACTION_REJECT\x10\x01\x12\x1d\n\x19INVALID_EMAIL_ACTION_NULL\x10\x02\x12$\n INVALID_EMAIL_ACTION_PASSTHROUGH\x10\x03\x12!\n\x1dINVALID_EMAIL_ACTION_GENERATE\x10\x04*\x8c\x03\n\x15GenerateIpAddressType\x12(\n$GENERATE_IP_ADDRESS_TYPE_UNSPECIFIED\x10\x00\x12&\n\"GENERATE_IP_ADDRESS_TYPE_V4_PUBLIC\x10\x01\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_A\x10\x02\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_B\x10\x03\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_C\x10\x04\x12*\n&GENERATE_IP_ADDRESS_TYPE_V4_LINK_LOCAL\x10\x05\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_MULTICAST\x10\x06\x12(\n$GENERATE_IP_ADDRESS_TYPE_V4_LOOPBACK\x10\x07\x12\x1f\n\x1bGENERATE_IP_ADDRESS_TYPE_V6\x10\x08\x32\xd1\x0b\n\x13TransformersService\x12t\n\x15GetSystemTransformers\x12+.mgmt.v1alpha1.GetSystemTransformersRequest\x1a,.mgmt.v1alpha1.GetSystemTransformersResponse\"\x00\x12\x89\x01\n\x1cGetSystemTransformerBySource\x12\x32.mgmt.v1alpha1.GetSystemTransformerBySourceRequest\x1a\x33.mgmt.v1alpha1.GetSystemTransformerBySourceResponse\"\x00\x12\x83\x01\n\x1aGetUserDefinedTransformers\x12\x30.mgmt.v1alpha1.GetUserDefinedTransformersRequest\x1a\x31.mgmt.v1alpha1.GetUserDefinedTransformersResponse\"\x00\x12\x8c\x01\n\x1dGetUserDefinedTransformerById\x12\x33.mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest\x1a\x34.mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse\"\x00\x12\x89\x01\n\x1c\x43reateUserDefinedTransformer\x12\x32.mgmt.v1alpha1.CreateUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.CreateUserDefinedTransformerResponse\"\x00\x12\x89\x01\n\x1c\x44\x65leteUserDefinedTransformer\x12\x32.mgmt.v1alpha1.DeleteUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.DeleteUserDefinedTransformerResponse\"\x00\x12\x89\x01\n\x1cUpdateUserDefinedTransformer\x12\x32.mgmt.v1alpha1.UpdateUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.UpdateUserDefinedTransformerResponse\"\x00\x12\x83\x01\n\x1aIsTransformerNameAvailable\x12\x30.mgmt.v1alpha1.IsTransformerNameAvailableRequest\x1a\x31.mgmt.v1alpha1.IsTransformerNameAvailableResponse\"\x00\x12\x83\x01\n\x1aValidateUserJavascriptCode\x12\x30.mgmt.v1alpha1.ValidateUserJavascriptCodeRequest\x1a\x31.mgmt.v1alpha1.ValidateUserJavascriptCodeResponse\"\x00\x12t\n\x15ValidateUserRegexCode\x12+.mgmt.v1alpha1.ValidateUserRegexCodeRequest\x1a,.mgmt.v1alpha1.ValidateUserRegexCodeResponse\"\x00\x12}\n\x17GetTransformPiiEntities\x12-.mgmt.v1alpha1.GetTransformPiiEntitiesRequest\x1a..mgmt.v1alpha1.GetTransformPiiEntitiesResponse\"\x03\x90\x02\x01\x42\xcc\x01\n\x11\x63om.mgmt.v1alpha1B\x10TransformerProtoP\x01ZPgithub.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1;mgmtv1alpha1\xa2\x02\x03MXX\xaa\x02\rMgmt.V1alpha1\xca\x02\rMgmt\\V1alpha1\xe2\x02\x19Mgmt\\V1alpha1\\GPBMetadata\xea\x02\x0eMgmt::V1alpha1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -56,6 +56,8 @@ _globals['_USERDEFINEDTRANSFORMER'].fields_by_name['id']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_TRANSFORMERCONFIG'].oneofs_by_name['config']._loaded_options = None _globals['_TRANSFORMERCONFIG'].oneofs_by_name['config']._serialized_options = b'\272H\002\010\001' + _globals['_TRANSFORMPIITEXT_ENTITYANONYMIZERSENTRY']._loaded_options = None + _globals['_TRANSFORMPIITEXT_ENTITYANONYMIZERSENTRY']._serialized_options = b'8\001' _globals['_TRANSFORMPIITEXT'].fields_by_name['score_threshold']._loaded_options = None _globals['_TRANSFORMPIITEXT'].fields_by_name['score_threshold']._serialized_options = b'\272H\014\n\n\035\000\000\200?-\000\000\000\000' _globals['_TRANSFORMPIITEXT'].fields_by_name['allowed_entities']._loaded_options = None @@ -72,18 +74,18 @@ _globals['_GETTRANSFORMPIIENTITIESREQUEST'].fields_by_name['account_id']._serialized_options = b'\272H\005r\003\260\001\001' _globals['_TRANSFORMERSSERVICE'].methods_by_name['GetTransformPiiEntities']._loaded_options = None _globals['_TRANSFORMERSSERVICE'].methods_by_name['GetTransformPiiEntities']._serialized_options = b'\220\002\001' - _globals['_TRANSFORMERSOURCE']._serialized_start=12368 - _globals['_TRANSFORMERSOURCE']._serialized_end=14551 - _globals['_TRANSFORMERDATATYPE']._serialized_start=14554 - _globals['_TRANSFORMERDATATYPE']._serialized_end=14878 - _globals['_SUPPORTEDJOBTYPE']._serialized_start=14880 - _globals['_SUPPORTEDJOBTYPE']._serialized_end=14996 - _globals['_GENERATEEMAILTYPE']._serialized_start=14998 - _globals['_GENERATEEMAILTYPE']._serialized_end=15121 - _globals['_INVALIDEMAILACTION']._serialized_start=15124 - _globals['_INVALIDEMAILACTION']._serialized_end=15319 - _globals['_GENERATEIPADDRESSTYPE']._serialized_start=15322 - _globals['_GENERATEIPADDRESSTYPE']._serialized_end=15718 + _globals['_TRANSFORMERSOURCE']._serialized_start=12571 + _globals['_TRANSFORMERSOURCE']._serialized_end=14754 + _globals['_TRANSFORMERDATATYPE']._serialized_start=14757 + _globals['_TRANSFORMERDATATYPE']._serialized_end=15081 + _globals['_SUPPORTEDJOBTYPE']._serialized_start=15083 + _globals['_SUPPORTEDJOBTYPE']._serialized_end=15199 + _globals['_GENERATEEMAILTYPE']._serialized_start=15201 + _globals['_GENERATEEMAILTYPE']._serialized_end=15324 + _globals['_INVALIDEMAILACTION']._serialized_start=15327 + _globals['_INVALIDEMAILACTION']._serialized_end=15522 + _globals['_GENERATEIPADDRESSTYPE']._serialized_start=15525 + _globals['_GENERATEIPADDRESSTYPE']._serialized_end=15921 _globals['_GETSYSTEMTRANSFORMERSREQUEST']._serialized_start=112 _globals['_GETSYSTEMTRANSFORMERSREQUEST']._serialized_end=142 _globals['_GETSYSTEMTRANSFORMERSRESPONSE']._serialized_start=144 @@ -123,125 +125,127 @@ _globals['_TRANSFORMERCONFIG']._serialized_start=2890 _globals['_TRANSFORMERCONFIG']._serialized_end=7448 _globals['_TRANSFORMPIITEXT']._serialized_start=7451 - _globals['_TRANSFORMPIITEXT']._serialized_end=7825 - _globals['_PIIDENYRECOGNIZER']._serialized_start=7827 - _globals['_PIIDENYRECOGNIZER']._serialized_end=7939 - _globals['_PIIANONYMIZER']._serialized_start=7942 - _globals['_PIIANONYMIZER']._serialized_end=8627 - _globals['_PIIANONYMIZER_REPLACE']._serialized_start=8202 - _globals['_PIIANONYMIZER_REPLACE']._serialized_end=8248 - _globals['_PIIANONYMIZER_REDACT']._serialized_start=8250 - _globals['_PIIANONYMIZER_REDACT']._serialized_end=8258 - _globals['_PIIANONYMIZER_MASK']._serialized_start=8261 - _globals['_PIIANONYMIZER_MASK']._serialized_end=8428 - _globals['_PIIANONYMIZER_HASH']._serialized_start=8431 - _globals['_PIIANONYMIZER_HASH']._serialized_end=8617 - _globals['_PIIANONYMIZER_HASH_HASHTYPE']._serialized_start=8508 - _globals['_PIIANONYMIZER_HASH_HASHTYPE']._serialized_end=8608 - _globals['_GENERATEEMAIL']._serialized_start=8629 - _globals['_GENERATEEMAIL']._serialized_end=8729 - _globals['_TRANSFORMEMAIL']._serialized_start=8732 - _globals['_TRANSFORMEMAIL']._serialized_end=9123 - _globals['_GENERATEBOOL']._serialized_start=9125 - _globals['_GENERATEBOOL']._serialized_end=9139 - _globals['_GENERATECARDNUMBER']._serialized_start=9141 - _globals['_GENERATECARDNUMBER']._serialized_end=9212 - _globals['_GENERATECITY']._serialized_start=9214 - _globals['_GENERATECITY']._serialized_end=9228 - _globals['_GENERATEDEFAULT']._serialized_start=9230 - _globals['_GENERATEDEFAULT']._serialized_end=9247 - _globals['_GENERATEE164PHONENUMBER']._serialized_start=9249 - _globals['_GENERATEE164PHONENUMBER']._serialized_end=9336 - _globals['_GENERATEFIRSTNAME']._serialized_start=9338 - _globals['_GENERATEFIRSTNAME']._serialized_end=9357 - _globals['_GENERATEFLOAT64']._serialized_start=9360 - _globals['_GENERATEFLOAT64']._serialized_end=9551 - _globals['_GENERATEFULLADDRESS']._serialized_start=9553 - _globals['_GENERATEFULLADDRESS']._serialized_end=9574 - _globals['_GENERATEFULLNAME']._serialized_start=9576 - _globals['_GENERATEFULLNAME']._serialized_end=9594 - _globals['_GENERATEGENDER']._serialized_start=9596 - _globals['_GENERATEGENDER']._serialized_end=9664 - _globals['_GENERATEINT64PHONENUMBER']._serialized_start=9666 - _globals['_GENERATEINT64PHONENUMBER']._serialized_end=9692 - _globals['_GENERATEINT64']._serialized_start=9695 - _globals['_GENERATEINT64']._serialized_end=9835 - _globals['_GENERATELASTNAME']._serialized_start=9837 - _globals['_GENERATELASTNAME']._serialized_end=9855 - _globals['_GENERATESHA256HASH']._serialized_start=9857 - _globals['_GENERATESHA256HASH']._serialized_end=9877 - _globals['_GENERATESSN']._serialized_start=9879 - _globals['_GENERATESSN']._serialized_end=9892 - _globals['_GENERATESTATE']._serialized_start=9894 - _globals['_GENERATESTATE']._serialized_end=9983 - _globals['_GENERATESTREETADDRESS']._serialized_start=9985 - _globals['_GENERATESTREETADDRESS']._serialized_end=10008 - _globals['_GENERATESTRINGPHONENUMBER']._serialized_start=10010 - _globals['_GENERATESTRINGPHONENUMBER']._serialized_end=10099 - _globals['_GENERATESTRING']._serialized_start=10101 - _globals['_GENERATESTRING']._serialized_end=10179 - _globals['_GENERATEUNIXTIMESTAMP']._serialized_start=10181 - _globals['_GENERATEUNIXTIMESTAMP']._serialized_end=10204 - _globals['_GENERATEUSERNAME']._serialized_start=10206 - _globals['_GENERATEUSERNAME']._serialized_end=10224 - _globals['_GENERATEUTCTIMESTAMP']._serialized_start=10226 - _globals['_GENERATEUTCTIMESTAMP']._serialized_end=10248 - _globals['_GENERATEUUID']._serialized_start=10250 - _globals['_GENERATEUUID']._serialized_end=10330 - _globals['_GENERATEZIPCODE']._serialized_start=10332 - _globals['_GENERATEZIPCODE']._serialized_end=10349 - _globals['_TRANSFORME164PHONENUMBER']._serialized_start=10351 - _globals['_TRANSFORME164PHONENUMBER']._serialized_end=10443 - _globals['_TRANSFORMFIRSTNAME']._serialized_start=10445 - _globals['_TRANSFORMFIRSTNAME']._serialized_end=10531 - _globals['_TRANSFORMFLOAT64']._serialized_start=10534 - _globals['_TRANSFORMFLOAT64']._serialized_end=10730 - _globals['_TRANSFORMFULLNAME']._serialized_start=10732 - _globals['_TRANSFORMFULLNAME']._serialized_end=10817 - _globals['_TRANSFORMINT64PHONENUMBER']._serialized_start=10819 - _globals['_TRANSFORMINT64PHONENUMBER']._serialized_end=10912 - _globals['_TRANSFORMINT64']._serialized_start=10915 - _globals['_TRANSFORMINT64']._serialized_end=11109 - _globals['_TRANSFORMLASTNAME']._serialized_start=11111 - _globals['_TRANSFORMLASTNAME']._serialized_end=11196 - _globals['_TRANSFORMPHONENUMBER']._serialized_start=11198 - _globals['_TRANSFORMPHONENUMBER']._serialized_end=11286 - _globals['_TRANSFORMSTRING']._serialized_start=11288 - _globals['_TRANSFORMSTRING']._serialized_end=11371 - _globals['_PASSTHROUGH']._serialized_start=11373 - _globals['_PASSTHROUGH']._serialized_end=11386 - _globals['_NULL']._serialized_start=11388 - _globals['_NULL']._serialized_end=11394 - _globals['_TRANSFORMJAVASCRIPT']._serialized_start=11396 - _globals['_TRANSFORMJAVASCRIPT']._serialized_end=11437 - _globals['_USERDEFINEDTRANSFORMERCONFIG']._serialized_start=11439 - _globals['_USERDEFINEDTRANSFORMERCONFIG']._serialized_end=11495 - _globals['_VALIDATEUSERJAVASCRIPTCODEREQUEST']._serialized_start=11497 - _globals['_VALIDATEUSERJAVASCRIPTCODEREQUEST']._serialized_end=11567 - _globals['_VALIDATEUSERJAVASCRIPTCODERESPONSE']._serialized_start=11569 - _globals['_VALIDATEUSERJAVASCRIPTCODERESPONSE']._serialized_end=11627 - _globals['_GENERATECATEGORICAL']._serialized_start=11629 - _globals['_GENERATECATEGORICAL']._serialized_end=11702 - _globals['_TRANSFORMCHARACTERSCRAMBLE']._serialized_start=11704 - _globals['_TRANSFORMCHARACTERSCRAMBLE']._serialized_end=11809 - _globals['_GENERATEJAVASCRIPT']._serialized_start=11811 - _globals['_GENERATEJAVASCRIPT']._serialized_end=11851 - _globals['_VALIDATEUSERREGEXCODEREQUEST']._serialized_start=11853 - _globals['_VALIDATEUSERREGEXCODEREQUEST']._serialized_end=11937 - _globals['_VALIDATEUSERREGEXCODERESPONSE']._serialized_start=11939 - _globals['_VALIDATEUSERREGEXCODERESPONSE']._serialized_end=11992 - _globals['_GENERATECOUNTRY']._serialized_start=11994 - _globals['_GENERATECOUNTRY']._serialized_end=12085 - _globals['_GETTRANSFORMPIIENTITIESREQUEST']._serialized_start=12087 - _globals['_GETTRANSFORMPIIENTITIESREQUEST']._serialized_end=12160 - _globals['_GETTRANSFORMPIIENTITIESRESPONSE']._serialized_start=12162 - _globals['_GETTRANSFORMPIIENTITIESRESPONSE']._serialized_end=12223 - _globals['_GENERATEBUSINESSNAME']._serialized_start=12225 - _globals['_GENERATEBUSINESSNAME']._serialized_end=12247 - _globals['_GENERATEIPADDRESS']._serialized_start=12249 - _globals['_GENERATEIPADDRESS']._serialized_end=12348 - _globals['_TRANSFORMUUID']._serialized_start=12350 - _globals['_TRANSFORMUUID']._serialized_end=12365 - _globals['_TRANSFORMERSSERVICE']._serialized_start=15721 - _globals['_TRANSFORMERSSERVICE']._serialized_end=17210 + _globals['_TRANSFORMPIITEXT']._serialized_end=8028 + _globals['_TRANSFORMPIITEXT_ENTITYANONYMIZERSENTRY']._serialized_start=7917 + _globals['_TRANSFORMPIITEXT_ENTITYANONYMIZERSENTRY']._serialized_end=8015 + _globals['_PIIDENYRECOGNIZER']._serialized_start=8030 + _globals['_PIIDENYRECOGNIZER']._serialized_end=8142 + _globals['_PIIANONYMIZER']._serialized_start=8145 + _globals['_PIIANONYMIZER']._serialized_end=8830 + _globals['_PIIANONYMIZER_REPLACE']._serialized_start=8405 + _globals['_PIIANONYMIZER_REPLACE']._serialized_end=8451 + _globals['_PIIANONYMIZER_REDACT']._serialized_start=8453 + _globals['_PIIANONYMIZER_REDACT']._serialized_end=8461 + _globals['_PIIANONYMIZER_MASK']._serialized_start=8464 + _globals['_PIIANONYMIZER_MASK']._serialized_end=8631 + _globals['_PIIANONYMIZER_HASH']._serialized_start=8634 + _globals['_PIIANONYMIZER_HASH']._serialized_end=8820 + _globals['_PIIANONYMIZER_HASH_HASHTYPE']._serialized_start=8711 + _globals['_PIIANONYMIZER_HASH_HASHTYPE']._serialized_end=8811 + _globals['_GENERATEEMAIL']._serialized_start=8832 + _globals['_GENERATEEMAIL']._serialized_end=8932 + _globals['_TRANSFORMEMAIL']._serialized_start=8935 + _globals['_TRANSFORMEMAIL']._serialized_end=9326 + _globals['_GENERATEBOOL']._serialized_start=9328 + _globals['_GENERATEBOOL']._serialized_end=9342 + _globals['_GENERATECARDNUMBER']._serialized_start=9344 + _globals['_GENERATECARDNUMBER']._serialized_end=9415 + _globals['_GENERATECITY']._serialized_start=9417 + _globals['_GENERATECITY']._serialized_end=9431 + _globals['_GENERATEDEFAULT']._serialized_start=9433 + _globals['_GENERATEDEFAULT']._serialized_end=9450 + _globals['_GENERATEE164PHONENUMBER']._serialized_start=9452 + _globals['_GENERATEE164PHONENUMBER']._serialized_end=9539 + _globals['_GENERATEFIRSTNAME']._serialized_start=9541 + _globals['_GENERATEFIRSTNAME']._serialized_end=9560 + _globals['_GENERATEFLOAT64']._serialized_start=9563 + _globals['_GENERATEFLOAT64']._serialized_end=9754 + _globals['_GENERATEFULLADDRESS']._serialized_start=9756 + _globals['_GENERATEFULLADDRESS']._serialized_end=9777 + _globals['_GENERATEFULLNAME']._serialized_start=9779 + _globals['_GENERATEFULLNAME']._serialized_end=9797 + _globals['_GENERATEGENDER']._serialized_start=9799 + _globals['_GENERATEGENDER']._serialized_end=9867 + _globals['_GENERATEINT64PHONENUMBER']._serialized_start=9869 + _globals['_GENERATEINT64PHONENUMBER']._serialized_end=9895 + _globals['_GENERATEINT64']._serialized_start=9898 + _globals['_GENERATEINT64']._serialized_end=10038 + _globals['_GENERATELASTNAME']._serialized_start=10040 + _globals['_GENERATELASTNAME']._serialized_end=10058 + _globals['_GENERATESHA256HASH']._serialized_start=10060 + _globals['_GENERATESHA256HASH']._serialized_end=10080 + _globals['_GENERATESSN']._serialized_start=10082 + _globals['_GENERATESSN']._serialized_end=10095 + _globals['_GENERATESTATE']._serialized_start=10097 + _globals['_GENERATESTATE']._serialized_end=10186 + _globals['_GENERATESTREETADDRESS']._serialized_start=10188 + _globals['_GENERATESTREETADDRESS']._serialized_end=10211 + _globals['_GENERATESTRINGPHONENUMBER']._serialized_start=10213 + _globals['_GENERATESTRINGPHONENUMBER']._serialized_end=10302 + _globals['_GENERATESTRING']._serialized_start=10304 + _globals['_GENERATESTRING']._serialized_end=10382 + _globals['_GENERATEUNIXTIMESTAMP']._serialized_start=10384 + _globals['_GENERATEUNIXTIMESTAMP']._serialized_end=10407 + _globals['_GENERATEUSERNAME']._serialized_start=10409 + _globals['_GENERATEUSERNAME']._serialized_end=10427 + _globals['_GENERATEUTCTIMESTAMP']._serialized_start=10429 + _globals['_GENERATEUTCTIMESTAMP']._serialized_end=10451 + _globals['_GENERATEUUID']._serialized_start=10453 + _globals['_GENERATEUUID']._serialized_end=10533 + _globals['_GENERATEZIPCODE']._serialized_start=10535 + _globals['_GENERATEZIPCODE']._serialized_end=10552 + _globals['_TRANSFORME164PHONENUMBER']._serialized_start=10554 + _globals['_TRANSFORME164PHONENUMBER']._serialized_end=10646 + _globals['_TRANSFORMFIRSTNAME']._serialized_start=10648 + _globals['_TRANSFORMFIRSTNAME']._serialized_end=10734 + _globals['_TRANSFORMFLOAT64']._serialized_start=10737 + _globals['_TRANSFORMFLOAT64']._serialized_end=10933 + _globals['_TRANSFORMFULLNAME']._serialized_start=10935 + _globals['_TRANSFORMFULLNAME']._serialized_end=11020 + _globals['_TRANSFORMINT64PHONENUMBER']._serialized_start=11022 + _globals['_TRANSFORMINT64PHONENUMBER']._serialized_end=11115 + _globals['_TRANSFORMINT64']._serialized_start=11118 + _globals['_TRANSFORMINT64']._serialized_end=11312 + _globals['_TRANSFORMLASTNAME']._serialized_start=11314 + _globals['_TRANSFORMLASTNAME']._serialized_end=11399 + _globals['_TRANSFORMPHONENUMBER']._serialized_start=11401 + _globals['_TRANSFORMPHONENUMBER']._serialized_end=11489 + _globals['_TRANSFORMSTRING']._serialized_start=11491 + _globals['_TRANSFORMSTRING']._serialized_end=11574 + _globals['_PASSTHROUGH']._serialized_start=11576 + _globals['_PASSTHROUGH']._serialized_end=11589 + _globals['_NULL']._serialized_start=11591 + _globals['_NULL']._serialized_end=11597 + _globals['_TRANSFORMJAVASCRIPT']._serialized_start=11599 + _globals['_TRANSFORMJAVASCRIPT']._serialized_end=11640 + _globals['_USERDEFINEDTRANSFORMERCONFIG']._serialized_start=11642 + _globals['_USERDEFINEDTRANSFORMERCONFIG']._serialized_end=11698 + _globals['_VALIDATEUSERJAVASCRIPTCODEREQUEST']._serialized_start=11700 + _globals['_VALIDATEUSERJAVASCRIPTCODEREQUEST']._serialized_end=11770 + _globals['_VALIDATEUSERJAVASCRIPTCODERESPONSE']._serialized_start=11772 + _globals['_VALIDATEUSERJAVASCRIPTCODERESPONSE']._serialized_end=11830 + _globals['_GENERATECATEGORICAL']._serialized_start=11832 + _globals['_GENERATECATEGORICAL']._serialized_end=11905 + _globals['_TRANSFORMCHARACTERSCRAMBLE']._serialized_start=11907 + _globals['_TRANSFORMCHARACTERSCRAMBLE']._serialized_end=12012 + _globals['_GENERATEJAVASCRIPT']._serialized_start=12014 + _globals['_GENERATEJAVASCRIPT']._serialized_end=12054 + _globals['_VALIDATEUSERREGEXCODEREQUEST']._serialized_start=12056 + _globals['_VALIDATEUSERREGEXCODEREQUEST']._serialized_end=12140 + _globals['_VALIDATEUSERREGEXCODERESPONSE']._serialized_start=12142 + _globals['_VALIDATEUSERREGEXCODERESPONSE']._serialized_end=12195 + _globals['_GENERATECOUNTRY']._serialized_start=12197 + _globals['_GENERATECOUNTRY']._serialized_end=12288 + _globals['_GETTRANSFORMPIIENTITIESREQUEST']._serialized_start=12290 + _globals['_GETTRANSFORMPIIENTITIESREQUEST']._serialized_end=12363 + _globals['_GETTRANSFORMPIIENTITIESRESPONSE']._serialized_start=12365 + _globals['_GETTRANSFORMPIIENTITIESRESPONSE']._serialized_end=12426 + _globals['_GENERATEBUSINESSNAME']._serialized_start=12428 + _globals['_GENERATEBUSINESSNAME']._serialized_end=12450 + _globals['_GENERATEIPADDRESS']._serialized_start=12452 + _globals['_GENERATEIPADDRESS']._serialized_end=12551 + _globals['_TRANSFORMUUID']._serialized_start=12553 + _globals['_TRANSFORMUUID']._serialized_end=12568 + _globals['_TRANSFORMERSSERVICE']._serialized_start=15924 + _globals['_TRANSFORMERSSERVICE']._serialized_end=17413 # @@protoc_insertion_point(module_scope) diff --git a/python/src/neosync/mgmt/v1alpha1/transformer_pb2.pyi b/python/src/neosync/mgmt/v1alpha1/transformer_pb2.pyi index d62cf7b5de..85807f5105 100644 --- a/python/src/neosync/mgmt/v1alpha1/transformer_pb2.pyi +++ b/python/src/neosync/mgmt/v1alpha1/transformer_pb2.pyi @@ -433,20 +433,29 @@ class TransformerConfig(_message.Message): def __init__(self, generate_email_config: _Optional[_Union[GenerateEmail, _Mapping]] = ..., transform_email_config: _Optional[_Union[TransformEmail, _Mapping]] = ..., generate_bool_config: _Optional[_Union[GenerateBool, _Mapping]] = ..., generate_card_number_config: _Optional[_Union[GenerateCardNumber, _Mapping]] = ..., generate_city_config: _Optional[_Union[GenerateCity, _Mapping]] = ..., generate_e164_phone_number_config: _Optional[_Union[GenerateE164PhoneNumber, _Mapping]] = ..., generate_first_name_config: _Optional[_Union[GenerateFirstName, _Mapping]] = ..., generate_float64_config: _Optional[_Union[GenerateFloat64, _Mapping]] = ..., generate_full_address_config: _Optional[_Union[GenerateFullAddress, _Mapping]] = ..., generate_full_name_config: _Optional[_Union[GenerateFullName, _Mapping]] = ..., generate_gender_config: _Optional[_Union[GenerateGender, _Mapping]] = ..., generate_int64_phone_number_config: _Optional[_Union[GenerateInt64PhoneNumber, _Mapping]] = ..., generate_int64_config: _Optional[_Union[GenerateInt64, _Mapping]] = ..., generate_last_name_config: _Optional[_Union[GenerateLastName, _Mapping]] = ..., generate_sha256hash_config: _Optional[_Union[GenerateSha256Hash, _Mapping]] = ..., generate_ssn_config: _Optional[_Union[GenerateSSN, _Mapping]] = ..., generate_state_config: _Optional[_Union[GenerateState, _Mapping]] = ..., generate_street_address_config: _Optional[_Union[GenerateStreetAddress, _Mapping]] = ..., generate_string_phone_number_config: _Optional[_Union[GenerateStringPhoneNumber, _Mapping]] = ..., generate_string_config: _Optional[_Union[GenerateString, _Mapping]] = ..., generate_unixtimestamp_config: _Optional[_Union[GenerateUnixTimestamp, _Mapping]] = ..., generate_username_config: _Optional[_Union[GenerateUsername, _Mapping]] = ..., generate_utctimestamp_config: _Optional[_Union[GenerateUtcTimestamp, _Mapping]] = ..., generate_uuid_config: _Optional[_Union[GenerateUuid, _Mapping]] = ..., generate_zipcode_config: _Optional[_Union[GenerateZipcode, _Mapping]] = ..., transform_e164_phone_number_config: _Optional[_Union[TransformE164PhoneNumber, _Mapping]] = ..., transform_first_name_config: _Optional[_Union[TransformFirstName, _Mapping]] = ..., transform_float64_config: _Optional[_Union[TransformFloat64, _Mapping]] = ..., transform_full_name_config: _Optional[_Union[TransformFullName, _Mapping]] = ..., transform_int64_phone_number_config: _Optional[_Union[TransformInt64PhoneNumber, _Mapping]] = ..., transform_int64_config: _Optional[_Union[TransformInt64, _Mapping]] = ..., transform_last_name_config: _Optional[_Union[TransformLastName, _Mapping]] = ..., transform_phone_number_config: _Optional[_Union[TransformPhoneNumber, _Mapping]] = ..., transform_string_config: _Optional[_Union[TransformString, _Mapping]] = ..., passthrough_config: _Optional[_Union[Passthrough, _Mapping]] = ..., nullconfig: _Optional[_Union[Null, _Mapping]] = ..., user_defined_transformer_config: _Optional[_Union[UserDefinedTransformerConfig, _Mapping]] = ..., generate_default_config: _Optional[_Union[GenerateDefault, _Mapping]] = ..., transform_javascript_config: _Optional[_Union[TransformJavascript, _Mapping]] = ..., generate_categorical_config: _Optional[_Union[GenerateCategorical, _Mapping]] = ..., transform_character_scramble_config: _Optional[_Union[TransformCharacterScramble, _Mapping]] = ..., generate_javascript_config: _Optional[_Union[GenerateJavascript, _Mapping]] = ..., generate_country_config: _Optional[_Union[GenerateCountry, _Mapping]] = ..., transform_pii_text_config: _Optional[_Union[TransformPiiText, _Mapping]] = ..., generate_business_name_config: _Optional[_Union[GenerateBusinessName, _Mapping]] = ..., generate_ip_address_config: _Optional[_Union[GenerateIpAddress, _Mapping]] = ..., transform_uuid_config: _Optional[_Union[TransformUuid, _Mapping]] = ...) -> None: ... class TransformPiiText(_message.Message): - __slots__ = ("score_threshold", "default_anonymizer", "deny_recognizers", "allowed_entities", "allowed_phrases", "language") + __slots__ = ("score_threshold", "default_anonymizer", "deny_recognizers", "allowed_entities", "allowed_phrases", "language", "entity_anonymizers") + class EntityAnonymizersEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: PiiAnonymizer + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[PiiAnonymizer, _Mapping]] = ...) -> None: ... SCORE_THRESHOLD_FIELD_NUMBER: _ClassVar[int] DEFAULT_ANONYMIZER_FIELD_NUMBER: _ClassVar[int] DENY_RECOGNIZERS_FIELD_NUMBER: _ClassVar[int] ALLOWED_ENTITIES_FIELD_NUMBER: _ClassVar[int] ALLOWED_PHRASES_FIELD_NUMBER: _ClassVar[int] LANGUAGE_FIELD_NUMBER: _ClassVar[int] + ENTITY_ANONYMIZERS_FIELD_NUMBER: _ClassVar[int] score_threshold: float default_anonymizer: PiiAnonymizer deny_recognizers: _containers.RepeatedCompositeFieldContainer[PiiDenyRecognizer] allowed_entities: _containers.RepeatedScalarFieldContainer[str] allowed_phrases: _containers.RepeatedScalarFieldContainer[str] language: str - def __init__(self, score_threshold: _Optional[float] = ..., default_anonymizer: _Optional[_Union[PiiAnonymizer, _Mapping]] = ..., deny_recognizers: _Optional[_Iterable[_Union[PiiDenyRecognizer, _Mapping]]] = ..., allowed_entities: _Optional[_Iterable[str]] = ..., allowed_phrases: _Optional[_Iterable[str]] = ..., language: _Optional[str] = ...) -> None: ... + entity_anonymizers: _containers.MessageMap[str, PiiAnonymizer] + def __init__(self, score_threshold: _Optional[float] = ..., default_anonymizer: _Optional[_Union[PiiAnonymizer, _Mapping]] = ..., deny_recognizers: _Optional[_Iterable[_Union[PiiDenyRecognizer, _Mapping]]] = ..., allowed_entities: _Optional[_Iterable[str]] = ..., allowed_phrases: _Optional[_Iterable[str]] = ..., language: _Optional[str] = ..., entity_anonymizers: _Optional[_Mapping[str, PiiAnonymizer]] = ...) -> None: ... class PiiDenyRecognizer(_message.Message): __slots__ = ("name", "deny_words")