diff --git a/api/handler/v1beta1/adapter.go b/api/handler/v1beta1/adapter.go index 13b115821..14d9c2bed 100644 --- a/api/handler/v1beta1/adapter.go +++ b/api/handler/v1beta1/adapter.go @@ -311,6 +311,7 @@ func (a *adapter) FromPolicyProto(p *guardianv1beta1.Policy) *domain.Policy { if p.GetAppeal() != nil { var durationOptions []domain.AppealDurationOption var questions []domain.Question + var metadataSources map[string]*domain.AppealMetadataSource for _, d := range p.GetAppeal().GetDurationOptions() { option := domain.AppealDurationOption{ Name: d.GetName(), @@ -328,6 +329,19 @@ func (a *adapter) FromPolicyProto(p *guardianv1beta1.Policy) *domain.Policy { questions = append(questions, question) } + if mds := p.GetAppeal().GetMetadataSources(); mds != nil { + metadataSources = make(map[string]*domain.AppealMetadataSource) + for key, metadataCfg := range mds { + metadataSources[key] = &domain.AppealMetadataSource{ + Name: metadataCfg.GetName(), + Description: metadataCfg.GetDescription(), + Type: metadataCfg.GetType(), + Config: metadataCfg.GetConfig().AsInterface(), + Value: metadataCfg.GetValue().AsInterface(), + } + } + } + policy.AppealConfig = &domain.PolicyAppealConfig{ DurationOptions: durationOptions, AllowOnBehalf: p.GetAppeal().GetAllowOnBehalf(), @@ -335,6 +349,7 @@ func (a *adapter) FromPolicyProto(p *guardianv1beta1.Policy) *domain.Policy { AllowPermanentAccess: p.GetAppeal().GetAllowPermanentAccess(), AllowActiveAccessExtensionIn: p.GetAppeal().GetAllowActiveAccessExtensionIn(), AllowCreatorDetailsFailure: p.GetAppeal().GetAllowCreatorDetailsFailure(), + MetadataSources: metadataSources, } } @@ -444,7 +459,11 @@ func (a *adapter) ToPolicyProto(p *domain.Policy) (*guardianv1beta1.Policy, erro } } - policyProto.Appeal = a.ToPolicyAppealConfigProto(p) + appealConfig, err := a.ToPolicyAppealConfigProto(p) + if err != nil { + return nil, fmt.Errorf("failed to convert appeal config to proto: %w", err) + } + policyProto.Appeal = appealConfig if !p.CreatedAt.IsZero() { policyProto.CreatedAt = timestamppb.New(p.CreatedAt) @@ -456,9 +475,9 @@ func (a *adapter) ToPolicyProto(p *domain.Policy) (*guardianv1beta1.Policy, erro return policyProto, nil } -func (a *adapter) ToPolicyAppealConfigProto(p *domain.Policy) *guardianv1beta1.PolicyAppealConfig { +func (a *adapter) ToPolicyAppealConfigProto(p *domain.Policy) (*guardianv1beta1.PolicyAppealConfig, error) { if p.AppealConfig == nil { - return nil + return nil, nil } policyAppealConfigProto := &guardianv1beta1.PolicyAppealConfig{} @@ -485,7 +504,34 @@ func (a *adapter) ToPolicyAppealConfigProto(p *domain.Policy) *guardianv1beta1.P Description: q.Description, }) } - return policyAppealConfigProto + + for key, metadataSource := range p.AppealConfig.MetadataSources { + if policyAppealConfigProto.MetadataSources == nil { + policyAppealConfigProto.MetadataSources = make(map[string]*guardianv1beta1.PolicyAppealConfig_MetadataSource) + } + policyAppealConfigProto.MetadataSources[key] = &guardianv1beta1.PolicyAppealConfig_MetadataSource{ + Name: metadataSource.Name, + Description: metadataSource.Description, + Type: metadataSource.Type, + } + + if metadataSource.Config != nil { + cfg, err := structpb.NewValue(metadataSource.Config) + if err != nil { + return nil, err + } + policyAppealConfigProto.MetadataSources[key].Config = cfg + } + if metadataSource.Value != nil { + value, err := structpb.NewValue(metadataSource.Value) + if err != nil { + return nil, err + } + policyAppealConfigProto.MetadataSources[key].Value = value + } + } + + return policyAppealConfigProto, nil } func (a *adapter) FromResourceProto(r *guardianv1beta1.Resource) *domain.Resource { diff --git a/api/handler/v1beta1/grpc.go b/api/handler/v1beta1/grpc.go index a8d29e392..1ae90844b 100644 --- a/api/handler/v1beta1/grpc.go +++ b/api/handler/v1beta1/grpc.go @@ -27,7 +27,7 @@ type ProtoAdapter interface { FromPolicyProto(*guardianv1beta1.Policy) *domain.Policy ToPolicyProto(*domain.Policy) (*guardianv1beta1.Policy, error) - ToPolicyAppealConfigProto(policy *domain.Policy) *guardianv1beta1.PolicyAppealConfig + ToPolicyAppealConfigProto(policy *domain.Policy) (*guardianv1beta1.PolicyAppealConfig, error) FromResourceProto(*guardianv1beta1.Resource) *domain.Resource ToResourceProto(*domain.Resource) (*guardianv1beta1.Resource, error) diff --git a/api/handler/v1beta1/policy.go b/api/handler/v1beta1/policy.go index 5443245cd..6f47b8252 100644 --- a/api/handler/v1beta1/policy.go +++ b/api/handler/v1beta1/policy.go @@ -18,9 +18,7 @@ func (s *GRPCServer) ListPolicies(ctx context.Context, req *guardianv1beta1.List policyProtos := []*guardianv1beta1.Policy{} for _, p := range policies { - if p.IAM != nil { - p.IAM.Config = nil - } + p.RemoveSensitiveValues() policyProto, err := s.adapter.ToPolicyProto(p) if err != nil { return nil, s.internalError(ctx, "failed to parse policy %v: %v", p.ID, err) @@ -44,9 +42,7 @@ func (s *GRPCServer) GetPolicy(ctx context.Context, req *guardianv1beta1.GetPoli } } - if p.IAM != nil { - p.IAM.Config = nil - } + p.RemoveSensitiveValues() policyProto, err := s.adapter.ToPolicyProto(p) if err != nil { return nil, s.internalError(ctx, "failed to parse policy: %v", err) @@ -116,7 +112,11 @@ func (s *GRPCServer) GetPolicyPreferences(ctx context.Context, req *guardianv1be } } - appealConfigProto := s.adapter.ToPolicyAppealConfigProto(p) + p.RemoveSensitiveValues() + appealConfigProto, err := s.adapter.ToPolicyAppealConfigProto(p) + if err != nil { + return nil, s.internalError(ctx, "failed to parse policy preferences: %v", err) + } return &guardianv1beta1.GetPolicyPreferencesResponse{ Appeal: appealConfigProto, diff --git a/api/handler/v1beta1/policy_test.go b/api/handler/v1beta1/policy_test.go index bbecf19a6..aae9cd95c 100644 --- a/api/handler/v1beta1/policy_test.go +++ b/api/handler/v1beta1/policy_test.go @@ -28,6 +28,13 @@ func (s *GrpcHandlersSuite) TestListPolicies() { Config: expectedIAMConfig, Provider: "provider", }, + Appeal: &guardianv1beta1.PolicyAppealConfig{ + MetadataSources: map[string]*guardianv1beta1.PolicyAppealConfig_MetadataSource{ + "test-source": { + Name: "test-source", + }, + }, + }, }, }, } @@ -38,6 +45,14 @@ func (s *GrpcHandlersSuite) TestListPolicies() { Config: map[string]interface{}{"foo": "bar"}, Provider: "provider", }, + AppealConfig: &domain.PolicyAppealConfig{ + MetadataSources: map[string]*domain.AppealMetadataSource{ + "test-source": { + Name: "test-source", + Config: map[string]interface{}{"foo": "bar"}, + }, + }, + }, }, } s.policyService.EXPECT().Find(mock.MatchedBy(func(ctx context.Context) bool { return true })).Return(dummyPolicies, nil).Once() @@ -403,11 +418,24 @@ func (s *GrpcHandlersSuite) TestCreatePolicy() { Description: "Please provide the name of the team you are in", }, }, + MetadataSources: map[string]*domain.AppealMetadataSource{ + "test-source": { + Name: "test-source", + Description: "test-description", + Type: "test-type", + Config: map[string]interface{}{"foo": "bar"}, + Value: "test-value", + }, + }, }, } expectedVersion := uint(1) expectedIAMConfig, err := structpb.NewValue(expectedPolicy.IAM.Config) s.Require().NoError(err) + expectedMetadataSourceConfig, err := structpb.NewValue(expectedPolicy.AppealConfig.MetadataSources["test-source"].Config) + s.Require().NoError(err) + expectedMetadataSourceValue, err := structpb.NewValue(expectedPolicy.AppealConfig.MetadataSources["test-source"].Value) + s.Require().NoError(err) expectedResponse := &guardianv1beta1.CreatePolicyResponse{ Policy: &guardianv1beta1.Policy{ Id: expectedPolicy.ID, @@ -464,6 +492,15 @@ func (s *GrpcHandlersSuite) TestCreatePolicy() { Description: "Please provide the name of the team you are in", }, }, + MetadataSources: map[string]*guardianv1beta1.PolicyAppealConfig_MetadataSource{ + "test-source": { + Name: "test-source", + Description: "test-description", + Type: "test-type", + Config: expectedMetadataSourceConfig, + Value: expectedMetadataSourceValue, + }, + }, }, CreatedAt: timestamppb.New(timeNow), UpdatedAt: timestamppb.New(timeNow), @@ -531,6 +568,15 @@ func (s *GrpcHandlersSuite) TestCreatePolicy() { Description: "Please provide the name of the team you are in", }, }, + MetadataSources: map[string]*guardianv1beta1.PolicyAppealConfig_MetadataSource{ + "test-source": { + Name: "test-source", + Description: "test-description", + Type: "test-type", + Config: expectedMetadataSourceConfig, + Value: expectedMetadataSourceValue, + }, + }, }, }, } @@ -798,3 +844,92 @@ func (s *GrpcHandlersSuite) TestUpdatePolicy() { s.policyService.AssertExpectations(s.T()) }) } + +func (s *GrpcHandlersSuite) TestGetPolicyPreferences() { + s.Run("should return policy preferences on success", func() { + s.setup() + + dummyPolicy := &domain.Policy{ + ID: "test-policy", + Version: 1, + AppealConfig: &domain.PolicyAppealConfig{ + AllowActiveAccessExtensionIn: "24h", + AllowPermanentAccess: true, + MetadataSources: map[string]*domain.AppealMetadataSource{ + "test-source": { + Name: "test-source", + Config: map[string]interface{}{"foo": "bar"}, + }, + }, + }, + } + + s.policyService.EXPECT(). + GetOne(mock.MatchedBy(func(ctx context.Context) bool { return true }), dummyPolicy.ID, dummyPolicy.Version). + Return(dummyPolicy, nil).Once() + expectedResponse := &guardianv1beta1.GetPolicyPreferencesResponse{ + Appeal: &guardianv1beta1.PolicyAppealConfig{ + AllowActiveAccessExtensionIn: "24h", + AllowPermanentAccess: true, + MetadataSources: map[string]*guardianv1beta1.PolicyAppealConfig_MetadataSource{ + "test-source": { + Name: "test-source", + }, + }, + }, + } + + req := &guardianv1beta1.GetPolicyPreferencesRequest{ + Id: dummyPolicy.ID, + Version: uint32(dummyPolicy.Version), + } + res, err := s.grpcServer.GetPolicyPreferences(context.Background(), req) + + s.NoError(err) + s.Equal(expectedResponse, res) + s.Nil(res.Appeal.MetadataSources["test-source"].Config) // config that might contain sensitive value should be removed + s.policyService.AssertExpectations(s.T()) + }) + + s.Run("should return not found error if policy not found", func() { + s.setup() + + policyID := "test-policy" + policyVersion := uint(1) + expectedError := policy.ErrPolicyNotFound + s.policyService.EXPECT(). + GetOne(mock.MatchedBy(func(ctx context.Context) bool { return true }), policyID, policyVersion). + Return(nil, expectedError).Once() + + req := &guardianv1beta1.GetPolicyPreferencesRequest{ + Id: policyID, + Version: uint32(policyVersion), + } + res, err := s.grpcServer.GetPolicyPreferences(context.Background(), req) + + s.Equal(codes.NotFound, status.Code(err)) + s.Nil(res) + s.policyService.AssertExpectations(s.T()) + }) + + s.Run("should return internal error if policy service returns error", func() { + s.setup() + + policyID := "test-policy" + policyVersion := uint(1) + expectedError := errors.New("random error") + s.policyService.EXPECT(). + GetOne(mock.MatchedBy(func(ctx context.Context) bool { return true }), policyID, policyVersion). + Return(nil, expectedError).Once() + + req := &guardianv1beta1.GetPolicyPreferencesRequest{ + Id: policyID, + Version: uint32(policyVersion), + } + res, err := s.grpcServer.GetPolicyPreferences(context.Background(), req) + + s.Equal(codes.Internal, status.Code(err)) + s.Nil(res) + s.policyService.AssertExpectations(s.T()) + }) +} diff --git a/api/proto/gotocompany/guardian/v1beta1/guardian.pb.go b/api/proto/gotocompany/guardian/v1beta1/guardian.pb.go index b56bb9ca4..dd9350d00 100644 --- a/api/proto/gotocompany/guardian/v1beta1/guardian.pb.go +++ b/api/proto/gotocompany/guardian/v1beta1/guardian.pb.go @@ -5077,12 +5077,13 @@ type PolicyAppealConfig struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DurationOptions []*PolicyAppealConfig_DurationOptions `protobuf:"bytes,1,rep,name=duration_options,json=durationOptions,proto3" json:"duration_options,omitempty"` - AllowOnBehalf bool `protobuf:"varint,2,opt,name=allow_on_behalf,json=allowOnBehalf,proto3" json:"allow_on_behalf,omitempty"` - AllowPermanentAccess bool `protobuf:"varint,3,opt,name=allow_permanent_access,json=allowPermanentAccess,proto3" json:"allow_permanent_access,omitempty"` - AllowActiveAccessExtensionIn string `protobuf:"bytes,4,opt,name=allow_active_access_extension_in,json=allowActiveAccessExtensionIn,proto3" json:"allow_active_access_extension_in,omitempty"` - Questions []*PolicyAppealConfig_Question `protobuf:"bytes,5,rep,name=questions,proto3" json:"questions,omitempty"` - AllowCreatorDetailsFailure bool `protobuf:"varint,6,opt,name=allow_creator_details_failure,json=allowCreatorDetailsFailure,proto3" json:"allow_creator_details_failure,omitempty"` + DurationOptions []*PolicyAppealConfig_DurationOptions `protobuf:"bytes,1,rep,name=duration_options,json=durationOptions,proto3" json:"duration_options,omitempty"` + AllowOnBehalf bool `protobuf:"varint,2,opt,name=allow_on_behalf,json=allowOnBehalf,proto3" json:"allow_on_behalf,omitempty"` + AllowPermanentAccess bool `protobuf:"varint,3,opt,name=allow_permanent_access,json=allowPermanentAccess,proto3" json:"allow_permanent_access,omitempty"` + AllowActiveAccessExtensionIn string `protobuf:"bytes,4,opt,name=allow_active_access_extension_in,json=allowActiveAccessExtensionIn,proto3" json:"allow_active_access_extension_in,omitempty"` + Questions []*PolicyAppealConfig_Question `protobuf:"bytes,5,rep,name=questions,proto3" json:"questions,omitempty"` + AllowCreatorDetailsFailure bool `protobuf:"varint,6,opt,name=allow_creator_details_failure,json=allowCreatorDetailsFailure,proto3" json:"allow_creator_details_failure,omitempty"` + MetadataSources map[string]*PolicyAppealConfig_MetadataSource `protobuf:"bytes,7,rep,name=metadata_sources,json=metadataSources,proto3" json:"metadata_sources,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *PolicyAppealConfig) Reset() { @@ -5159,6 +5160,13 @@ func (x *PolicyAppealConfig) GetAllowCreatorDetailsFailure() bool { return false } +func (x *PolicyAppealConfig) GetMetadataSources() map[string]*PolicyAppealConfig_MetadataSource { + if x != nil { + return x.MetadataSources + } + return nil +} + // Policy is a configurable steps for appeal's approval type Policy struct { state protoimpl.MessageState @@ -6723,6 +6731,85 @@ func (x *PolicyAppealConfig_Question) GetDescription() string { return "" } +type PolicyAppealConfig_MetadataSource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` + Config *structpb.Value `protobuf:"bytes,4,opt,name=config,proto3" json:"config,omitempty"` + Value *structpb.Value `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *PolicyAppealConfig_MetadataSource) Reset() { + *x = PolicyAppealConfig_MetadataSource{} + if protoimpl.UnsafeEnabled { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PolicyAppealConfig_MetadataSource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PolicyAppealConfig_MetadataSource) ProtoMessage() {} + +func (x *PolicyAppealConfig_MetadataSource) ProtoReflect() protoreflect.Message { + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PolicyAppealConfig_MetadataSource.ProtoReflect.Descriptor instead. +func (*PolicyAppealConfig_MetadataSource) Descriptor() ([]byte, []int) { + return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP(), []int{84, 2} +} + +func (x *PolicyAppealConfig_MetadataSource) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PolicyAppealConfig_MetadataSource) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *PolicyAppealConfig_MetadataSource) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *PolicyAppealConfig_MetadataSource) GetConfig() *structpb.Value { + if x != nil { + return x.Config + } + return nil +} + +func (x *PolicyAppealConfig_MetadataSource) GetValue() *structpb.Value { + if x != nil { + return x.Value + } + return nil +} + type Policy_ApprovalStep struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6741,7 +6828,7 @@ type Policy_ApprovalStep struct { func (x *Policy_ApprovalStep) Reset() { *x = Policy_ApprovalStep{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6754,7 +6841,7 @@ func (x *Policy_ApprovalStep) String() string { func (*Policy_ApprovalStep) ProtoMessage() {} func (x *Policy_ApprovalStep) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6838,7 +6925,7 @@ type Policy_Requirement struct { func (x *Policy_Requirement) Reset() { *x = Policy_Requirement{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6851,7 +6938,7 @@ func (x *Policy_Requirement) String() string { func (*Policy_Requirement) ProtoMessage() {} func (x *Policy_Requirement) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6894,7 +6981,7 @@ type Policy_IAM struct { func (x *Policy_IAM) Reset() { *x = Policy_IAM{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[105] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6907,7 +6994,7 @@ func (x *Policy_IAM) String() string { func (*Policy_IAM) ProtoMessage() {} func (x *Policy_IAM) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[105] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6961,7 +7048,7 @@ type Policy_Requirement_RequirementTrigger struct { func (x *Policy_Requirement_RequirementTrigger) Reset() { *x = Policy_Requirement_RequirementTrigger{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6974,7 +7061,7 @@ func (x *Policy_Requirement_RequirementTrigger) String() string { func (*Policy_Requirement_RequirementTrigger) ProtoMessage() {} func (x *Policy_Requirement_RequirementTrigger) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7053,7 +7140,7 @@ type Policy_Requirement_AdditionalAppeal struct { func (x *Policy_Requirement_AdditionalAppeal) Reset() { *x = Policy_Requirement_AdditionalAppeal{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7066,7 +7153,7 @@ func (x *Policy_Requirement_AdditionalAppeal) String() string { func (*Policy_Requirement_AdditionalAppeal) ProtoMessage() {} func (x *Policy_Requirement_AdditionalAppeal) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7125,7 +7212,7 @@ type Policy_Requirement_AdditionalAppeal_ResourceIdentifier struct { func (x *Policy_Requirement_AdditionalAppeal_ResourceIdentifier) Reset() { *x = Policy_Requirement_AdditionalAppeal_ResourceIdentifier{} if protoimpl.UnsafeEnabled { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7138,7 +7225,7 @@ func (x *Policy_Requirement_AdditionalAppeal_ResourceIdentifier) String() string func (*Policy_Requirement_AdditionalAppeal_ResourceIdentifier) ProtoMessage() {} func (x *Policy_Requirement_AdditionalAppeal_ResourceIdentifier) ProtoReflect() protoreflect.Message { - mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108] + mi := &file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7921,7 +8008,7 @@ var file_gotocompany_guardian_v1beta1_guardian_proto_rawDesc = []byte{ 0x0e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x02, 0x65, 0x71, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x02, 0x65, 0x71, 0x22, 0xf8, 0x04, 0x0a, 0x12, 0x50, 0x6f, 0x6c, 0x69, + 0x6c, 0x75, 0x65, 0x52, 0x02, 0x65, 0x71, 0x22, 0xab, 0x08, 0x0a, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6b, 0x0a, 0x10, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, @@ -7949,754 +8036,781 @@ var file_gotocompany_guardian_v1beta1_guardian_proto_rawDesc = []byte{ 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x1a, 0x3b, 0x0a, - 0x0f, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x76, 0x0a, 0x08, 0x51, 0x75, - 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0xf4, 0x0f, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x05, 0x73, 0x74, 0x65, - 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x53, 0x74, 0x65, 0x70, 0x52, 0x05, 0x73, 0x74, 0x65, - 0x70, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x41, 0x74, 0x12, 0x54, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x03, 0x69, 0x61, 0x6d, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x49, 0x41, 0x4d, 0x52, - 0x03, 0x69, 0x61, 0x6d, 0x12, 0x48, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x1a, 0xff, - 0x01, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x53, 0x74, 0x65, 0x70, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x77, 0x68, 0x65, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x77, 0x68, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x5f, 0x69, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x49, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x9e, 0x07, 0x0a, 0x0b, - 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x02, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x70, 0x0a, + 0x10, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x02, 0x6f, 0x6e, - 0x12, 0x5b, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x52, 0x07, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x1a, 0xa1, 0x02, - 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, - 0x67, 0x67, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x75, 0x72, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x1a, 0xb8, 0x03, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x70, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x92, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x23, - 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, - 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x1a, 0xda, 0x01, 0x0a, - 0x03, 0x49, 0x41, 0x4d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, + 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, + 0x3b, 0x0a, 0x0f, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x76, 0x0a, 0x08, + 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xb8, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x49, 0x41, 0x4d, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x39, - 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, 0x0a, 0x0d, 0x41, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, - 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, + 0x83, 0x01, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 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, 0x55, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf4, 0x0f, 0x0a, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x05, + 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x53, 0x74, 0x65, 0x70, 0x52, 0x05, + 0x73, 0x74, 0x65, 0x70, 0x73, 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xcc, 0x07, 0x0a, 0x06, - 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x48, 0x0a, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x30, 0x0a, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x20, - 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x15, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x39, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, - 0x72, 0x61, 0x6e, 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, - 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x4a, 0x04, - 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x22, 0xa7, 0x03, 0x0a, 0x08, 0x41, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x54, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x03, 0x69, + 0x61, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x06, - 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xeb, 0x04, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x49, + 0x41, 0x4d, 0x52, 0x03, 0x69, 0x61, 0x6d, 0x12, 0x48, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, + 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x41, 0x70, 0x70, + 0x65, 0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, + 0x6c, 0x1a, 0xff, 0x01, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x53, 0x74, + 0x65, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x77, + 0x68, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x77, 0x68, 0x65, 0x6e, 0x12, + 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x5f, 0x69, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x49, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x6a, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x9e, + 0x07, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x53, + 0x0a, 0x02, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, + 0x02, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x07, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x07, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, + 0x1a, 0xa1, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, + 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x0a, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xb8, 0x03, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x70, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x54, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, + 0x6f, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, + 0x45, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x92, 0x01, 0x0a, 0x12, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, + 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x72, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, - 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, - 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6c, - 0x6f, 0x62, 0x61, 0x6c, 0x55, 0x72, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xbf, 0x06, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6e, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x1a, + 0xda, 0x01, 0x0a, 0x03, 0x49, 0x41, 0x4d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x4c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x49, 0x41, 0x4d, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x1a, 0x39, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x70, 0x0a, 0x0d, + 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, - 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x42, 0x79, 0x12, 0x39, - 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x76, - 0x6f, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, 0x39, 0x0a, - 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x06, 0x61, - 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, - 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x14, - 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x22, 0xf7, 0x04, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, - 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xcc, + 0x07, 0x0a, 0x06, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x48, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x44, + 0x0a, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x12, + 0x30, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x05, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x0e, 0x10, + 0x0f, 0x4a, 0x04, 0x08, 0x0f, 0x10, 0x10, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x22, 0xa7, 0x03, + 0x0a, 0x08, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, + 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, + 0x6c, 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0xeb, 0x04, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x55, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, + 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x2f, 0x0a, - 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x6c, 0x61, - 0x74, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0x97, - 0x2f, 0x0a, 0x0f, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, + 0x73, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x69, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, + 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x72, 0x65, 0x6e, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, - 0xa3, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x67, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x55, 0x72, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 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, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbf, 0x06, 0x0a, 0x05, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x6f, + 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x72, 0x6f, 0x6c, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, + 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, + 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x62, 0x79, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x42, + 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x41, 0x74, 0x12, 0x23, 0x0a, 0x0d, + 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0xdd, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x60, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, 0x3a, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x37, 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x74, 0x79, 0x70, 0x65, - 0x7d, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x75, 0x72, 0x6e, 0x7d, 0x1a, 0x17, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x61, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xad, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x7d, - 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0xa8, 0x01, 0x0a, 0x10, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, + 0x52, 0x06, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x70, + 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x69, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x69, 0x6e, + 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0xf7, 0x04, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, + 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, + 0x0a, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x49, 0x64, + 0x12, 0x2f, 0x0a, 0x13, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x32, 0x97, 0x2f, 0x0a, 0x0f, 0x47, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x94, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x94, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0x93, 0x01, 0x0a, + 0x0b, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x67, 0x6f, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x12, 0xdd, 0x01, 0x0a, 0x0e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x60, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, + 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5a, 0x37, 0x3a, 0x06, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x1a, 0x2d, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x74, + 0x79, 0x70, 0x65, 0x7d, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x75, 0x72, 0x6e, + 0x7d, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x0e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x33, 0x2e, + 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, + 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xad, 0x01, 0x0a, 0x09, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, + 0x12, 0x37, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0xa8, 0x01, 0x0a, 0x10, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x3a, 0x01, 0x2a, 0x22, 0x1a, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x69, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x12, 0x94, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x79, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x33, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, - 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, + 0x12, 0x29, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x0c, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x69, 0x65, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x06, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x20, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x16, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x12, 0xcc, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x39, 0x2e, 0x67, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, - 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, - 0xa6, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x16, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xcc, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, + 0x39, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, + 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, - 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x33, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, - 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x34, 0x2e, 0x67, 0x6f, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x61, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x93, 0x01, 0x0a, + 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x12, 0xa6, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x73, 0x12, 0x8b, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x3a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x1a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x0e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x33, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x19, 0x2a, 0x17, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0f, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x34, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, + 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, + 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x65, + 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, + 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0x8b, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x41, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0c, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, + 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1e, 0x1a, 0x1c, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, - 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, - 0x12, 0x92, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x41, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x1a, 0x1c, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, + 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x12, 0x92, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x65, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, - 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, - 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x36, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, - 0x65, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x0d, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x32, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, + 0x65, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x36, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0x94, + 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, + 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x12, 0xbc, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x3a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x2f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xbd, 0x01, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, + 0x6f, 0x76, 0x65, 0x72, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x43, 0x3a, 0x01, 0x2a, 0x22, 0x3e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, + 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, + 0x76, 0x65, 0x72, 0x73, 0x12, 0xcb, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, + 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, + 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x2a, 0x46, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, + 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x12, 0x2f, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, - 0x6c, 0x73, 0x12, 0xbc, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x97, 0x01, + 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, + 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x3a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x2f, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x12, 0xbd, 0x01, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, - 0x72, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, - 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x3a, 0x01, - 0x2a, 0x22, 0x3e, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, - 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, - 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, - 0x73, 0x12, 0xcb, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x65, 0x72, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, + 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, - 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x2a, 0x46, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x61, 0x70, 0x70, 0x65, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x65, 0x61, - 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, - 0x70, 0x72, 0x6f, 0x76, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x7d, 0x12, - 0x88, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x2f, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x0e, 0x4c, - 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x33, 0x2e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, - 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, - 0x12, 0x12, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x67, 0x72, - 0x61, 0x6e, 0x74, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x67, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, - 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x12, 0x87, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x2d, - 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, - 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, - 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, - 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, - 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x32, 0x14, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x12, 0x9a, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, + 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6d, 0x65, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x72, + 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x87, 0x01, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, - 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, - 0x2a, 0x1a, 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0x98, - 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, - 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, - 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, - 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, + 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x93, + 0x01, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x12, 0x30, + 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, + 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, + 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x32, 0x14, + 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x9a, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x12, 0x30, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, + 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x20, 0x3a, 0x01, 0x2a, 0x1a, 0x1b, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, + 0x65, 0x12, 0x98, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, - 0x2a, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0xbc, 0x01, 0x0a, 0x18, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, - 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, - 0x22, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, 0x61, 0x6e, 0x74, - 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x48, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x6e, 0x2f, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x3b, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x92, 0x41, 0x0c, 0x12, 0x07, 0x32, 0x05, 0x30, 0x2e, 0x31, 0x2e, 0x30, 0x2a, - 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1b, 0x3a, 0x01, 0x2a, 0x1a, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x12, 0xbc, 0x01, 0x0a, + 0x18, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, 0x6f, + 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x3d, 0x2e, 0x67, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, 0x67, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x6e, 0x79, 0x2e, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, + 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x72, + 0x61, 0x6e, 0x74, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x48, 0x5a, 0x37, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x74, 0x6f, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x6e, 0x2f, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x2f, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x67, 0x75, 0x61, 0x72, 0x64, 0x69, 0x61, 0x6e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x92, 0x41, 0x0c, 0x12, 0x07, 0x32, 0x05, 0x30, 0x2e, 0x31, + 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8711,123 +8825,125 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_rawDescGZIP() []byte { return file_gotocompany_guardian_v1beta1_guardian_proto_rawDescData } -var file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes = make([]protoimpl.MessageInfo, 112) +var file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes = make([]protoimpl.MessageInfo, 114) var file_gotocompany_guardian_v1beta1_guardian_proto_goTypes = []interface{}{ - (*ListProvidersRequest)(nil), // 0: gotocompany.guardian.v1beta1.ListProvidersRequest - (*ListProvidersResponse)(nil), // 1: gotocompany.guardian.v1beta1.ListProvidersResponse - (*GetProviderRequest)(nil), // 2: gotocompany.guardian.v1beta1.GetProviderRequest - (*GetProviderResponse)(nil), // 3: gotocompany.guardian.v1beta1.GetProviderResponse - (*GetProviderTypesRequest)(nil), // 4: gotocompany.guardian.v1beta1.GetProviderTypesRequest - (*GetProviderTypesResponse)(nil), // 5: gotocompany.guardian.v1beta1.GetProviderTypesResponse - (*CreateProviderRequest)(nil), // 6: gotocompany.guardian.v1beta1.CreateProviderRequest - (*CreateProviderResponse)(nil), // 7: gotocompany.guardian.v1beta1.CreateProviderResponse - (*UpdateProviderRequest)(nil), // 8: gotocompany.guardian.v1beta1.UpdateProviderRequest - (*UpdateProviderResponse)(nil), // 9: gotocompany.guardian.v1beta1.UpdateProviderResponse - (*DeleteProviderRequest)(nil), // 10: gotocompany.guardian.v1beta1.DeleteProviderRequest - (*DeleteProviderResponse)(nil), // 11: gotocompany.guardian.v1beta1.DeleteProviderResponse - (*ImportGrantsFromProviderRequest)(nil), // 12: gotocompany.guardian.v1beta1.ImportGrantsFromProviderRequest - (*ImportGrantsFromProviderResponse)(nil), // 13: gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse - (*ListRolesRequest)(nil), // 14: gotocompany.guardian.v1beta1.ListRolesRequest - (*ListRolesResponse)(nil), // 15: gotocompany.guardian.v1beta1.ListRolesResponse - (*ImportActivitiesRequest)(nil), // 16: gotocompany.guardian.v1beta1.ImportActivitiesRequest - (*ImportActivitiesResponse)(nil), // 17: gotocompany.guardian.v1beta1.ImportActivitiesResponse - (*GetActivityRequest)(nil), // 18: gotocompany.guardian.v1beta1.GetActivityRequest - (*GetActivityResponse)(nil), // 19: gotocompany.guardian.v1beta1.GetActivityResponse - (*ListActivitiesRequest)(nil), // 20: gotocompany.guardian.v1beta1.ListActivitiesRequest - (*ListActivitiesResponse)(nil), // 21: gotocompany.guardian.v1beta1.ListActivitiesResponse - (*ListPoliciesRequest)(nil), // 22: gotocompany.guardian.v1beta1.ListPoliciesRequest - (*ListPoliciesResponse)(nil), // 23: gotocompany.guardian.v1beta1.ListPoliciesResponse - (*GetPolicyRequest)(nil), // 24: gotocompany.guardian.v1beta1.GetPolicyRequest - (*GetPolicyPreferencesRequest)(nil), // 25: gotocompany.guardian.v1beta1.GetPolicyPreferencesRequest - (*GetPolicyPreferencesResponse)(nil), // 26: gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse - (*GetPolicyResponse)(nil), // 27: gotocompany.guardian.v1beta1.GetPolicyResponse - (*CreatePolicyRequest)(nil), // 28: gotocompany.guardian.v1beta1.CreatePolicyRequest - (*CreatePolicyResponse)(nil), // 29: gotocompany.guardian.v1beta1.CreatePolicyResponse - (*UpdatePolicyRequest)(nil), // 30: gotocompany.guardian.v1beta1.UpdatePolicyRequest - (*UpdatePolicyResponse)(nil), // 31: gotocompany.guardian.v1beta1.UpdatePolicyResponse - (*ListResourcesRequest)(nil), // 32: gotocompany.guardian.v1beta1.ListResourcesRequest - (*ListResourcesResponse)(nil), // 33: gotocompany.guardian.v1beta1.ListResourcesResponse - (*GetResourceRequest)(nil), // 34: gotocompany.guardian.v1beta1.GetResourceRequest - (*GetResourceResponse)(nil), // 35: gotocompany.guardian.v1beta1.GetResourceResponse - (*UpdateResourceRequest)(nil), // 36: gotocompany.guardian.v1beta1.UpdateResourceRequest - (*UpdateResourceResponse)(nil), // 37: gotocompany.guardian.v1beta1.UpdateResourceResponse - (*DeleteResourceRequest)(nil), // 38: gotocompany.guardian.v1beta1.DeleteResourceRequest - (*DeleteResourceResponse)(nil), // 39: gotocompany.guardian.v1beta1.DeleteResourceResponse - (*ListUserAppealsRequest)(nil), // 40: gotocompany.guardian.v1beta1.ListUserAppealsRequest - (*ListUserAppealsResponse)(nil), // 41: gotocompany.guardian.v1beta1.ListUserAppealsResponse - (*ListAppealsRequest)(nil), // 42: gotocompany.guardian.v1beta1.ListAppealsRequest - (*ListAppealsResponse)(nil), // 43: gotocompany.guardian.v1beta1.ListAppealsResponse - (*GetAppealRequest)(nil), // 44: gotocompany.guardian.v1beta1.GetAppealRequest - (*GetAppealResponse)(nil), // 45: gotocompany.guardian.v1beta1.GetAppealResponse - (*CancelAppealRequest)(nil), // 46: gotocompany.guardian.v1beta1.CancelAppealRequest - (*CancelAppealResponse)(nil), // 47: gotocompany.guardian.v1beta1.CancelAppealResponse - (*RevokeAppealRequest)(nil), // 48: gotocompany.guardian.v1beta1.RevokeAppealRequest - (*RevokeAppealResponse)(nil), // 49: gotocompany.guardian.v1beta1.RevokeAppealResponse - (*RevokeAppealsRequest)(nil), // 50: gotocompany.guardian.v1beta1.RevokeAppealsRequest - (*RevokeAppealsResponse)(nil), // 51: gotocompany.guardian.v1beta1.RevokeAppealsResponse - (*CreateAppealRequest)(nil), // 52: gotocompany.guardian.v1beta1.CreateAppealRequest - (*CreateAppealResponse)(nil), // 53: gotocompany.guardian.v1beta1.CreateAppealResponse - (*ListUserApprovalsRequest)(nil), // 54: gotocompany.guardian.v1beta1.ListUserApprovalsRequest - (*ListUserApprovalsResponse)(nil), // 55: gotocompany.guardian.v1beta1.ListUserApprovalsResponse - (*ListApprovalsRequest)(nil), // 56: gotocompany.guardian.v1beta1.ListApprovalsRequest - (*ListApprovalsResponse)(nil), // 57: gotocompany.guardian.v1beta1.ListApprovalsResponse - (*UpdateApprovalRequest)(nil), // 58: gotocompany.guardian.v1beta1.UpdateApprovalRequest - (*UpdateApprovalResponse)(nil), // 59: gotocompany.guardian.v1beta1.UpdateApprovalResponse - (*AddApproverRequest)(nil), // 60: gotocompany.guardian.v1beta1.AddApproverRequest - (*AddApproverResponse)(nil), // 61: gotocompany.guardian.v1beta1.AddApproverResponse - (*DeleteApproverRequest)(nil), // 62: gotocompany.guardian.v1beta1.DeleteApproverRequest - (*DeleteApproverResponse)(nil), // 63: gotocompany.guardian.v1beta1.DeleteApproverResponse - (*ListGrantsRequest)(nil), // 64: gotocompany.guardian.v1beta1.ListGrantsRequest - (*ListGrantsResponse)(nil), // 65: gotocompany.guardian.v1beta1.ListGrantsResponse - (*ListUserGrantsRequest)(nil), // 66: gotocompany.guardian.v1beta1.ListUserGrantsRequest - (*ListUserGrantsResponse)(nil), // 67: gotocompany.guardian.v1beta1.ListUserGrantsResponse - (*ListUserRolesRequest)(nil), // 68: gotocompany.guardian.v1beta1.ListUserRolesRequest - (*ListUserRolesResponse)(nil), // 69: gotocompany.guardian.v1beta1.ListUserRolesResponse - (*GetGrantRequest)(nil), // 70: gotocompany.guardian.v1beta1.GetGrantRequest - (*GetGrantResponse)(nil), // 71: gotocompany.guardian.v1beta1.GetGrantResponse - (*UpdateGrantRequest)(nil), // 72: gotocompany.guardian.v1beta1.UpdateGrantRequest - (*UpdateGrantResponse)(nil), // 73: gotocompany.guardian.v1beta1.UpdateGrantResponse - (*RevokeGrantRequest)(nil), // 74: gotocompany.guardian.v1beta1.RevokeGrantRequest - (*RevokeGrantResponse)(nil), // 75: gotocompany.guardian.v1beta1.RevokeGrantResponse - (*RevokeGrantsRequest)(nil), // 76: gotocompany.guardian.v1beta1.RevokeGrantsRequest - (*RevokeGrantsResponse)(nil), // 77: gotocompany.guardian.v1beta1.RevokeGrantsResponse - (*Role)(nil), // 78: gotocompany.guardian.v1beta1.Role - (*PolicyConfig)(nil), // 79: gotocompany.guardian.v1beta1.PolicyConfig - (*ProviderConfig)(nil), // 80: gotocompany.guardian.v1beta1.ProviderConfig - (*Provider)(nil), // 81: gotocompany.guardian.v1beta1.Provider - (*ProviderType)(nil), // 82: gotocompany.guardian.v1beta1.ProviderType - (*Condition)(nil), // 83: gotocompany.guardian.v1beta1.Condition - (*PolicyAppealConfig)(nil), // 84: gotocompany.guardian.v1beta1.PolicyAppealConfig - (*Policy)(nil), // 85: gotocompany.guardian.v1beta1.Policy - (*AppealOptions)(nil), // 86: gotocompany.guardian.v1beta1.AppealOptions - (*Appeal)(nil), // 87: gotocompany.guardian.v1beta1.Appeal - (*Approval)(nil), // 88: gotocompany.guardian.v1beta1.Approval - (*Resource)(nil), // 89: gotocompany.guardian.v1beta1.Resource - (*Grant)(nil), // 90: gotocompany.guardian.v1beta1.Grant - (*ProviderActivity)(nil), // 91: gotocompany.guardian.v1beta1.ProviderActivity - (*RevokeAppealRequest_Reason)(nil), // 92: gotocompany.guardian.v1beta1.RevokeAppealRequest.Reason - (*CreateAppealRequest_Resource)(nil), // 93: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource - (*UpdateApprovalRequest_Action)(nil), // 94: gotocompany.guardian.v1beta1.UpdateApprovalRequest.Action - nil, // 95: gotocompany.guardian.v1beta1.ProviderConfig.LabelsEntry - (*ProviderConfig_AppealConfig)(nil), // 96: gotocompany.guardian.v1beta1.ProviderConfig.AppealConfig - (*ProviderConfig_ResourceConfig)(nil), // 97: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig - (*ProviderConfig_ProviderParameter)(nil), // 98: gotocompany.guardian.v1beta1.ProviderConfig.ProviderParameter - (*Condition_MatchCondition)(nil), // 99: gotocompany.guardian.v1beta1.Condition.MatchCondition - (*PolicyAppealConfig_DurationOptions)(nil), // 100: gotocompany.guardian.v1beta1.PolicyAppealConfig.DurationOptions - (*PolicyAppealConfig_Question)(nil), // 101: gotocompany.guardian.v1beta1.PolicyAppealConfig.Question - (*Policy_ApprovalStep)(nil), // 102: gotocompany.guardian.v1beta1.Policy.ApprovalStep - nil, // 103: gotocompany.guardian.v1beta1.Policy.LabelsEntry - (*Policy_Requirement)(nil), // 104: gotocompany.guardian.v1beta1.Policy.Requirement - (*Policy_IAM)(nil), // 105: gotocompany.guardian.v1beta1.Policy.IAM - (*Policy_Requirement_RequirementTrigger)(nil), // 106: gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger - (*Policy_Requirement_AdditionalAppeal)(nil), // 107: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal - (*Policy_Requirement_AdditionalAppeal_ResourceIdentifier)(nil), // 108: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.ResourceIdentifier - nil, // 109: gotocompany.guardian.v1beta1.Policy.IAM.SchemaEntry - nil, // 110: gotocompany.guardian.v1beta1.Appeal.LabelsEntry - nil, // 111: gotocompany.guardian.v1beta1.Resource.LabelsEntry - (*timestamppb.Timestamp)(nil), // 112: google.protobuf.Timestamp - (*structpb.Value)(nil), // 113: google.protobuf.Value - (*structpb.Struct)(nil), // 114: google.protobuf.Struct + (*ListProvidersRequest)(nil), // 0: gotocompany.guardian.v1beta1.ListProvidersRequest + (*ListProvidersResponse)(nil), // 1: gotocompany.guardian.v1beta1.ListProvidersResponse + (*GetProviderRequest)(nil), // 2: gotocompany.guardian.v1beta1.GetProviderRequest + (*GetProviderResponse)(nil), // 3: gotocompany.guardian.v1beta1.GetProviderResponse + (*GetProviderTypesRequest)(nil), // 4: gotocompany.guardian.v1beta1.GetProviderTypesRequest + (*GetProviderTypesResponse)(nil), // 5: gotocompany.guardian.v1beta1.GetProviderTypesResponse + (*CreateProviderRequest)(nil), // 6: gotocompany.guardian.v1beta1.CreateProviderRequest + (*CreateProviderResponse)(nil), // 7: gotocompany.guardian.v1beta1.CreateProviderResponse + (*UpdateProviderRequest)(nil), // 8: gotocompany.guardian.v1beta1.UpdateProviderRequest + (*UpdateProviderResponse)(nil), // 9: gotocompany.guardian.v1beta1.UpdateProviderResponse + (*DeleteProviderRequest)(nil), // 10: gotocompany.guardian.v1beta1.DeleteProviderRequest + (*DeleteProviderResponse)(nil), // 11: gotocompany.guardian.v1beta1.DeleteProviderResponse + (*ImportGrantsFromProviderRequest)(nil), // 12: gotocompany.guardian.v1beta1.ImportGrantsFromProviderRequest + (*ImportGrantsFromProviderResponse)(nil), // 13: gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse + (*ListRolesRequest)(nil), // 14: gotocompany.guardian.v1beta1.ListRolesRequest + (*ListRolesResponse)(nil), // 15: gotocompany.guardian.v1beta1.ListRolesResponse + (*ImportActivitiesRequest)(nil), // 16: gotocompany.guardian.v1beta1.ImportActivitiesRequest + (*ImportActivitiesResponse)(nil), // 17: gotocompany.guardian.v1beta1.ImportActivitiesResponse + (*GetActivityRequest)(nil), // 18: gotocompany.guardian.v1beta1.GetActivityRequest + (*GetActivityResponse)(nil), // 19: gotocompany.guardian.v1beta1.GetActivityResponse + (*ListActivitiesRequest)(nil), // 20: gotocompany.guardian.v1beta1.ListActivitiesRequest + (*ListActivitiesResponse)(nil), // 21: gotocompany.guardian.v1beta1.ListActivitiesResponse + (*ListPoliciesRequest)(nil), // 22: gotocompany.guardian.v1beta1.ListPoliciesRequest + (*ListPoliciesResponse)(nil), // 23: gotocompany.guardian.v1beta1.ListPoliciesResponse + (*GetPolicyRequest)(nil), // 24: gotocompany.guardian.v1beta1.GetPolicyRequest + (*GetPolicyPreferencesRequest)(nil), // 25: gotocompany.guardian.v1beta1.GetPolicyPreferencesRequest + (*GetPolicyPreferencesResponse)(nil), // 26: gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse + (*GetPolicyResponse)(nil), // 27: gotocompany.guardian.v1beta1.GetPolicyResponse + (*CreatePolicyRequest)(nil), // 28: gotocompany.guardian.v1beta1.CreatePolicyRequest + (*CreatePolicyResponse)(nil), // 29: gotocompany.guardian.v1beta1.CreatePolicyResponse + (*UpdatePolicyRequest)(nil), // 30: gotocompany.guardian.v1beta1.UpdatePolicyRequest + (*UpdatePolicyResponse)(nil), // 31: gotocompany.guardian.v1beta1.UpdatePolicyResponse + (*ListResourcesRequest)(nil), // 32: gotocompany.guardian.v1beta1.ListResourcesRequest + (*ListResourcesResponse)(nil), // 33: gotocompany.guardian.v1beta1.ListResourcesResponse + (*GetResourceRequest)(nil), // 34: gotocompany.guardian.v1beta1.GetResourceRequest + (*GetResourceResponse)(nil), // 35: gotocompany.guardian.v1beta1.GetResourceResponse + (*UpdateResourceRequest)(nil), // 36: gotocompany.guardian.v1beta1.UpdateResourceRequest + (*UpdateResourceResponse)(nil), // 37: gotocompany.guardian.v1beta1.UpdateResourceResponse + (*DeleteResourceRequest)(nil), // 38: gotocompany.guardian.v1beta1.DeleteResourceRequest + (*DeleteResourceResponse)(nil), // 39: gotocompany.guardian.v1beta1.DeleteResourceResponse + (*ListUserAppealsRequest)(nil), // 40: gotocompany.guardian.v1beta1.ListUserAppealsRequest + (*ListUserAppealsResponse)(nil), // 41: gotocompany.guardian.v1beta1.ListUserAppealsResponse + (*ListAppealsRequest)(nil), // 42: gotocompany.guardian.v1beta1.ListAppealsRequest + (*ListAppealsResponse)(nil), // 43: gotocompany.guardian.v1beta1.ListAppealsResponse + (*GetAppealRequest)(nil), // 44: gotocompany.guardian.v1beta1.GetAppealRequest + (*GetAppealResponse)(nil), // 45: gotocompany.guardian.v1beta1.GetAppealResponse + (*CancelAppealRequest)(nil), // 46: gotocompany.guardian.v1beta1.CancelAppealRequest + (*CancelAppealResponse)(nil), // 47: gotocompany.guardian.v1beta1.CancelAppealResponse + (*RevokeAppealRequest)(nil), // 48: gotocompany.guardian.v1beta1.RevokeAppealRequest + (*RevokeAppealResponse)(nil), // 49: gotocompany.guardian.v1beta1.RevokeAppealResponse + (*RevokeAppealsRequest)(nil), // 50: gotocompany.guardian.v1beta1.RevokeAppealsRequest + (*RevokeAppealsResponse)(nil), // 51: gotocompany.guardian.v1beta1.RevokeAppealsResponse + (*CreateAppealRequest)(nil), // 52: gotocompany.guardian.v1beta1.CreateAppealRequest + (*CreateAppealResponse)(nil), // 53: gotocompany.guardian.v1beta1.CreateAppealResponse + (*ListUserApprovalsRequest)(nil), // 54: gotocompany.guardian.v1beta1.ListUserApprovalsRequest + (*ListUserApprovalsResponse)(nil), // 55: gotocompany.guardian.v1beta1.ListUserApprovalsResponse + (*ListApprovalsRequest)(nil), // 56: gotocompany.guardian.v1beta1.ListApprovalsRequest + (*ListApprovalsResponse)(nil), // 57: gotocompany.guardian.v1beta1.ListApprovalsResponse + (*UpdateApprovalRequest)(nil), // 58: gotocompany.guardian.v1beta1.UpdateApprovalRequest + (*UpdateApprovalResponse)(nil), // 59: gotocompany.guardian.v1beta1.UpdateApprovalResponse + (*AddApproverRequest)(nil), // 60: gotocompany.guardian.v1beta1.AddApproverRequest + (*AddApproverResponse)(nil), // 61: gotocompany.guardian.v1beta1.AddApproverResponse + (*DeleteApproverRequest)(nil), // 62: gotocompany.guardian.v1beta1.DeleteApproverRequest + (*DeleteApproverResponse)(nil), // 63: gotocompany.guardian.v1beta1.DeleteApproverResponse + (*ListGrantsRequest)(nil), // 64: gotocompany.guardian.v1beta1.ListGrantsRequest + (*ListGrantsResponse)(nil), // 65: gotocompany.guardian.v1beta1.ListGrantsResponse + (*ListUserGrantsRequest)(nil), // 66: gotocompany.guardian.v1beta1.ListUserGrantsRequest + (*ListUserGrantsResponse)(nil), // 67: gotocompany.guardian.v1beta1.ListUserGrantsResponse + (*ListUserRolesRequest)(nil), // 68: gotocompany.guardian.v1beta1.ListUserRolesRequest + (*ListUserRolesResponse)(nil), // 69: gotocompany.guardian.v1beta1.ListUserRolesResponse + (*GetGrantRequest)(nil), // 70: gotocompany.guardian.v1beta1.GetGrantRequest + (*GetGrantResponse)(nil), // 71: gotocompany.guardian.v1beta1.GetGrantResponse + (*UpdateGrantRequest)(nil), // 72: gotocompany.guardian.v1beta1.UpdateGrantRequest + (*UpdateGrantResponse)(nil), // 73: gotocompany.guardian.v1beta1.UpdateGrantResponse + (*RevokeGrantRequest)(nil), // 74: gotocompany.guardian.v1beta1.RevokeGrantRequest + (*RevokeGrantResponse)(nil), // 75: gotocompany.guardian.v1beta1.RevokeGrantResponse + (*RevokeGrantsRequest)(nil), // 76: gotocompany.guardian.v1beta1.RevokeGrantsRequest + (*RevokeGrantsResponse)(nil), // 77: gotocompany.guardian.v1beta1.RevokeGrantsResponse + (*Role)(nil), // 78: gotocompany.guardian.v1beta1.Role + (*PolicyConfig)(nil), // 79: gotocompany.guardian.v1beta1.PolicyConfig + (*ProviderConfig)(nil), // 80: gotocompany.guardian.v1beta1.ProviderConfig + (*Provider)(nil), // 81: gotocompany.guardian.v1beta1.Provider + (*ProviderType)(nil), // 82: gotocompany.guardian.v1beta1.ProviderType + (*Condition)(nil), // 83: gotocompany.guardian.v1beta1.Condition + (*PolicyAppealConfig)(nil), // 84: gotocompany.guardian.v1beta1.PolicyAppealConfig + (*Policy)(nil), // 85: gotocompany.guardian.v1beta1.Policy + (*AppealOptions)(nil), // 86: gotocompany.guardian.v1beta1.AppealOptions + (*Appeal)(nil), // 87: gotocompany.guardian.v1beta1.Appeal + (*Approval)(nil), // 88: gotocompany.guardian.v1beta1.Approval + (*Resource)(nil), // 89: gotocompany.guardian.v1beta1.Resource + (*Grant)(nil), // 90: gotocompany.guardian.v1beta1.Grant + (*ProviderActivity)(nil), // 91: gotocompany.guardian.v1beta1.ProviderActivity + (*RevokeAppealRequest_Reason)(nil), // 92: gotocompany.guardian.v1beta1.RevokeAppealRequest.Reason + (*CreateAppealRequest_Resource)(nil), // 93: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource + (*UpdateApprovalRequest_Action)(nil), // 94: gotocompany.guardian.v1beta1.UpdateApprovalRequest.Action + nil, // 95: gotocompany.guardian.v1beta1.ProviderConfig.LabelsEntry + (*ProviderConfig_AppealConfig)(nil), // 96: gotocompany.guardian.v1beta1.ProviderConfig.AppealConfig + (*ProviderConfig_ResourceConfig)(nil), // 97: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig + (*ProviderConfig_ProviderParameter)(nil), // 98: gotocompany.guardian.v1beta1.ProviderConfig.ProviderParameter + (*Condition_MatchCondition)(nil), // 99: gotocompany.guardian.v1beta1.Condition.MatchCondition + (*PolicyAppealConfig_DurationOptions)(nil), // 100: gotocompany.guardian.v1beta1.PolicyAppealConfig.DurationOptions + (*PolicyAppealConfig_Question)(nil), // 101: gotocompany.guardian.v1beta1.PolicyAppealConfig.Question + (*PolicyAppealConfig_MetadataSource)(nil), // 102: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource + nil, // 103: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry + (*Policy_ApprovalStep)(nil), // 104: gotocompany.guardian.v1beta1.Policy.ApprovalStep + nil, // 105: gotocompany.guardian.v1beta1.Policy.LabelsEntry + (*Policy_Requirement)(nil), // 106: gotocompany.guardian.v1beta1.Policy.Requirement + (*Policy_IAM)(nil), // 107: gotocompany.guardian.v1beta1.Policy.IAM + (*Policy_Requirement_RequirementTrigger)(nil), // 108: gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger + (*Policy_Requirement_AdditionalAppeal)(nil), // 109: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal + (*Policy_Requirement_AdditionalAppeal_ResourceIdentifier)(nil), // 110: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.ResourceIdentifier + nil, // 111: gotocompany.guardian.v1beta1.Policy.IAM.SchemaEntry + nil, // 112: gotocompany.guardian.v1beta1.Appeal.LabelsEntry + nil, // 113: gotocompany.guardian.v1beta1.Resource.LabelsEntry + (*timestamppb.Timestamp)(nil), // 114: google.protobuf.Timestamp + (*structpb.Value)(nil), // 115: google.protobuf.Value + (*structpb.Struct)(nil), // 116: google.protobuf.Struct } var file_gotocompany_guardian_v1beta1_guardian_proto_depIdxs = []int32{ 81, // 0: gotocompany.guardian.v1beta1.ListProvidersResponse.providers:type_name -> gotocompany.guardian.v1beta1.Provider @@ -8839,12 +8955,12 @@ var file_gotocompany_guardian_v1beta1_guardian_proto_depIdxs = []int32{ 81, // 6: gotocompany.guardian.v1beta1.UpdateProviderResponse.provider:type_name -> gotocompany.guardian.v1beta1.Provider 90, // 7: gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant 78, // 8: gotocompany.guardian.v1beta1.ListRolesResponse.roles:type_name -> gotocompany.guardian.v1beta1.Role - 112, // 9: gotocompany.guardian.v1beta1.ImportActivitiesRequest.timestamp_gte:type_name -> google.protobuf.Timestamp - 112, // 10: gotocompany.guardian.v1beta1.ImportActivitiesRequest.timestamp_lte:type_name -> google.protobuf.Timestamp + 114, // 9: gotocompany.guardian.v1beta1.ImportActivitiesRequest.timestamp_gte:type_name -> google.protobuf.Timestamp + 114, // 10: gotocompany.guardian.v1beta1.ImportActivitiesRequest.timestamp_lte:type_name -> google.protobuf.Timestamp 91, // 11: gotocompany.guardian.v1beta1.ImportActivitiesResponse.activities:type_name -> gotocompany.guardian.v1beta1.ProviderActivity 91, // 12: gotocompany.guardian.v1beta1.GetActivityResponse.activity:type_name -> gotocompany.guardian.v1beta1.ProviderActivity - 112, // 13: gotocompany.guardian.v1beta1.ListActivitiesRequest.timestamp_gte:type_name -> google.protobuf.Timestamp - 112, // 14: gotocompany.guardian.v1beta1.ListActivitiesRequest.timestamp_lte:type_name -> google.protobuf.Timestamp + 114, // 13: gotocompany.guardian.v1beta1.ListActivitiesRequest.timestamp_gte:type_name -> google.protobuf.Timestamp + 114, // 14: gotocompany.guardian.v1beta1.ListActivitiesRequest.timestamp_lte:type_name -> google.protobuf.Timestamp 91, // 15: gotocompany.guardian.v1beta1.ListActivitiesResponse.activities:type_name -> gotocompany.guardian.v1beta1.ProviderActivity 85, // 16: gotocompany.guardian.v1beta1.ListPoliciesResponse.policies:type_name -> gotocompany.guardian.v1beta1.Policy 84, // 17: gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse.appeal:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig @@ -8878,146 +8994,150 @@ var file_gotocompany_guardian_v1beta1_guardian_proto_depIdxs = []int32{ 90, // 45: gotocompany.guardian.v1beta1.UpdateGrantResponse.grant:type_name -> gotocompany.guardian.v1beta1.Grant 90, // 46: gotocompany.guardian.v1beta1.RevokeGrantResponse.grant:type_name -> gotocompany.guardian.v1beta1.Grant 90, // 47: gotocompany.guardian.v1beta1.RevokeGrantsResponse.grants:type_name -> gotocompany.guardian.v1beta1.Grant - 113, // 48: gotocompany.guardian.v1beta1.Role.permissions:type_name -> google.protobuf.Value + 115, // 48: gotocompany.guardian.v1beta1.Role.permissions:type_name -> google.protobuf.Value 95, // 49: gotocompany.guardian.v1beta1.ProviderConfig.labels:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.LabelsEntry - 113, // 50: gotocompany.guardian.v1beta1.ProviderConfig.credentials:type_name -> google.protobuf.Value + 115, // 50: gotocompany.guardian.v1beta1.ProviderConfig.credentials:type_name -> google.protobuf.Value 96, // 51: gotocompany.guardian.v1beta1.ProviderConfig.appeal:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.AppealConfig 97, // 52: gotocompany.guardian.v1beta1.ProviderConfig.resources:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig 98, // 53: gotocompany.guardian.v1beta1.ProviderConfig.parameters:type_name -> gotocompany.guardian.v1beta1.ProviderConfig.ProviderParameter 80, // 54: gotocompany.guardian.v1beta1.Provider.config:type_name -> gotocompany.guardian.v1beta1.ProviderConfig - 112, // 55: gotocompany.guardian.v1beta1.Provider.created_at:type_name -> google.protobuf.Timestamp - 112, // 56: gotocompany.guardian.v1beta1.Provider.updated_at:type_name -> google.protobuf.Timestamp + 114, // 55: gotocompany.guardian.v1beta1.Provider.created_at:type_name -> google.protobuf.Timestamp + 114, // 56: gotocompany.guardian.v1beta1.Provider.updated_at:type_name -> google.protobuf.Timestamp 99, // 57: gotocompany.guardian.v1beta1.Condition.match:type_name -> gotocompany.guardian.v1beta1.Condition.MatchCondition 100, // 58: gotocompany.guardian.v1beta1.PolicyAppealConfig.duration_options:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.DurationOptions 101, // 59: gotocompany.guardian.v1beta1.PolicyAppealConfig.questions:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.Question - 102, // 60: gotocompany.guardian.v1beta1.Policy.steps:type_name -> gotocompany.guardian.v1beta1.Policy.ApprovalStep - 103, // 61: gotocompany.guardian.v1beta1.Policy.labels:type_name -> gotocompany.guardian.v1beta1.Policy.LabelsEntry - 112, // 62: gotocompany.guardian.v1beta1.Policy.created_at:type_name -> google.protobuf.Timestamp - 112, // 63: gotocompany.guardian.v1beta1.Policy.updated_at:type_name -> google.protobuf.Timestamp - 104, // 64: gotocompany.guardian.v1beta1.Policy.requirements:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement - 105, // 65: gotocompany.guardian.v1beta1.Policy.iam:type_name -> gotocompany.guardian.v1beta1.Policy.IAM - 84, // 66: gotocompany.guardian.v1beta1.Policy.appeal:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig - 112, // 67: gotocompany.guardian.v1beta1.AppealOptions.expiration_date:type_name -> google.protobuf.Timestamp - 86, // 68: gotocompany.guardian.v1beta1.Appeal.options:type_name -> gotocompany.guardian.v1beta1.AppealOptions - 110, // 69: gotocompany.guardian.v1beta1.Appeal.labels:type_name -> gotocompany.guardian.v1beta1.Appeal.LabelsEntry - 89, // 70: gotocompany.guardian.v1beta1.Appeal.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 88, // 71: gotocompany.guardian.v1beta1.Appeal.approvals:type_name -> gotocompany.guardian.v1beta1.Approval - 112, // 72: gotocompany.guardian.v1beta1.Appeal.created_at:type_name -> google.protobuf.Timestamp - 112, // 73: gotocompany.guardian.v1beta1.Appeal.updated_at:type_name -> google.protobuf.Timestamp - 114, // 74: gotocompany.guardian.v1beta1.Appeal.details:type_name -> google.protobuf.Struct - 113, // 75: gotocompany.guardian.v1beta1.Appeal.creator:type_name -> google.protobuf.Value - 90, // 76: gotocompany.guardian.v1beta1.Appeal.grant:type_name -> gotocompany.guardian.v1beta1.Grant - 87, // 77: gotocompany.guardian.v1beta1.Approval.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 112, // 78: gotocompany.guardian.v1beta1.Approval.created_at:type_name -> google.protobuf.Timestamp - 112, // 79: gotocompany.guardian.v1beta1.Approval.updated_at:type_name -> google.protobuf.Timestamp - 114, // 80: gotocompany.guardian.v1beta1.Resource.details:type_name -> google.protobuf.Struct - 111, // 81: gotocompany.guardian.v1beta1.Resource.labels:type_name -> gotocompany.guardian.v1beta1.Resource.LabelsEntry - 112, // 82: gotocompany.guardian.v1beta1.Resource.created_at:type_name -> google.protobuf.Timestamp - 112, // 83: gotocompany.guardian.v1beta1.Resource.updated_at:type_name -> google.protobuf.Timestamp - 89, // 84: gotocompany.guardian.v1beta1.Resource.children:type_name -> gotocompany.guardian.v1beta1.Resource - 112, // 85: gotocompany.guardian.v1beta1.Grant.expiration_date:type_name -> google.protobuf.Timestamp - 112, // 86: gotocompany.guardian.v1beta1.Grant.revoked_at:type_name -> google.protobuf.Timestamp - 112, // 87: gotocompany.guardian.v1beta1.Grant.created_at:type_name -> google.protobuf.Timestamp - 112, // 88: gotocompany.guardian.v1beta1.Grant.updated_at:type_name -> google.protobuf.Timestamp - 89, // 89: gotocompany.guardian.v1beta1.Grant.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 87, // 90: gotocompany.guardian.v1beta1.Grant.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal - 112, // 91: gotocompany.guardian.v1beta1.ProviderActivity.timestamp:type_name -> google.protobuf.Timestamp - 114, // 92: gotocompany.guardian.v1beta1.ProviderActivity.metadata:type_name -> google.protobuf.Struct - 112, // 93: gotocompany.guardian.v1beta1.ProviderActivity.created_at:type_name -> google.protobuf.Timestamp - 81, // 94: gotocompany.guardian.v1beta1.ProviderActivity.provider:type_name -> gotocompany.guardian.v1beta1.Provider - 89, // 95: gotocompany.guardian.v1beta1.ProviderActivity.resource:type_name -> gotocompany.guardian.v1beta1.Resource - 114, // 96: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource.options:type_name -> google.protobuf.Struct - 114, // 97: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource.details:type_name -> google.protobuf.Struct - 79, // 98: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig.policy:type_name -> gotocompany.guardian.v1beta1.PolicyConfig - 78, // 99: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig.roles:type_name -> gotocompany.guardian.v1beta1.Role - 113, // 100: gotocompany.guardian.v1beta1.Condition.MatchCondition.eq:type_name -> google.protobuf.Value - 106, // 101: gotocompany.guardian.v1beta1.Policy.Requirement.on:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger - 107, // 102: gotocompany.guardian.v1beta1.Policy.Requirement.appeals:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal - 113, // 103: gotocompany.guardian.v1beta1.Policy.IAM.config:type_name -> google.protobuf.Value - 109, // 104: gotocompany.guardian.v1beta1.Policy.IAM.schema:type_name -> gotocompany.guardian.v1beta1.Policy.IAM.SchemaEntry - 83, // 105: gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger.conditions:type_name -> gotocompany.guardian.v1beta1.Condition - 108, // 106: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.resource:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.ResourceIdentifier - 86, // 107: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.options:type_name -> gotocompany.guardian.v1beta1.AppealOptions - 79, // 108: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.policy:type_name -> gotocompany.guardian.v1beta1.PolicyConfig - 0, // 109: gotocompany.guardian.v1beta1.GuardianService.ListProviders:input_type -> gotocompany.guardian.v1beta1.ListProvidersRequest - 2, // 110: gotocompany.guardian.v1beta1.GuardianService.GetProvider:input_type -> gotocompany.guardian.v1beta1.GetProviderRequest - 4, // 111: gotocompany.guardian.v1beta1.GuardianService.GetProviderTypes:input_type -> gotocompany.guardian.v1beta1.GetProviderTypesRequest - 6, // 112: gotocompany.guardian.v1beta1.GuardianService.CreateProvider:input_type -> gotocompany.guardian.v1beta1.CreateProviderRequest - 8, // 113: gotocompany.guardian.v1beta1.GuardianService.UpdateProvider:input_type -> gotocompany.guardian.v1beta1.UpdateProviderRequest - 10, // 114: gotocompany.guardian.v1beta1.GuardianService.DeleteProvider:input_type -> gotocompany.guardian.v1beta1.DeleteProviderRequest - 14, // 115: gotocompany.guardian.v1beta1.GuardianService.ListRoles:input_type -> gotocompany.guardian.v1beta1.ListRolesRequest - 16, // 116: gotocompany.guardian.v1beta1.GuardianService.ImportActivities:input_type -> gotocompany.guardian.v1beta1.ImportActivitiesRequest - 18, // 117: gotocompany.guardian.v1beta1.GuardianService.GetActivity:input_type -> gotocompany.guardian.v1beta1.GetActivityRequest - 20, // 118: gotocompany.guardian.v1beta1.GuardianService.ListActivities:input_type -> gotocompany.guardian.v1beta1.ListActivitiesRequest - 22, // 119: gotocompany.guardian.v1beta1.GuardianService.ListPolicies:input_type -> gotocompany.guardian.v1beta1.ListPoliciesRequest - 24, // 120: gotocompany.guardian.v1beta1.GuardianService.GetPolicy:input_type -> gotocompany.guardian.v1beta1.GetPolicyRequest - 28, // 121: gotocompany.guardian.v1beta1.GuardianService.CreatePolicy:input_type -> gotocompany.guardian.v1beta1.CreatePolicyRequest - 30, // 122: gotocompany.guardian.v1beta1.GuardianService.UpdatePolicy:input_type -> gotocompany.guardian.v1beta1.UpdatePolicyRequest - 25, // 123: gotocompany.guardian.v1beta1.GuardianService.GetPolicyPreferences:input_type -> gotocompany.guardian.v1beta1.GetPolicyPreferencesRequest - 32, // 124: gotocompany.guardian.v1beta1.GuardianService.ListResources:input_type -> gotocompany.guardian.v1beta1.ListResourcesRequest - 34, // 125: gotocompany.guardian.v1beta1.GuardianService.GetResource:input_type -> gotocompany.guardian.v1beta1.GetResourceRequest - 36, // 126: gotocompany.guardian.v1beta1.GuardianService.UpdateResource:input_type -> gotocompany.guardian.v1beta1.UpdateResourceRequest - 38, // 127: gotocompany.guardian.v1beta1.GuardianService.DeleteResource:input_type -> gotocompany.guardian.v1beta1.DeleteResourceRequest - 40, // 128: gotocompany.guardian.v1beta1.GuardianService.ListUserAppeals:input_type -> gotocompany.guardian.v1beta1.ListUserAppealsRequest - 42, // 129: gotocompany.guardian.v1beta1.GuardianService.ListAppeals:input_type -> gotocompany.guardian.v1beta1.ListAppealsRequest - 44, // 130: gotocompany.guardian.v1beta1.GuardianService.GetAppeal:input_type -> gotocompany.guardian.v1beta1.GetAppealRequest - 46, // 131: gotocompany.guardian.v1beta1.GuardianService.CancelAppeal:input_type -> gotocompany.guardian.v1beta1.CancelAppealRequest - 52, // 132: gotocompany.guardian.v1beta1.GuardianService.CreateAppeal:input_type -> gotocompany.guardian.v1beta1.CreateAppealRequest - 54, // 133: gotocompany.guardian.v1beta1.GuardianService.ListUserApprovals:input_type -> gotocompany.guardian.v1beta1.ListUserApprovalsRequest - 56, // 134: gotocompany.guardian.v1beta1.GuardianService.ListApprovals:input_type -> gotocompany.guardian.v1beta1.ListApprovalsRequest - 58, // 135: gotocompany.guardian.v1beta1.GuardianService.UpdateApproval:input_type -> gotocompany.guardian.v1beta1.UpdateApprovalRequest - 60, // 136: gotocompany.guardian.v1beta1.GuardianService.AddApprover:input_type -> gotocompany.guardian.v1beta1.AddApproverRequest - 62, // 137: gotocompany.guardian.v1beta1.GuardianService.DeleteApprover:input_type -> gotocompany.guardian.v1beta1.DeleteApproverRequest - 64, // 138: gotocompany.guardian.v1beta1.GuardianService.ListGrants:input_type -> gotocompany.guardian.v1beta1.ListGrantsRequest - 66, // 139: gotocompany.guardian.v1beta1.GuardianService.ListUserGrants:input_type -> gotocompany.guardian.v1beta1.ListUserGrantsRequest - 68, // 140: gotocompany.guardian.v1beta1.GuardianService.ListUserRoles:input_type -> gotocompany.guardian.v1beta1.ListUserRolesRequest - 70, // 141: gotocompany.guardian.v1beta1.GuardianService.GetGrant:input_type -> gotocompany.guardian.v1beta1.GetGrantRequest - 72, // 142: gotocompany.guardian.v1beta1.GuardianService.UpdateGrant:input_type -> gotocompany.guardian.v1beta1.UpdateGrantRequest - 74, // 143: gotocompany.guardian.v1beta1.GuardianService.RevokeGrant:input_type -> gotocompany.guardian.v1beta1.RevokeGrantRequest - 76, // 144: gotocompany.guardian.v1beta1.GuardianService.RevokeGrants:input_type -> gotocompany.guardian.v1beta1.RevokeGrantsRequest - 12, // 145: gotocompany.guardian.v1beta1.GuardianService.ImportGrantsFromProvider:input_type -> gotocompany.guardian.v1beta1.ImportGrantsFromProviderRequest - 1, // 146: gotocompany.guardian.v1beta1.GuardianService.ListProviders:output_type -> gotocompany.guardian.v1beta1.ListProvidersResponse - 3, // 147: gotocompany.guardian.v1beta1.GuardianService.GetProvider:output_type -> gotocompany.guardian.v1beta1.GetProviderResponse - 5, // 148: gotocompany.guardian.v1beta1.GuardianService.GetProviderTypes:output_type -> gotocompany.guardian.v1beta1.GetProviderTypesResponse - 7, // 149: gotocompany.guardian.v1beta1.GuardianService.CreateProvider:output_type -> gotocompany.guardian.v1beta1.CreateProviderResponse - 9, // 150: gotocompany.guardian.v1beta1.GuardianService.UpdateProvider:output_type -> gotocompany.guardian.v1beta1.UpdateProviderResponse - 11, // 151: gotocompany.guardian.v1beta1.GuardianService.DeleteProvider:output_type -> gotocompany.guardian.v1beta1.DeleteProviderResponse - 15, // 152: gotocompany.guardian.v1beta1.GuardianService.ListRoles:output_type -> gotocompany.guardian.v1beta1.ListRolesResponse - 17, // 153: gotocompany.guardian.v1beta1.GuardianService.ImportActivities:output_type -> gotocompany.guardian.v1beta1.ImportActivitiesResponse - 19, // 154: gotocompany.guardian.v1beta1.GuardianService.GetActivity:output_type -> gotocompany.guardian.v1beta1.GetActivityResponse - 21, // 155: gotocompany.guardian.v1beta1.GuardianService.ListActivities:output_type -> gotocompany.guardian.v1beta1.ListActivitiesResponse - 23, // 156: gotocompany.guardian.v1beta1.GuardianService.ListPolicies:output_type -> gotocompany.guardian.v1beta1.ListPoliciesResponse - 27, // 157: gotocompany.guardian.v1beta1.GuardianService.GetPolicy:output_type -> gotocompany.guardian.v1beta1.GetPolicyResponse - 29, // 158: gotocompany.guardian.v1beta1.GuardianService.CreatePolicy:output_type -> gotocompany.guardian.v1beta1.CreatePolicyResponse - 31, // 159: gotocompany.guardian.v1beta1.GuardianService.UpdatePolicy:output_type -> gotocompany.guardian.v1beta1.UpdatePolicyResponse - 26, // 160: gotocompany.guardian.v1beta1.GuardianService.GetPolicyPreferences:output_type -> gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse - 33, // 161: gotocompany.guardian.v1beta1.GuardianService.ListResources:output_type -> gotocompany.guardian.v1beta1.ListResourcesResponse - 35, // 162: gotocompany.guardian.v1beta1.GuardianService.GetResource:output_type -> gotocompany.guardian.v1beta1.GetResourceResponse - 37, // 163: gotocompany.guardian.v1beta1.GuardianService.UpdateResource:output_type -> gotocompany.guardian.v1beta1.UpdateResourceResponse - 39, // 164: gotocompany.guardian.v1beta1.GuardianService.DeleteResource:output_type -> gotocompany.guardian.v1beta1.DeleteResourceResponse - 41, // 165: gotocompany.guardian.v1beta1.GuardianService.ListUserAppeals:output_type -> gotocompany.guardian.v1beta1.ListUserAppealsResponse - 43, // 166: gotocompany.guardian.v1beta1.GuardianService.ListAppeals:output_type -> gotocompany.guardian.v1beta1.ListAppealsResponse - 45, // 167: gotocompany.guardian.v1beta1.GuardianService.GetAppeal:output_type -> gotocompany.guardian.v1beta1.GetAppealResponse - 47, // 168: gotocompany.guardian.v1beta1.GuardianService.CancelAppeal:output_type -> gotocompany.guardian.v1beta1.CancelAppealResponse - 53, // 169: gotocompany.guardian.v1beta1.GuardianService.CreateAppeal:output_type -> gotocompany.guardian.v1beta1.CreateAppealResponse - 55, // 170: gotocompany.guardian.v1beta1.GuardianService.ListUserApprovals:output_type -> gotocompany.guardian.v1beta1.ListUserApprovalsResponse - 57, // 171: gotocompany.guardian.v1beta1.GuardianService.ListApprovals:output_type -> gotocompany.guardian.v1beta1.ListApprovalsResponse - 59, // 172: gotocompany.guardian.v1beta1.GuardianService.UpdateApproval:output_type -> gotocompany.guardian.v1beta1.UpdateApprovalResponse - 61, // 173: gotocompany.guardian.v1beta1.GuardianService.AddApprover:output_type -> gotocompany.guardian.v1beta1.AddApproverResponse - 63, // 174: gotocompany.guardian.v1beta1.GuardianService.DeleteApprover:output_type -> gotocompany.guardian.v1beta1.DeleteApproverResponse - 65, // 175: gotocompany.guardian.v1beta1.GuardianService.ListGrants:output_type -> gotocompany.guardian.v1beta1.ListGrantsResponse - 67, // 176: gotocompany.guardian.v1beta1.GuardianService.ListUserGrants:output_type -> gotocompany.guardian.v1beta1.ListUserGrantsResponse - 69, // 177: gotocompany.guardian.v1beta1.GuardianService.ListUserRoles:output_type -> gotocompany.guardian.v1beta1.ListUserRolesResponse - 71, // 178: gotocompany.guardian.v1beta1.GuardianService.GetGrant:output_type -> gotocompany.guardian.v1beta1.GetGrantResponse - 73, // 179: gotocompany.guardian.v1beta1.GuardianService.UpdateGrant:output_type -> gotocompany.guardian.v1beta1.UpdateGrantResponse - 75, // 180: gotocompany.guardian.v1beta1.GuardianService.RevokeGrant:output_type -> gotocompany.guardian.v1beta1.RevokeGrantResponse - 77, // 181: gotocompany.guardian.v1beta1.GuardianService.RevokeGrants:output_type -> gotocompany.guardian.v1beta1.RevokeGrantsResponse - 13, // 182: gotocompany.guardian.v1beta1.GuardianService.ImportGrantsFromProvider:output_type -> gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse - 146, // [146:183] is the sub-list for method output_type - 109, // [109:146] is the sub-list for method input_type - 109, // [109:109] is the sub-list for extension type_name - 109, // [109:109] is the sub-list for extension extendee - 0, // [0:109] is the sub-list for field type_name + 103, // 60: gotocompany.guardian.v1beta1.PolicyAppealConfig.metadata_sources:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry + 104, // 61: gotocompany.guardian.v1beta1.Policy.steps:type_name -> gotocompany.guardian.v1beta1.Policy.ApprovalStep + 105, // 62: gotocompany.guardian.v1beta1.Policy.labels:type_name -> gotocompany.guardian.v1beta1.Policy.LabelsEntry + 114, // 63: gotocompany.guardian.v1beta1.Policy.created_at:type_name -> google.protobuf.Timestamp + 114, // 64: gotocompany.guardian.v1beta1.Policy.updated_at:type_name -> google.protobuf.Timestamp + 106, // 65: gotocompany.guardian.v1beta1.Policy.requirements:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement + 107, // 66: gotocompany.guardian.v1beta1.Policy.iam:type_name -> gotocompany.guardian.v1beta1.Policy.IAM + 84, // 67: gotocompany.guardian.v1beta1.Policy.appeal:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig + 114, // 68: gotocompany.guardian.v1beta1.AppealOptions.expiration_date:type_name -> google.protobuf.Timestamp + 86, // 69: gotocompany.guardian.v1beta1.Appeal.options:type_name -> gotocompany.guardian.v1beta1.AppealOptions + 112, // 70: gotocompany.guardian.v1beta1.Appeal.labels:type_name -> gotocompany.guardian.v1beta1.Appeal.LabelsEntry + 89, // 71: gotocompany.guardian.v1beta1.Appeal.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 88, // 72: gotocompany.guardian.v1beta1.Appeal.approvals:type_name -> gotocompany.guardian.v1beta1.Approval + 114, // 73: gotocompany.guardian.v1beta1.Appeal.created_at:type_name -> google.protobuf.Timestamp + 114, // 74: gotocompany.guardian.v1beta1.Appeal.updated_at:type_name -> google.protobuf.Timestamp + 116, // 75: gotocompany.guardian.v1beta1.Appeal.details:type_name -> google.protobuf.Struct + 115, // 76: gotocompany.guardian.v1beta1.Appeal.creator:type_name -> google.protobuf.Value + 90, // 77: gotocompany.guardian.v1beta1.Appeal.grant:type_name -> gotocompany.guardian.v1beta1.Grant + 87, // 78: gotocompany.guardian.v1beta1.Approval.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 114, // 79: gotocompany.guardian.v1beta1.Approval.created_at:type_name -> google.protobuf.Timestamp + 114, // 80: gotocompany.guardian.v1beta1.Approval.updated_at:type_name -> google.protobuf.Timestamp + 116, // 81: gotocompany.guardian.v1beta1.Resource.details:type_name -> google.protobuf.Struct + 113, // 82: gotocompany.guardian.v1beta1.Resource.labels:type_name -> gotocompany.guardian.v1beta1.Resource.LabelsEntry + 114, // 83: gotocompany.guardian.v1beta1.Resource.created_at:type_name -> google.protobuf.Timestamp + 114, // 84: gotocompany.guardian.v1beta1.Resource.updated_at:type_name -> google.protobuf.Timestamp + 89, // 85: gotocompany.guardian.v1beta1.Resource.children:type_name -> gotocompany.guardian.v1beta1.Resource + 114, // 86: gotocompany.guardian.v1beta1.Grant.expiration_date:type_name -> google.protobuf.Timestamp + 114, // 87: gotocompany.guardian.v1beta1.Grant.revoked_at:type_name -> google.protobuf.Timestamp + 114, // 88: gotocompany.guardian.v1beta1.Grant.created_at:type_name -> google.protobuf.Timestamp + 114, // 89: gotocompany.guardian.v1beta1.Grant.updated_at:type_name -> google.protobuf.Timestamp + 89, // 90: gotocompany.guardian.v1beta1.Grant.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 87, // 91: gotocompany.guardian.v1beta1.Grant.appeal:type_name -> gotocompany.guardian.v1beta1.Appeal + 114, // 92: gotocompany.guardian.v1beta1.ProviderActivity.timestamp:type_name -> google.protobuf.Timestamp + 116, // 93: gotocompany.guardian.v1beta1.ProviderActivity.metadata:type_name -> google.protobuf.Struct + 114, // 94: gotocompany.guardian.v1beta1.ProviderActivity.created_at:type_name -> google.protobuf.Timestamp + 81, // 95: gotocompany.guardian.v1beta1.ProviderActivity.provider:type_name -> gotocompany.guardian.v1beta1.Provider + 89, // 96: gotocompany.guardian.v1beta1.ProviderActivity.resource:type_name -> gotocompany.guardian.v1beta1.Resource + 116, // 97: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource.options:type_name -> google.protobuf.Struct + 116, // 98: gotocompany.guardian.v1beta1.CreateAppealRequest.Resource.details:type_name -> google.protobuf.Struct + 79, // 99: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig.policy:type_name -> gotocompany.guardian.v1beta1.PolicyConfig + 78, // 100: gotocompany.guardian.v1beta1.ProviderConfig.ResourceConfig.roles:type_name -> gotocompany.guardian.v1beta1.Role + 115, // 101: gotocompany.guardian.v1beta1.Condition.MatchCondition.eq:type_name -> google.protobuf.Value + 115, // 102: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource.config:type_name -> google.protobuf.Value + 115, // 103: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource.value:type_name -> google.protobuf.Value + 102, // 104: gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSourcesEntry.value:type_name -> gotocompany.guardian.v1beta1.PolicyAppealConfig.MetadataSource + 108, // 105: gotocompany.guardian.v1beta1.Policy.Requirement.on:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger + 109, // 106: gotocompany.guardian.v1beta1.Policy.Requirement.appeals:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal + 115, // 107: gotocompany.guardian.v1beta1.Policy.IAM.config:type_name -> google.protobuf.Value + 111, // 108: gotocompany.guardian.v1beta1.Policy.IAM.schema:type_name -> gotocompany.guardian.v1beta1.Policy.IAM.SchemaEntry + 83, // 109: gotocompany.guardian.v1beta1.Policy.Requirement.RequirementTrigger.conditions:type_name -> gotocompany.guardian.v1beta1.Condition + 110, // 110: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.resource:type_name -> gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.ResourceIdentifier + 86, // 111: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.options:type_name -> gotocompany.guardian.v1beta1.AppealOptions + 79, // 112: gotocompany.guardian.v1beta1.Policy.Requirement.AdditionalAppeal.policy:type_name -> gotocompany.guardian.v1beta1.PolicyConfig + 0, // 113: gotocompany.guardian.v1beta1.GuardianService.ListProviders:input_type -> gotocompany.guardian.v1beta1.ListProvidersRequest + 2, // 114: gotocompany.guardian.v1beta1.GuardianService.GetProvider:input_type -> gotocompany.guardian.v1beta1.GetProviderRequest + 4, // 115: gotocompany.guardian.v1beta1.GuardianService.GetProviderTypes:input_type -> gotocompany.guardian.v1beta1.GetProviderTypesRequest + 6, // 116: gotocompany.guardian.v1beta1.GuardianService.CreateProvider:input_type -> gotocompany.guardian.v1beta1.CreateProviderRequest + 8, // 117: gotocompany.guardian.v1beta1.GuardianService.UpdateProvider:input_type -> gotocompany.guardian.v1beta1.UpdateProviderRequest + 10, // 118: gotocompany.guardian.v1beta1.GuardianService.DeleteProvider:input_type -> gotocompany.guardian.v1beta1.DeleteProviderRequest + 14, // 119: gotocompany.guardian.v1beta1.GuardianService.ListRoles:input_type -> gotocompany.guardian.v1beta1.ListRolesRequest + 16, // 120: gotocompany.guardian.v1beta1.GuardianService.ImportActivities:input_type -> gotocompany.guardian.v1beta1.ImportActivitiesRequest + 18, // 121: gotocompany.guardian.v1beta1.GuardianService.GetActivity:input_type -> gotocompany.guardian.v1beta1.GetActivityRequest + 20, // 122: gotocompany.guardian.v1beta1.GuardianService.ListActivities:input_type -> gotocompany.guardian.v1beta1.ListActivitiesRequest + 22, // 123: gotocompany.guardian.v1beta1.GuardianService.ListPolicies:input_type -> gotocompany.guardian.v1beta1.ListPoliciesRequest + 24, // 124: gotocompany.guardian.v1beta1.GuardianService.GetPolicy:input_type -> gotocompany.guardian.v1beta1.GetPolicyRequest + 28, // 125: gotocompany.guardian.v1beta1.GuardianService.CreatePolicy:input_type -> gotocompany.guardian.v1beta1.CreatePolicyRequest + 30, // 126: gotocompany.guardian.v1beta1.GuardianService.UpdatePolicy:input_type -> gotocompany.guardian.v1beta1.UpdatePolicyRequest + 25, // 127: gotocompany.guardian.v1beta1.GuardianService.GetPolicyPreferences:input_type -> gotocompany.guardian.v1beta1.GetPolicyPreferencesRequest + 32, // 128: gotocompany.guardian.v1beta1.GuardianService.ListResources:input_type -> gotocompany.guardian.v1beta1.ListResourcesRequest + 34, // 129: gotocompany.guardian.v1beta1.GuardianService.GetResource:input_type -> gotocompany.guardian.v1beta1.GetResourceRequest + 36, // 130: gotocompany.guardian.v1beta1.GuardianService.UpdateResource:input_type -> gotocompany.guardian.v1beta1.UpdateResourceRequest + 38, // 131: gotocompany.guardian.v1beta1.GuardianService.DeleteResource:input_type -> gotocompany.guardian.v1beta1.DeleteResourceRequest + 40, // 132: gotocompany.guardian.v1beta1.GuardianService.ListUserAppeals:input_type -> gotocompany.guardian.v1beta1.ListUserAppealsRequest + 42, // 133: gotocompany.guardian.v1beta1.GuardianService.ListAppeals:input_type -> gotocompany.guardian.v1beta1.ListAppealsRequest + 44, // 134: gotocompany.guardian.v1beta1.GuardianService.GetAppeal:input_type -> gotocompany.guardian.v1beta1.GetAppealRequest + 46, // 135: gotocompany.guardian.v1beta1.GuardianService.CancelAppeal:input_type -> gotocompany.guardian.v1beta1.CancelAppealRequest + 52, // 136: gotocompany.guardian.v1beta1.GuardianService.CreateAppeal:input_type -> gotocompany.guardian.v1beta1.CreateAppealRequest + 54, // 137: gotocompany.guardian.v1beta1.GuardianService.ListUserApprovals:input_type -> gotocompany.guardian.v1beta1.ListUserApprovalsRequest + 56, // 138: gotocompany.guardian.v1beta1.GuardianService.ListApprovals:input_type -> gotocompany.guardian.v1beta1.ListApprovalsRequest + 58, // 139: gotocompany.guardian.v1beta1.GuardianService.UpdateApproval:input_type -> gotocompany.guardian.v1beta1.UpdateApprovalRequest + 60, // 140: gotocompany.guardian.v1beta1.GuardianService.AddApprover:input_type -> gotocompany.guardian.v1beta1.AddApproverRequest + 62, // 141: gotocompany.guardian.v1beta1.GuardianService.DeleteApprover:input_type -> gotocompany.guardian.v1beta1.DeleteApproverRequest + 64, // 142: gotocompany.guardian.v1beta1.GuardianService.ListGrants:input_type -> gotocompany.guardian.v1beta1.ListGrantsRequest + 66, // 143: gotocompany.guardian.v1beta1.GuardianService.ListUserGrants:input_type -> gotocompany.guardian.v1beta1.ListUserGrantsRequest + 68, // 144: gotocompany.guardian.v1beta1.GuardianService.ListUserRoles:input_type -> gotocompany.guardian.v1beta1.ListUserRolesRequest + 70, // 145: gotocompany.guardian.v1beta1.GuardianService.GetGrant:input_type -> gotocompany.guardian.v1beta1.GetGrantRequest + 72, // 146: gotocompany.guardian.v1beta1.GuardianService.UpdateGrant:input_type -> gotocompany.guardian.v1beta1.UpdateGrantRequest + 74, // 147: gotocompany.guardian.v1beta1.GuardianService.RevokeGrant:input_type -> gotocompany.guardian.v1beta1.RevokeGrantRequest + 76, // 148: gotocompany.guardian.v1beta1.GuardianService.RevokeGrants:input_type -> gotocompany.guardian.v1beta1.RevokeGrantsRequest + 12, // 149: gotocompany.guardian.v1beta1.GuardianService.ImportGrantsFromProvider:input_type -> gotocompany.guardian.v1beta1.ImportGrantsFromProviderRequest + 1, // 150: gotocompany.guardian.v1beta1.GuardianService.ListProviders:output_type -> gotocompany.guardian.v1beta1.ListProvidersResponse + 3, // 151: gotocompany.guardian.v1beta1.GuardianService.GetProvider:output_type -> gotocompany.guardian.v1beta1.GetProviderResponse + 5, // 152: gotocompany.guardian.v1beta1.GuardianService.GetProviderTypes:output_type -> gotocompany.guardian.v1beta1.GetProviderTypesResponse + 7, // 153: gotocompany.guardian.v1beta1.GuardianService.CreateProvider:output_type -> gotocompany.guardian.v1beta1.CreateProviderResponse + 9, // 154: gotocompany.guardian.v1beta1.GuardianService.UpdateProvider:output_type -> gotocompany.guardian.v1beta1.UpdateProviderResponse + 11, // 155: gotocompany.guardian.v1beta1.GuardianService.DeleteProvider:output_type -> gotocompany.guardian.v1beta1.DeleteProviderResponse + 15, // 156: gotocompany.guardian.v1beta1.GuardianService.ListRoles:output_type -> gotocompany.guardian.v1beta1.ListRolesResponse + 17, // 157: gotocompany.guardian.v1beta1.GuardianService.ImportActivities:output_type -> gotocompany.guardian.v1beta1.ImportActivitiesResponse + 19, // 158: gotocompany.guardian.v1beta1.GuardianService.GetActivity:output_type -> gotocompany.guardian.v1beta1.GetActivityResponse + 21, // 159: gotocompany.guardian.v1beta1.GuardianService.ListActivities:output_type -> gotocompany.guardian.v1beta1.ListActivitiesResponse + 23, // 160: gotocompany.guardian.v1beta1.GuardianService.ListPolicies:output_type -> gotocompany.guardian.v1beta1.ListPoliciesResponse + 27, // 161: gotocompany.guardian.v1beta1.GuardianService.GetPolicy:output_type -> gotocompany.guardian.v1beta1.GetPolicyResponse + 29, // 162: gotocompany.guardian.v1beta1.GuardianService.CreatePolicy:output_type -> gotocompany.guardian.v1beta1.CreatePolicyResponse + 31, // 163: gotocompany.guardian.v1beta1.GuardianService.UpdatePolicy:output_type -> gotocompany.guardian.v1beta1.UpdatePolicyResponse + 26, // 164: gotocompany.guardian.v1beta1.GuardianService.GetPolicyPreferences:output_type -> gotocompany.guardian.v1beta1.GetPolicyPreferencesResponse + 33, // 165: gotocompany.guardian.v1beta1.GuardianService.ListResources:output_type -> gotocompany.guardian.v1beta1.ListResourcesResponse + 35, // 166: gotocompany.guardian.v1beta1.GuardianService.GetResource:output_type -> gotocompany.guardian.v1beta1.GetResourceResponse + 37, // 167: gotocompany.guardian.v1beta1.GuardianService.UpdateResource:output_type -> gotocompany.guardian.v1beta1.UpdateResourceResponse + 39, // 168: gotocompany.guardian.v1beta1.GuardianService.DeleteResource:output_type -> gotocompany.guardian.v1beta1.DeleteResourceResponse + 41, // 169: gotocompany.guardian.v1beta1.GuardianService.ListUserAppeals:output_type -> gotocompany.guardian.v1beta1.ListUserAppealsResponse + 43, // 170: gotocompany.guardian.v1beta1.GuardianService.ListAppeals:output_type -> gotocompany.guardian.v1beta1.ListAppealsResponse + 45, // 171: gotocompany.guardian.v1beta1.GuardianService.GetAppeal:output_type -> gotocompany.guardian.v1beta1.GetAppealResponse + 47, // 172: gotocompany.guardian.v1beta1.GuardianService.CancelAppeal:output_type -> gotocompany.guardian.v1beta1.CancelAppealResponse + 53, // 173: gotocompany.guardian.v1beta1.GuardianService.CreateAppeal:output_type -> gotocompany.guardian.v1beta1.CreateAppealResponse + 55, // 174: gotocompany.guardian.v1beta1.GuardianService.ListUserApprovals:output_type -> gotocompany.guardian.v1beta1.ListUserApprovalsResponse + 57, // 175: gotocompany.guardian.v1beta1.GuardianService.ListApprovals:output_type -> gotocompany.guardian.v1beta1.ListApprovalsResponse + 59, // 176: gotocompany.guardian.v1beta1.GuardianService.UpdateApproval:output_type -> gotocompany.guardian.v1beta1.UpdateApprovalResponse + 61, // 177: gotocompany.guardian.v1beta1.GuardianService.AddApprover:output_type -> gotocompany.guardian.v1beta1.AddApproverResponse + 63, // 178: gotocompany.guardian.v1beta1.GuardianService.DeleteApprover:output_type -> gotocompany.guardian.v1beta1.DeleteApproverResponse + 65, // 179: gotocompany.guardian.v1beta1.GuardianService.ListGrants:output_type -> gotocompany.guardian.v1beta1.ListGrantsResponse + 67, // 180: gotocompany.guardian.v1beta1.GuardianService.ListUserGrants:output_type -> gotocompany.guardian.v1beta1.ListUserGrantsResponse + 69, // 181: gotocompany.guardian.v1beta1.GuardianService.ListUserRoles:output_type -> gotocompany.guardian.v1beta1.ListUserRolesResponse + 71, // 182: gotocompany.guardian.v1beta1.GuardianService.GetGrant:output_type -> gotocompany.guardian.v1beta1.GetGrantResponse + 73, // 183: gotocompany.guardian.v1beta1.GuardianService.UpdateGrant:output_type -> gotocompany.guardian.v1beta1.UpdateGrantResponse + 75, // 184: gotocompany.guardian.v1beta1.GuardianService.RevokeGrant:output_type -> gotocompany.guardian.v1beta1.RevokeGrantResponse + 77, // 185: gotocompany.guardian.v1beta1.GuardianService.RevokeGrants:output_type -> gotocompany.guardian.v1beta1.RevokeGrantsResponse + 13, // 186: gotocompany.guardian.v1beta1.GuardianService.ImportGrantsFromProvider:output_type -> gotocompany.guardian.v1beta1.ImportGrantsFromProviderResponse + 150, // [150:187] is the sub-list for method output_type + 113, // [113:150] is the sub-list for method input_type + 113, // [113:113] is the sub-list for extension type_name + 113, // [113:113] is the sub-list for extension extendee + 0, // [0:113] is the sub-list for field type_name } func init() { file_gotocompany_guardian_v1beta1_guardian_proto_init() } @@ -10239,7 +10359,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Policy_ApprovalStep); i { + switch v := v.(*PolicyAppealConfig_MetadataSource); i { case 0: return &v.state case 1: @@ -10251,6 +10371,18 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { } } file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Policy_ApprovalStep); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_Requirement); i { case 0: return &v.state @@ -10262,7 +10394,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_IAM); i { case 0: return &v.state @@ -10274,7 +10406,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_Requirement_RequirementTrigger); i { case 0: return &v.state @@ -10286,7 +10418,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_Requirement_AdditionalAppeal); i { case 0: return &v.state @@ -10298,7 +10430,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { return nil } } - file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + file_gotocompany_guardian_v1beta1_guardian_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Policy_Requirement_AdditionalAppeal_ResourceIdentifier); i { case 0: return &v.state @@ -10317,7 +10449,7 @@ func file_gotocompany_guardian_v1beta1_guardian_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_gotocompany_guardian_v1beta1_guardian_proto_rawDesc, NumEnums: 0, - NumMessages: 112, + NumMessages: 114, NumExtensions: 0, NumServices: 1, }, diff --git a/core/appeal/service.go b/core/appeal/service.go index d83ee5a24..beb2668c0 100644 --- a/core/appeal/service.go +++ b/core/appeal/service.go @@ -2,18 +2,24 @@ package appeal import ( "context" + "encoding/json" "errors" "fmt" + "io" "strings" + "sync" "time" "github.com/go-playground/validator/v10" "github.com/goto/guardian/core/grant" + "github.com/goto/guardian/core/policy" "github.com/goto/guardian/domain" "github.com/goto/guardian/pkg/evaluator" + "github.com/goto/guardian/pkg/http" "github.com/goto/guardian/pkg/log" "github.com/goto/guardian/plugins/notifiers" "github.com/goto/guardian/utils" + "github.com/mitchellh/mapstructure" "golang.org/x/sync/errgroup" ) @@ -29,6 +35,8 @@ const ( RevokeReasonForExtension = "Automatically revoked for grant extension" RevokeReasonForOverride = "Automatically revoked for grant override" + + PolicyMetadataKey = "__policy_metadata" ) var TimeNow = time.Now @@ -191,10 +199,10 @@ func (s *Service) Create(ctx context.Context, appeals []*domain.Appeal, opts ... eg, egctx := errgroup.WithContext(ctx) var ( - resources map[string]*domain.Resource - providers map[string]map[string]*domain.Provider - policies map[string]map[uint]*domain.Policy - pendingAppeals map[string]map[string]map[string]*domain.Appeal + resources map[string]*domain.Resource + providers map[string]map[string]*domain.Provider + policies map[string]map[uint]*domain.Policy + pendingAppeals map[string]map[string]map[string]*domain.Appeal ) eg.Go(func() error { @@ -295,6 +303,10 @@ func (s *Service) Create(ctx context.Context, appeals []*domain.Appeal, opts ... return err } + if err := s.populateAppealMetadata(ctx, appeal, policy); err != nil { + return fmt.Errorf("getting appeal metadata: %w", err) + } + if err := s.addCreatorDetails(ctx, appeal, policy); err != nil { return fmt.Errorf("getting creator details: %w", err) } @@ -1126,6 +1138,113 @@ func getPolicy(a *domain.Appeal, p *domain.Provider, policiesMap map[string]map[ return policy, nil } +func (s *Service) populateAppealMetadata(ctx context.Context, a *domain.Appeal, p *domain.Policy) error { + if !p.HasAppealMetadataSources() { + return nil + } + + eg, egctx := errgroup.WithContext(ctx) + var mu sync.Mutex + appealMetadata := map[string]interface{}{} + for key, metadata := range p.AppealConfig.MetadataSources { + key, metadata := key, metadata + eg.Go(func() error { + switch metadata.Type { + case "http": + var cfg policy.AppealMetadataSourceConfigHTTP + if err := mapstructure.Decode(metadata.Config, &cfg); err != nil { + return fmt.Errorf("error decoding metadata config: %w", err) + } + + if cfg.URL == "" { + return fmt.Errorf("URL cannot be empty for http type") + } + if strings.Contains(cfg.URL, "$appeal") { + appealMap, err := a.ToMap() + if err != nil { + return fmt.Errorf("error converting appeal to map: %w", err) + } + params := map[string]interface{}{"appeal": appealMap} + url, err := evaluator.Expression(cfg.URL).EvaluateWithVars(params) + if err != nil { + return fmt.Errorf("error evaluating URL expression: %w", err) + } + urlStr, ok := url.(string) + if !ok { + return fmt.Errorf("URL expression must evaluate to a string") + } + cfg.URL = urlStr + } + + metadataCl, err := http.NewHTTPClient(&cfg.HTTPClientConfig) + if err != nil { + return fmt.Errorf("key: %s, %w", key, err) + } + + res, err := metadataCl.MakeRequest(egctx) + if err != nil || (res.StatusCode < 200 && res.StatusCode > 300) { + if !cfg.AllowFailed { + return fmt.Errorf("error fetching resource: %w", err) + } + } + + body, err := io.ReadAll(res.Body) + if err != nil { + return fmt.Errorf("error reading response body: %w", err) + } + res.Body.Close() + var jsonBody interface{} + err = json.Unmarshal(body, &jsonBody) + if err != nil { + return fmt.Errorf("error unmarshaling response body: %w", err) + } + + responseMap := map[string]interface{}{ + "status": res.Status, + "status_code": res.StatusCode, + "headers": res.Header, + "body": jsonBody, + } + params := map[string]interface{}{ + "response": responseMap, + "appeal": a, + } + value, err := metadata.EvaluateValue(params) + if err != nil { + return fmt.Errorf("error parsing value: %w", err) + } + mu.Lock() + appealMetadata[key] = value + mu.Unlock() + case "static": + params := map[string]interface{}{"appeal": a} + value, err := metadata.EvaluateValue(params) + if err != nil { + return fmt.Errorf("error parsing value: %w", err) + } + mu.Lock() + appealMetadata[key] = value + mu.Unlock() + default: + return fmt.Errorf("invalid metadata source type") + } + + return nil + }) + } + + if err := eg.Wait(); err != nil { + return err + } + + if a.Details == nil { + a.Details = map[string]interface{}{} + } + a.Details[PolicyMetadataKey] = appealMetadata + + return nil +} + func (s *Service) addCreatorDetails(ctx context.Context, a *domain.Appeal, p *domain.Policy) error { if p.IAM == nil { return nil diff --git a/core/appeal/service_test.go b/core/appeal/service_test.go index 8d9c01618..de14c609f 100644 --- a/core/appeal/service_test.go +++ b/core/appeal/service_test.go @@ -2,8 +2,11 @@ package appeal_test import ( "context" + "encoding/json" "errors" "fmt" + "net/http" + "net/http/httptest" "testing" "time" @@ -2115,6 +2118,269 @@ func (s *ServiceTestSuite) TestCreateAppeal__WithAdditionalAppeals() { s.NoError(err) } +func (s *ServiceTestSuite) TestCreate__WithAppealMetadata() { + s.setup() + accountID := "test@email.com" + + expectedUserDetails := map[string]interface{}{ + "managers": []interface{}{"user.approver@email.com"}, + "name": "test-name", + "role": "test-role-1", + "roles": []interface{}{"test-role-1", "test-role-2"}, + } + testServer := http.NewServeMux() + testServer.HandleFunc(fmt.Sprintf("/users/%s", accountID), func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + resp, _ := json.Marshal(expectedUserDetails) + w.Write(resp) + }) + ts := httptest.NewServer(testServer) + + resources := []*domain.Resource{ + { + ID: "1", + Type: "resource_type_1", + ProviderType: "provider_type", + ProviderURN: "provider1", + Details: map[string]interface{}{ + "owner": []string{"resource.owner@email.com"}, + }, + }, + } + providers := []*domain.Provider{ + { + ID: "1", + Type: "provider_type", + URN: "provider1", + Config: &domain.ProviderConfig{ + Appeal: &domain.AppealConfig{ + AllowPermanentAccess: true, + AllowActiveAccessExtensionIn: "24h", + }, + Resources: []*domain.ResourceConfig{ + { + Type: "resource_type_1", + Policy: &domain.PolicyConfig{ + ID: "policy_1", + Version: 1, + }, + Roles: []*domain.Role{ + { + ID: "role_id", + Permissions: []interface{}{"test-permission-1"}, + }, + }, + }, + }, + }, + }, + } + expDate := timeNow.Add(23 * time.Hour) + expectedExistingAppeals := []*domain.Appeal{} + expectedActiveGrants := []domain.Grant{ + { + ID: "99", + AccountID: accountID, + ResourceID: "2", + Resource: &domain.Resource{ + ID: "2", + URN: "urn", + }, + Role: "role_id", + Status: domain.GrantStatusActive, + ExpirationDate: &expDate, + }, + } + policies := []*domain.Policy{ + { + ID: "policy_1", + Version: 1, + Steps: []*domain.Step{ + { + Name: "step_1", + Strategy: "manual", + Approvers: []string{ + "$appeal.resource.details.owner", + }, + }, + { + Name: "step_2", + Strategy: "manual", + Approvers: []string{ + "$appeal.details.__policy_metadata.creator.managers", + }, + }, + }, + AppealConfig: &domain.PolicyAppealConfig{ + MetadataSources: map[string]*domain.AppealMetadataSource{ + "creator": { + Type: "http", + Config: map[string]interface{}{ + "url": fmt.Sprintf(`"%s/users/" + $appeal.created_by`, ts.URL), + }, + Value: map[string]interface{}{ + "managers": "$response.body.managers", + }, + }, + }, + }, + }, + } + expectedAppealsInsertionParam := []*domain.Appeal{ + { + ResourceID: resources[0].ID, + Resource: resources[0], + PolicyID: "policy_1", + PolicyVersion: 1, + Status: domain.AppealStatusPending, + AccountID: accountID, + AccountType: domain.DefaultAppealAccountType, + CreatedBy: accountID, + Role: "role_id", + Permissions: []string{"test-permission-1"}, + Approvals: []*domain.Approval{ + { + Name: "step_1", + Index: 0, + Status: domain.ApprovalStatusPending, + PolicyID: "policy_1", + PolicyVersion: 1, + Approvers: []string{"resource.owner@email.com"}, + }, + { + Name: "step_2", + Index: 1, + Status: domain.ApprovalStatusBlocked, + PolicyID: "policy_1", + PolicyVersion: 1, + Approvers: []string{"user.approver@email.com"}, + }, + }, + Description: "The answer is 42", + Details: map[string]interface{}{ + "__policy_metadata": map[string]interface{}{ + "creator": map[string]interface{}{ + "managers": []interface{}{"user.approver@email.com"}, + }, + }, + }, + }, + } + expectedResult := []*domain.Appeal{ + { + ID: "1", + ResourceID: "1", + Resource: resources[0], + PolicyID: "policy_1", + PolicyVersion: 1, + Status: domain.AppealStatusPending, + AccountID: accountID, + AccountType: domain.DefaultAppealAccountType, + CreatedBy: accountID, + Role: "role_id", + Permissions: []string{"test-permission-1"}, + Approvals: []*domain.Approval{ + { + ID: "1", + Name: "step_1", + Index: 0, + Status: domain.ApprovalStatusPending, + PolicyID: "policy_1", + PolicyVersion: 1, + Approvers: []string{"resource.owner@email.com"}, + }, + { + ID: "2", + Name: "step_2", + Index: 1, + Status: domain.ApprovalStatusBlocked, + PolicyID: "policy_1", + PolicyVersion: 1, + Approvers: []string{"user.approver@email.com"}, + }, + }, + Description: "The answer is 42", + Details: map[string]interface{}{ + "__policy_metadata": map[string]interface{}{ + "creator": map[string]interface{}{ + "managers": []interface{}{"user.approver@email.com"}, + }, + }, + }, + }, + } + + expectedResourceFilters := domain.ListResourcesFilter{IDs: []string{resources[0].ID}} + s.mockResourceService.EXPECT(). + Find(mock.Anything, expectedResourceFilters). + Return(resources, nil).Once() + s.mockProviderService.EXPECT(). + Find(mock.Anything).Return(providers, nil).Once() + s.mockPolicyService.EXPECT(). + Find(mock.Anything).Return(policies, nil).Once() + expectedExistingAppealsFilters := &domain.ListAppealsFilter{ + Statuses: []string{domain.AppealStatusPending}, + AccountIDs: []string{"test@email.com"}, + } + s.mockRepository.EXPECT(). + Find(mock.MatchedBy(func(ctx context.Context) bool { return true }), expectedExistingAppealsFilters). + Return(expectedExistingAppeals, nil).Once() + s.mockGrantService.EXPECT(). + List(mock.MatchedBy(func(ctx context.Context) bool { return true }), domain.ListGrantsFilter{ + Statuses: []string{string(domain.GrantStatusActive)}, + AccountIDs: []string{accountID}, + ResourceIDs: []string{"1"}, + Roles: []string{"role_id"}, + OrderBy: []string{"updated_at:desc"}, + }). + Return(expectedActiveGrants, nil).Once() + s.mockProviderService.EXPECT(). + ValidateAppeal(mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil) + s.mockProviderService.EXPECT(). + GetPermissions(mock.Anything, mock.Anything, mock.AnythingOfType("string"), "role_id"). + Return([]interface{}{"test-permission-1"}, nil) + + s.mockRepository.EXPECT(). + BulkUpsert(mock.MatchedBy(func(ctx context.Context) bool { return true }), expectedAppealsInsertionParam). + Return(nil). + Run(func(_a0 context.Context, appeals []*domain.Appeal) { + for i, a := range appeals { + a.ID = expectedResult[i].ID + for j, approval := range a.Approvals { + approval.ID = expectedResult[i].Approvals[j].ID + } + } + }). + Once() + s.mockNotifier.EXPECT(). + Notify(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.Anything). + Return(nil).Once() + s.mockAuditLogger.EXPECT(). + Log(mock.Anything, appeal.AuditKeyBulkInsert, mock.Anything). + Return(nil).Once() + + appeals := []*domain.Appeal{ + { + CreatedBy: accountID, + AccountID: accountID, + ResourceID: "1", + Resource: &domain.Resource{ + ID: "1", + URN: "urn", + }, + Role: "role_id", + Description: "The answer is 42", + }, + } + actualError := s.service.Create(context.Background(), appeals) + + s.Nil(actualError) + s.Equal(expectedResult, appeals) + s.mockProviderService.AssertExpectations(s.T()) + s.mockRepository.AssertExpectations(s.T()) +} + func (s *ServiceTestSuite) TestUpdateApproval() { appealID := uuid.New().String() appeal.TimeNow = func() time.Time { diff --git a/core/policy/metadata_source.go b/core/policy/metadata_source.go new file mode 100644 index 000000000..33ab3efcf --- /dev/null +++ b/core/policy/metadata_source.go @@ -0,0 +1,8 @@ +package policy + +import "github.com/goto/guardian/pkg/http" + +type AppealMetadataSourceConfigHTTP struct { + http.HTTPClientConfig `mapstructure:",squash"` + AllowFailed bool `mapstructure:"allow_failed,omitempty" json:"allow_failed,omitempty" yaml:"allow_failed,omitempty"` +} diff --git a/core/policy/service.go b/core/policy/service.go index 360e132c2..c8acc5268 100644 --- a/core/policy/service.go +++ b/core/policy/service.go @@ -50,6 +50,7 @@ type Service struct { providerService providerService iam domain.IAMManager + crypto domain.Crypto validator *validator.Validate logger log.Logger auditLogger auditLogger @@ -61,6 +62,7 @@ type ServiceDeps struct { ProviderService providerService IAMManager domain.IAMManager + Crypto domain.Crypto Validator *validator.Validate Logger log.Logger AuditLogger auditLogger @@ -74,6 +76,7 @@ func NewService(deps ServiceDeps) *Service { deps.ProviderService, deps.IAMManager, + deps.Crypto, deps.Validator, deps.Logger, deps.AuditLogger, @@ -105,6 +108,12 @@ func (s *Service) Create(ctx context.Context, p *domain.Policy) error { p.IAM.Config = sensitiveConfig } + if p.HasAppealMetadataSources() { + if err := s.encryptAppealMetadata(p); err != nil { + return err + } + } + if !isDryRun(ctx) { if err := s.repository.Create(ctx, p); err != nil { return err @@ -121,6 +130,12 @@ func (s *Service) Create(ctx context.Context, p *domain.Policy) error { } } + if p.HasAppealMetadataSources() { + if err := s.decryptAppealMetadata(p); err != nil { + return err + } + } + return nil } @@ -137,6 +152,12 @@ func (s *Service) Find(ctx context.Context) ([]*domain.Policy, error) { return nil, err } } + + if p.HasAppealMetadataSources() { + if err := s.decryptAppealMetadata(p); err != nil { + return nil, err + } + } } return policies, nil } @@ -154,6 +175,12 @@ func (s *Service) GetOne(ctx context.Context, id string, version uint) (*domain. } } + if p.HasAppealMetadataSources() { + if err := s.decryptAppealMetadata(p); err != nil { + return nil, err + } + } + return p, nil } @@ -189,6 +216,12 @@ func (s *Service) Update(ctx context.Context, p *domain.Policy) error { p.IAM.Config = sensitiveConfig } + if p.HasAppealMetadataSources() { + if err := s.encryptAppealMetadata(p); err != nil { + return err + } + } + p.Version = latestPolicy.Version + 1 if !isDryRun(ctx) { @@ -206,6 +239,43 @@ func (s *Service) Update(ctx context.Context, p *domain.Policy) error { return err } } + + if p.HasAppealMetadataSources() { + if err := s.decryptAppealMetadata(p); err != nil { + return err + } + } + + return nil +} + +func (s *Service) encryptAppealMetadata(p *domain.Policy) error { + if p.AppealConfig == nil { + return nil + } + for _, sourceCfg := range p.AppealConfig.MetadataSources { + if sourceCfg.Config == nil { + continue + } + if err := sourceCfg.EncryptConfig(s.crypto); err != nil { + return err + } + } + return nil +} + +func (s *Service) decryptAppealMetadata(p *domain.Policy) error { + if p.AppealConfig == nil { + return nil + } + for _, sourceCfg := range p.AppealConfig.MetadataSources { + if sourceCfg.Config == nil { + continue + } + if err := sourceCfg.DecryptConfig(s.crypto); err != nil { + return err + } + } return nil } @@ -264,9 +334,39 @@ func (s *Service) validatePolicy(ctx context.Context, p *domain.Policy, excluded } } + if p.HasAppealMetadataSources() { + for key, metadataSource := range p.AppealConfig.MetadataSources { + if err := s.validateAppealMetadataSource(ctx, metadataSource); err != nil { + return fmt.Errorf("invalid appeal metadata source: %s : %w", key, err) + } + } + } + return nil } +func (s *Service) validateAppealMetadataSource(ctx context.Context, metadataSource *domain.AppealMetadataSource) error { + if metadataSource.Name == "" { + return fmt.Errorf("name should not be empty") + } + if metadataSource.Value == nil { + return fmt.Errorf("value should not be empty") + } + + switch metadataSource.Type { + case "http": + if metadataSource.Config == nil { + return fmt.Errorf(`"config" is required for type http`) + } + // TODO: validate http config + return nil + case "static": + return nil + default: + return fmt.Errorf("invalid metadata source type: %s", metadataSource.Type) + } +} + func (s *Service) validateRequirements(ctx context.Context, requirements []*domain.Requirement) error { for i, r := range requirements { for j, aa := range r.Appeals { diff --git a/core/policy/service_test.go b/core/policy/service_test.go index 3c72dcc26..0c27d5d82 100644 --- a/core/policy/service_test.go +++ b/core/policy/service_test.go @@ -2,6 +2,7 @@ package policy_test import ( "context" + "encoding/json" "errors" "testing" @@ -43,6 +44,7 @@ func (s *ServiceTestSuite) SetupTest() { ResourceService: s.mockResourceService, ProviderService: s.mockProviderService, IAMManager: iamManager, + Crypto: s.mockCrypto, AuditLogger: s.mockAuditLogger, Validator: validator.New(), }) @@ -300,93 +302,118 @@ func (s *ServiceTestSuite) TestCreate() { }) }) - validPolicy := &domain.Policy{ - ID: "id", - Version: 1, - Steps: []*domain.Step{ - { - Name: "test", - Strategy: "manual", - Approvers: []string{ - "user@email.com", + getValidPolicy := func() *domain.Policy { + return &domain.Policy{ + ID: "id", + Version: 1, + Steps: []*domain.Step{ + { + Name: "test", + Strategy: "manual", + Approvers: []string{ + "user@email.com", + }, }, }, - }, - AppealConfig: &domain.PolicyAppealConfig{ - DurationOptions: []domain.AppealDurationOption{ - { - Name: "1 day", - Value: "24h", + AppealConfig: &domain.PolicyAppealConfig{ + DurationOptions: []domain.AppealDurationOption{ + { + Name: "1 day", + Value: "24h", + }, + { + Name: "2 days", + Value: "48h", + }, }, - { - Name: "2 days", - Value: "48h", + AllowPermanentAccess: false, + AllowActiveAccessExtensionIn: "24h", + MetadataSources: map[string]*domain.AppealMetadataSource{ + "test-static-source": { + Type: "static", + Name: "test name", + Description: "test description", + Value: "test value", + }, + "test-http-source": { + Type: "http", + Name: "test name", + Description: "test description", + Config: map[string]interface{}{ + "url": "http://test-localhost:8080", + }, + Value: "$response.body", + }, }, }, - AllowPermanentAccess: false, - AllowActiveAccessExtensionIn: "24h", - }, - IAM: &domain.IAMConfig{ - Provider: "http", - Config: map[string]interface{}{ - "url": "http://test-localhost:8080", - "auth": map[string]interface{}{ - "type": "basic", - "username": "test-user", - "password": "test-password", + IAM: &domain.IAMConfig{ + Provider: "http", + Config: map[string]interface{}{ + "url": "http://test-localhost:8080", + "auth": map[string]interface{}{ + "type": "basic", + "username": "test-user", + "password": "test-password", + }, }, }, - }, + } } s.Run("should return error if got error from the policy repository", func() { + validPolicy := getValidPolicy() expectedError := errors.New("error from repository") s.mockPolicyRepository.EXPECT().Create(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.Anything).Return(expectedError).Once() - s.mockCrypto.EXPECT().Encrypt("test-password").Return("test-password", nil).Once() - s.mockCrypto.EXPECT().Decrypt("test-password").Return("test-password", nil).Once() + s.mockCrypto.EXPECT().Encrypt("test-password").Return("encrypted-test-password", nil).Once() + s.mockCrypto.EXPECT().Encrypt(`{"url":"http://test-localhost:8080"}`).Return("encrypted-config", nil).Once() actualError := s.service.Create(context.Background(), validPolicy) s.EqualError(actualError, expectedError.Error()) + s.mockPolicyRepository.AssertExpectations(s.T()) + s.mockCrypto.AssertExpectations(s.T()) }) s.Run("should set initial version to 1", func() { - p := &domain.Policy{ - ID: "test", - Steps: validPolicy.Steps, - } + validPolicy := getValidPolicy() expectedVersion := uint(1) - s.mockPolicyRepository.EXPECT().Create(mock.MatchedBy(func(ctx context.Context) bool { return true }), p).Return(nil).Once() - s.mockCrypto.EXPECT().Encrypt("test-password").Return("test-password", nil).Once() - s.mockCrypto.EXPECT().Decrypt("test-password").Return("test-password", nil).Once() - s.mockAuditLogger.EXPECT().Log(mock.Anything, policy.AuditKeyPolicyCreate, mock.Anything).Return(nil).Once() - - actualError := s.service.Create(context.Background(), p) - - s.Nil(actualError) - s.Equal(expectedVersion, p.Version) - s.mockPolicyRepository.AssertExpectations(s.T()) - s.mockAuditLogger.AssertExpectations(s.T()) - }) - - s.Run("should pass the model from the param", func() { - s.mockPolicyRepository.EXPECT().Create(mock.MatchedBy(func(ctx context.Context) bool { return true }), validPolicy).Return(nil).Once() + s.mockPolicyRepository.EXPECT(). + Create( + mock.MatchedBy(func(ctx context.Context) bool { return true }), + mock.MatchedBy(func(arg interface{}) bool { + insertedPolicy := arg.(*domain.Policy) + return (insertedPolicy.ID == validPolicy.ID && + insertedPolicy.Version == expectedVersion && + insertedPolicy.AppealConfig.MetadataSources["test-http-source"].Config == "encrypted-config" && + insertedPolicy.IAM.Config.(*identities.HTTPClientConfig).Auth.Password == "encrypted-test-password") + }), + ). + Return(nil).Once() + s.mockCrypto.EXPECT().Encrypt("test-password").Return("encrypted-test-password", nil).Once() + s.mockCrypto.EXPECT().Encrypt(`{"url":"http://test-localhost:8080"}`).Return("encrypted-config", nil).Once() + s.mockCrypto.EXPECT().Decrypt("encrypted-test-password").Return("test-password", nil).Once() + s.mockCrypto.EXPECT().Decrypt("encrypted-config").Return(`{"url":"http://test-localhost:8080"}`, nil).Once() s.mockAuditLogger.EXPECT().Log(mock.Anything, policy.AuditKeyPolicyCreate, mock.Anything).Return(nil).Once() - s.mockCrypto.EXPECT().Encrypt("test-password").Return("test-password", nil).Once() - s.mockCrypto.EXPECT().Decrypt("test-password").Return("test-password", nil).Once() actualError := s.service.Create(context.Background(), validPolicy) s.Nil(actualError) + s.Equal(expectedVersion, validPolicy.Version) s.mockPolicyRepository.AssertExpectations(s.T()) s.mockAuditLogger.AssertExpectations(s.T()) + s.mockCrypto.AssertExpectations(s.T()) }) s.Run("with dryRun true", func() { + validPolicy := getValidPolicy() s.Run("with valid policy should not call repository", func() { - ctx := policy.WithDryRun(context.Background()) + s.mockCrypto.EXPECT().Encrypt("test-password").Return("test-password", nil).Once() + s.mockCrypto.EXPECT().Encrypt(`{"url":"http://test-localhost:8080"}`).Return("encrypted-config", nil).Once() + s.mockCrypto.EXPECT().Decrypt("test-password").Return("test-password", nil).Once() + s.mockCrypto.EXPECT().Decrypt("encrypted-config").Return(`{"url":"http://test-localhost:8080"}`, nil).Once() + ctx := policy.WithDryRun(context.Background()) actualError := s.service.Create(ctx, validPolicy) s.Nil(actualError) @@ -646,7 +673,7 @@ func (s *ServiceTestSuite) TestFind() { }) s.Run("should return list of records on success", func() { - expectedResult := []*domain.Policy{ + dummyPolicies := []*domain.Policy{ { IAM: &domain.IAMConfig{ Provider: "http", @@ -655,20 +682,46 @@ func (s *ServiceTestSuite) TestFind() { "auth": map[string]interface{}{ "type": "basic", "username": "test-user", - "password": "test-password", + "password": "encrypted-test-password", + }, + }, + }, + AppealConfig: &domain.PolicyAppealConfig{ + MetadataSources: map[string]*domain.AppealMetadataSource{ + "test-static-source": { + Type: "static", + Name: "test name", + Description: "test description", + Value: "test value", + }, + "test-http-source": { + Type: "http", + Name: "test name", + Description: "test description", + Config: "encrypted-config", + Value: "$response.body", }, }, }, }, } - s.mockPolicyRepository.EXPECT().Find(mock.MatchedBy(func(ctx context.Context) bool { return true })).Return(expectedResult, nil).Once() - s.mockCrypto.EXPECT().Decrypt("test-password").Return("test-password", nil).Once() + s.mockPolicyRepository.EXPECT(). + Find(mock.MatchedBy(func(ctx context.Context) bool { return true })). + Return(dummyPolicies, nil).Once() + expectedPassword := "test-password" + s.mockCrypto.EXPECT().Decrypt("encrypted-test-password").Return(expectedPassword, nil).Once() + expectedConfig := map[string]interface{}{"url": "http://test-localhost:8080"} + expectedConfigJSON, _ := json.Marshal(expectedConfig) + s.mockCrypto.EXPECT().Decrypt("encrypted-config").Return(string(expectedConfigJSON), nil).Once() actualResult, actualError := s.service.Find(context.Background()) - s.Equal(expectedResult, actualResult) + s.Len(actualResult, len(dummyPolicies)) + s.Equal(actualResult[0].IAM.Config.(map[string]any)["auth"].(map[string]any)["password"], expectedPassword) + s.Equal(actualResult[0].AppealConfig.MetadataSources["test-http-source"].Config, expectedConfig) s.Nil(actualError) s.mockPolicyRepository.AssertExpectations(s.T()) + s.mockCrypto.AssertExpectations(s.T()) }) } @@ -684,7 +737,7 @@ func (s *ServiceTestSuite) TestGetOne() { }) s.Run("should return list of records on success", func() { - expectedResult := &domain.Policy{ + dummyPolicy := &domain.Policy{ IAM: &domain.IAMConfig{ Provider: "http", Config: map[string]interface{}{ @@ -692,19 +745,42 @@ func (s *ServiceTestSuite) TestGetOne() { "auth": map[string]interface{}{ "type": "basic", "username": "test-user", - "password": "test-password", + "password": "encrypted-test-password", + }, + }, + }, + AppealConfig: &domain.PolicyAppealConfig{ + MetadataSources: map[string]*domain.AppealMetadataSource{ + "test-static-source": { + Type: "static", + Name: "test name", + Description: "test description", + Value: "test value", + }, + "test-http-source": { + Type: "http", + Name: "test name", + Description: "test description", + Config: "encrypted-config", + Value: "$response.body", }, }, }, } - s.mockPolicyRepository.EXPECT().GetOne(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.Anything, mock.Anything).Return(expectedResult, nil).Once() - s.mockCrypto.EXPECT().Decrypt("test-password").Return("test-password", nil).Once() + s.mockPolicyRepository.EXPECT().GetOne(mock.MatchedBy(func(ctx context.Context) bool { return true }), mock.Anything, mock.Anything).Return(dummyPolicy, nil).Once() + expectedPassword := "test-password" + s.mockCrypto.EXPECT().Decrypt("encrypted-test-password").Return(expectedPassword, nil).Once() + expectedConfig := map[string]interface{}{"url": "http://test-localhost:8080"} + expectedConfigJSON, _ := json.Marshal(expectedConfig) + s.mockCrypto.EXPECT().Decrypt("encrypted-config").Return(string(expectedConfigJSON), nil).Once() actualResult, actualError := s.service.GetOne(context.Background(), "", 0) - s.Equal(expectedResult, actualResult) + s.Equal(actualResult.IAM.Config.(map[string]any)["auth"].(map[string]any)["password"], expectedPassword) + s.Equal(actualResult.AppealConfig.MetadataSources["test-http-source"].Config, expectedConfig) s.Nil(actualError) s.mockPolicyRepository.AssertExpectations(s.T()) + s.mockCrypto.AssertExpectations(s.T()) }) } @@ -742,6 +818,25 @@ func (s *ServiceTestSuite) TestUpdate() { }, }, }, + AppealConfig: &domain.PolicyAppealConfig{ + MetadataSources: map[string]*domain.AppealMetadataSource{ + "test-static-source": { + Type: "static", + Name: "test name", + Description: "test description", + Value: "test value", + }, + "test-http-source": { + Type: "http", + Name: "test name", + Description: "test description", + Config: map[string]interface{}{ + "url": "http://test-localhost:8080", + }, + Value: "$response.body", + }, + }, + }, } expectedLatestPolicy := &domain.Policy{ @@ -749,17 +844,32 @@ func (s *ServiceTestSuite) TestUpdate() { Version: 5, } expectedNewVersion := uint(6) - s.mockPolicyRepository.EXPECT().GetOne(mock.MatchedBy(func(ctx context.Context) bool { return true }), p.ID, uint(0)).Return(expectedLatestPolicy, nil).Once() - s.mockPolicyRepository.EXPECT().Create(mock.MatchedBy(func(ctx context.Context) bool { return true }), p).Return(nil) - s.mockCrypto.EXPECT().Encrypt("test-password").Return("test-password", nil).Once() - s.mockCrypto.EXPECT().Decrypt("test-password").Return("test-password", nil).Once() + s.mockPolicyRepository.EXPECT(). + GetOne(mock.MatchedBy(func(ctx context.Context) bool { return true }), p.ID, uint(0)). + Return(expectedLatestPolicy, nil).Once() + s.mockPolicyRepository.EXPECT(). + Create( + mock.MatchedBy(func(ctx context.Context) bool { return true }), + mock.MatchedBy(func(arg interface{}) bool { + insertedPolicy := arg.(*domain.Policy) + return (insertedPolicy.ID == p.ID && + insertedPolicy.Version == expectedNewVersion && + insertedPolicy.AppealConfig.MetadataSources["test-http-source"].Config == "encrypted-config" && + insertedPolicy.IAM.Config.(*identities.HTTPClientConfig).Auth.Password == "encrypted-test-password") + }), + ).Return(nil) + s.mockCrypto.EXPECT().Encrypt("test-password").Return("encrypted-test-password", nil).Once() + s.mockCrypto.EXPECT().Encrypt(`{"url":"http://test-localhost:8080"}`).Return("encrypted-config", nil).Once() + s.mockCrypto.EXPECT().Decrypt("encrypted-test-password").Return("test-password", nil).Once() + s.mockCrypto.EXPECT().Decrypt("encrypted-config").Return(`{"url":"http://test-localhost:8080"}`, nil).Once() s.mockAuditLogger.EXPECT().Log(mock.Anything, policy.AuditKeyPolicyUpdate, mock.Anything).Return(nil).Once() s.service.Update(context.Background(), p) + s.Equal(expectedNewVersion, p.Version) s.mockPolicyRepository.AssertExpectations(s.T()) s.mockAuditLogger.AssertExpectations(s.T()) - s.Equal(expectedNewVersion, p.Version) + s.mockCrypto.AssertExpectations(s.T()) }) s.Run("with dryRun true", func() { diff --git a/docs/docs/reference/policy.md b/docs/docs/reference/policy.md index 862052512..61c8c3204 100644 --- a/docs/docs/reference/policy.md +++ b/docs/docs/reference/policy.md @@ -17,7 +17,7 @@ steps: strategy: manual approvers: - $appeal.resource.details.owner -appeal_config: +appeal: duration_options: - name: 1 Day value: 24h @@ -68,7 +68,7 @@ requirements: | `id` | `string` | Policy unique identifier | YES | | `version` | `uint` | Auto increment value. Keeping the | NO | | `steps` | [`[]object(Step)`](#step) | Sequence of approval steps | YES | -| `appeal_config` | [`object(PolicyAppealConfig)`](#policyappealconfig) | appeal configuration options | NO | +| `appeal` | [`object(PolicyAppealConfig)`](#policyappealconfig) | appeal configuration options | NO | | `iam` | [`object(IAM)`](#iam) | Identity manager configuration for client and identity/creator schema | NO | | `requirements` | [`[]object(Requirement)`](#requirement) | Additional appeals | YES | diff --git a/domain/appeal.go b/domain/appeal.go index 86911bd49..5108fbf8c 100644 --- a/domain/appeal.go +++ b/domain/appeal.go @@ -207,7 +207,7 @@ func (a *Appeal) AdvanceApproval(policy *Policy) error { if approval.Status == ApprovalStatusPending { stepConfig := policy.Steps[approval.Index] - appealMap, err := utils.StructToMap(a) + appealMap, err := a.ToMap() if err != nil { return fmt.Errorf("parsing appeal struct to map: %w", err) } @@ -265,6 +265,10 @@ func (a *Appeal) AdvanceApproval(policy *Policy) error { return nil } +func (a *Appeal) ToMap() (map[string]interface{}, error) { + return utils.StructToMap(a) +} + type ApprovalActionType string const ( diff --git a/domain/policy.go b/domain/policy.go index 6f8ac030e..b857e906f 100644 --- a/domain/policy.go +++ b/domain/policy.go @@ -289,7 +289,7 @@ type Policy struct { Version uint `json:"version" yaml:"version" validate:"required"` Description string `json:"description" yaml:"description"` Steps []*Step `json:"steps" yaml:"steps" validate:"required,min=1,dive"` - AppealConfig *PolicyAppealConfig `json:"appeal_config" yaml:"appeal_config" validate:"omitempty,dive"` + AppealConfig *PolicyAppealConfig `json:"appeal" yaml:"appeal" validate:"omitempty,dive"` Requirements []*Requirement `json:"requirements,omitempty" yaml:"requirements,omitempty" validate:"omitempty,min=1,dive"` Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"` IAM *IAMConfig `json:"iam,omitempty" yaml:"iam,omitempty" validate:"omitempty,dive"` @@ -297,6 +297,17 @@ type Policy struct { UpdatedAt time.Time `json:"updated_at,omitempty" yaml:"updated_at,omitempty"` } +func (p *Policy) RemoveSensitiveValues() { + if p.IAM != nil { + p.IAM.Config = nil + } + if p.AppealConfig != nil { + for key := range p.AppealConfig.MetadataSources { + p.AppealConfig.MetadataSources[key].Config = nil + } + } +} + type PolicyAppealConfig struct { DurationOptions []AppealDurationOption `json:"duration_options" yaml:"duration_options" validate:"omitempty,min=1,dive"` AllowOnBehalf bool `json:"allow_on_behalf" yaml:"allow_on_behalf"` @@ -308,7 +319,8 @@ type PolicyAppealConfig struct { // value of `creator` field in the appeal will be nil. // Note: any expression that tries to access `$appeal.creator.*` is still evaluated as usual, it might need to have // proper nil checking to avoid accessing nil value. - AllowCreatorDetailsFailure bool `json:"allow_creator_details_failure" yaml:"allow_creator_details_failure"` + AllowCreatorDetailsFailure bool `json:"allow_creator_details_failure" yaml:"allow_creator_details_failure"` + MetadataSources map[string]*AppealMetadataSource `json:"metadata_sources,omitempty" yaml:"metadata_sources,omitempty"` } type Question struct { @@ -331,3 +343,7 @@ type AppealDurationOption struct { func (p *Policy) HasIAMConfig() bool { return p.IAM != nil } + +func (p *Policy) HasAppealMetadataSources() bool { + return p.AppealConfig != nil && p.AppealConfig.MetadataSources != nil +} diff --git a/domain/policy_metadata_source.go b/domain/policy_metadata_source.go new file mode 100644 index 000000000..28e94044d --- /dev/null +++ b/domain/policy_metadata_source.go @@ -0,0 +1,95 @@ +package domain + +import ( + "encoding/json" + "fmt" + "reflect" + "strings" + + "github.com/goto/guardian/pkg/evaluator" +) + +type AppealMetadataSource struct { + Name string `json:"name" yaml:"name"` + Description string `json:"description,omitempty" yaml:"description,omitempty"` + Type string `json:"type" yaml:"type"` + Config interface{} `json:"config,omitempty" yaml:"config,omitempty"` + Value interface{} `json:"value" yaml:"value"` +} + +func (c *AppealMetadataSource) EncryptConfig(enc Encryptor) error { + configStr, err := json.Marshal(c.Config) + if err != nil { + return fmt.Errorf("failed to json.Marshal config: %w", err) + } + + encryptedConfig, err := enc.Encrypt(string(configStr)) + if err != nil { + return err + } + c.Config = encryptedConfig + + return nil +} + +func (c *AppealMetadataSource) DecryptConfig(dec Decryptor) error { + configStr, ok := c.Config.(string) + if !ok { + return fmt.Errorf("invalid config type: %T, expected string", c.Config) + } + decryptedConfig, err := dec.Decrypt(configStr) + if err != nil { + return err + } + + var cfg interface{} + if err := json.Unmarshal([]byte(decryptedConfig), &cfg); err != nil { + return fmt.Errorf("failed to json.Unmarshal config: %w", err) + } + c.Config = cfg + + return nil +} + +func (c *AppealMetadataSource) EvaluateValue(params map[string]interface{}) (interface{}, error) { + return c.evaluateValue(c.Value, params) +} + +func (c *AppealMetadataSource) evaluateValue(value interface{}, params map[string]interface{}) (interface{}, error) { + v := reflect.ValueOf(value) + switch v.Kind() { + case reflect.String: + if strings.Contains(v.String(), "$appeal") || strings.Contains(v.String(), "$response") { + result, err := evaluator.Expression(v.String()).EvaluateWithVars(params) + if err != nil { + return nil, err + } + return result, nil + } + return value, nil + case reflect.Map: + mapResult := map[string]interface{}{} + for _, key := range v.MapKeys() { + val := v.MapIndex(key).Interface() + processedVal, err := c.evaluateValue(val, params) + if err != nil { + return nil, err + } + mapResult[key.String()] = processedVal + } + return mapResult, nil + case reflect.Slice: + arrayResult := make([]interface{}, v.Len()) + for i := 0; i < v.Len(); i++ { + val := v.Index(i).Interface() + processedVal, err := c.evaluateValue(val, params) + if err != nil { + return nil, err + } + arrayResult[i] = processedVal + } + return arrayResult, nil + default: + return v.Interface(), nil + } +} diff --git a/domain/policy_metadata_source_test.go b/domain/policy_metadata_source_test.go new file mode 100644 index 000000000..d41e5bd7e --- /dev/null +++ b/domain/policy_metadata_source_test.go @@ -0,0 +1,197 @@ +package domain_test + +import ( + "testing" + + "github.com/goto/guardian/domain" + "github.com/goto/guardian/mocks" + "github.com/stretchr/testify/assert" +) + +func TestAppealMetadataSource_EncryptConfig(t *testing.T) { + t.Run("should encrypt config", func(t *testing.T) { + mockEncryptor := new(mocks.Crypto) + mockEncryptor.EXPECT().Encrypt(`{"key":"value"}`).Return("encrypted", nil) + defer mockEncryptor.AssertExpectations(t) + + ms := &domain.AppealMetadataSource{ + Config: map[string]interface{}{ + "key": "value", + }, + } + err := ms.EncryptConfig(mockEncryptor) + + assert.NoError(t, err) + assert.Equal(t, "encrypted", ms.Config) + }) + + t.Run("should return error if marshalling fails", func(t *testing.T) { + ms := &domain.AppealMetadataSource{ + Config: make(chan int), + } + err := ms.EncryptConfig(nil) + + assert.Error(t, err) + }) + + t.Run("should return error if encryption fails", func(t *testing.T) { + mockEncryptor := new(mocks.Crypto) + mockEncryptor.EXPECT().Encrypt(`{"key":"value"}`).Return("", assert.AnError) + defer mockEncryptor.AssertExpectations(t) + + ms := &domain.AppealMetadataSource{ + Config: map[string]interface{}{ + "key": "value", + }, + } + err := ms.EncryptConfig(mockEncryptor) + + assert.Error(t, err) + }) +} + +func TestAppealMetadataSource_DecryptConfig(t *testing.T) { + t.Run("should decrypt config", func(t *testing.T) { + mockDecryptor := new(mocks.Crypto) + mockDecryptor.EXPECT().Decrypt("encrypted").Return(`{"key":"value"}`, nil) + defer mockDecryptor.AssertExpectations(t) + + ms := &domain.AppealMetadataSource{ + Config: "encrypted", + } + err := ms.DecryptConfig(mockDecryptor) + + assert.NoError(t, err) + assert.Equal(t, map[string]interface{}{"key": "value"}, ms.Config) + }) + + t.Run("should return error if config is not a string", func(t *testing.T) { + ms := &domain.AppealMetadataSource{ + Config: 123, + } + err := ms.DecryptConfig(nil) + + assert.Error(t, err) + }) + + t.Run("should return error if decryption fails", func(t *testing.T) { + mockDecryptor := new(mocks.Crypto) + mockDecryptor.EXPECT().Decrypt("encrypted").Return("", assert.AnError) + defer mockDecryptor.AssertExpectations(t) + + ms := &domain.AppealMetadataSource{ + Config: "encrypted", + } + err := ms.DecryptConfig(mockDecryptor) + + assert.Error(t, err) + }) + + t.Run("should return error if unmarshalling fails", func(t *testing.T) { + mockDecryptor := new(mocks.Crypto) + mockDecryptor.EXPECT().Decrypt("encrypted").Return("invalid-json", nil) + defer mockDecryptor.AssertExpectations(t) + + ms := &domain.AppealMetadataSource{ + Config: "encrypted", + } + err := ms.DecryptConfig(mockDecryptor) + + assert.Error(t, err) + }) +} + +func TestAppealMetadataSource_EvaluateValue(t *testing.T) { + testCases := []struct { + name string + value interface{} + params map[string]interface{} + expectedValue interface{} + }{ + { + name: "string value", + value: "test", + expectedValue: "test", + }, + { + name: "int value", + value: 10, + expectedValue: 10, + }, + { + name: "string value with params", + value: "$appeal.foo", + params: map[string]interface{}{ + "appeal": map[string]interface{}{ + "foo": "bar", + }, + }, + expectedValue: "bar", + }, + { + name: "string value with nested params", + value: "$appeal.foo.bar", + params: map[string]interface{}{ + "appeal": map[string]interface{}{ + "foo": map[string]interface{}{ + "bar": "baz", + }, + }, + }, + expectedValue: "baz", + }, + { + name: "complex", + value: map[string]interface{}{ + "policy": `$appeal.policy_id + "@" + string($appeal.policy_version)`, + "user_details": `$response.status_code == 200 ? $response.body.user[0] : nil`, + "string_list": []string{ + "$appeal.details.list[0]", + "$appeal.details.list[1]", + "$appeal.details.list[2]", + }, + }, + params: map[string]interface{}{ + "appeal": map[string]interface{}{ + "id": "123", + "policy_id": "test-policy", + "policy_version": 1, + "details": map[string]interface{}{ + "list": []string{"a", "b", "c"}, + }, + }, + "response": map[string]interface{}{ + "status_code": 200, + "body": map[string]interface{}{ + "user": []map[string]interface{}{ + { + "id": "123", + "email": "user@example.com", + }, + }, + }, + }, + }, + expectedValue: map[string]interface{}{ + "policy": "test-policy@1", + "user_details": map[string]interface{}{ + "id": "123", + "email": "user@example.com", + }, + "string_list": []interface{}{"a", "b", "c"}, + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + ms := &domain.AppealMetadataSource{ + Value: tc.value, + } + + result, err := ms.EvaluateValue(tc.params) + assert.NoError(t, err) + assert.Equal(t, tc.expectedValue, result) + }) + } +} diff --git a/internal/server/services.go b/internal/server/services.go index 98ed6f7df..8b4c349ec 100644 --- a/internal/server/services.go +++ b/internal/server/services.go @@ -143,6 +143,7 @@ func InitServices(deps ServiceDeps) (*Services, error) { ResourceService: resourceService, ProviderService: providerService, IAMManager: iamManager, + Crypto: deps.Crypto, Validator: deps.Validator, Logger: deps.Logger, AuditLogger: auditLogger, diff --git a/internal/store/postgres/appeal_repository_test.go b/internal/store/postgres/appeal_repository_test.go index 710e2fc49..f49b1761c 100644 --- a/internal/store/postgres/appeal_repository_test.go +++ b/internal/store/postgres/appeal_repository_test.go @@ -191,7 +191,6 @@ func (s *AppealRepositoryTestSuite) TestGetByID() { } func (s *AppealRepositoryTestSuite) TestGetAppealsTotalCount() { - dummyAppeals := []*domain.Appeal{ { ResourceID: s.dummyResource.ID, diff --git a/pkg/http/http.go b/pkg/http/http.go new file mode 100644 index 000000000..09a6488af --- /dev/null +++ b/pkg/http/http.go @@ -0,0 +1,134 @@ +package http + +import ( + "context" + "encoding/base64" + "fmt" + "net/http" + + "github.com/go-playground/validator/v10" + "github.com/mcuadros/go-defaults" + "golang.org/x/oauth2" + "google.golang.org/api/idtoken" +) + +type HTTPAuthConfig struct { + Type string `mapstructure:"type" json:"type" yaml:"type" validate:"required,oneof=basic api_key bearer google_idtoken"` + + // basic auth + Username string `mapstructure:"username,omitempty" json:"username,omitempty" yaml:"username,omitempty" validate:"required_if=Type basic"` + Password string `mapstructure:"password,omitempty" json:"password,omitempty" yaml:"password,omitempty" validate:"required_if=Type basic"` + + // api key + In string `mapstructure:"in,omitempty" json:"in,omitempty" yaml:"in,omitempty" validate:"required_if=Type api_key,omitempty,oneof=query header"` + Key string `mapstructure:"key,omitempty" json:"key,omitempty" yaml:"key,omitempty" validate:"required_if=Type api_key"` + Value string `mapstructure:"value,omitempty" json:"value,omitempty" yaml:"value,omitempty" validate:"required_if=Type api_key"` + + // bearer + Token string `mapstructure:"token,omitempty" json:"token,omitempty" yaml:"token,omitempty" validate:"required_if=Type bearer"` + + // google_idtoken + Audience string `mapstructure:"audience,omitempty" json:"audience,omitempty" yaml:"audience,omitempty" validate:"required_if=Type google_idtoken"` + // CredentialsJSONBase64 accept a base64 encoded JSON stringified credentials + CredentialsJSONBase64 string `mapstructure:"credentials_json_base64,omitempty" json:"credentials_json_base64,omitempty" yaml:"credentials_json_base64,omitempty"` +} + +// HTTPClientConfig is the configuration required by iam.Client +type HTTPClientConfig struct { + URL string `mapstructure:"url" json:"url" yaml:"url" validate:"required,url"` + Headers map[string]string `mapstructure:"headers,omitempty" json:"headers,omitempty" yaml:"headers,omitempty"` + Auth *HTTPAuthConfig `mapstructure:"auth,omitempty" json:"auth,omitempty" yaml:"auth,omitempty" validate:"omitempty,dive"` + + HTTPClient *http.Client `mapstructure:"-" json:"-" yaml:"-"` + Validator *validator.Validate +} + +// HTTPClient wraps the http client for external approver resolver service +type HTTPClient struct { + httpClient *http.Client + config *HTTPClientConfig + + url string +} + +// NewHTTPClient returns *iam.Client +func NewHTTPClient(config *HTTPClientConfig) (*HTTPClient, error) { + defaults.SetDefaults(config) + if err := validator.New().Struct(config); err != nil { + return nil, err + } + httpClient := config.HTTPClient + if httpClient == nil { + httpClient = http.DefaultClient + } + + if config.Auth != nil && config.Auth.Type == "google_idtoken" { + var creds []byte + switch { + case config.Auth.CredentialsJSONBase64 != "": + v, err := base64.StdEncoding.DecodeString(config.Auth.CredentialsJSONBase64) + if err != nil { + return nil, fmt.Errorf("decoding credentials_json_base64: %w", err) + } + creds = v + default: + return nil, fmt.Errorf("missing credentials for google_idtoken auth") + } + + ctx := context.Background() + ts, err := idtoken.NewTokenSource(ctx, config.Auth.Audience, idtoken.WithCredentialsJSON(creds)) + if err != nil { + return nil, err + } + httpClient = oauth2.NewClient(ctx, ts) + } + + return &HTTPClient{ + httpClient: httpClient, + config: config, + url: config.URL, + }, nil +} + +func (c *HTTPClient) setAuth(req *http.Request) { + if c.config.Auth != nil { + switch c.config.Auth.Type { + case "basic": + req.SetBasicAuth(c.config.Auth.Username, c.config.Auth.Password) + case "api_key": + switch c.config.Auth.In { + case "query": + q := req.URL.Query() + q.Add(c.config.Auth.Key, c.config.Auth.Value) + req.URL.RawQuery = q.Encode() + case "header": + req.Header.Add(c.config.Auth.Key, c.config.Auth.Value) + default: + } + case "bearer": + req.Header.Add("Authorization", "Bearer "+c.config.Auth.Token) + default: + } + } +} + +func (c *HTTPClient) MakeRequest(ctx context.Context) (*http.Response, error) { + req, err := http.NewRequest(http.MethodGet, c.config.URL, nil) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + req.Header.Set("Accept", "application/json") + + for k, v := range c.config.Headers { + req.Header.Set(k, v) + } + c.setAuth(req) + + res, err := c.httpClient.Do(req) + if err != nil { + return nil, err + } + + return res, nil +} diff --git a/third_party/OpenAPI/gotocompany/guardian/v1beta1/guardian.swagger.json b/third_party/OpenAPI/gotocompany/guardian/v1beta1/guardian.swagger.json index 2bff5a263..3aa14dfc2 100644 --- a/third_party/OpenAPI/gotocompany/guardian/v1beta1/guardian.swagger.json +++ b/third_party/OpenAPI/gotocompany/guardian/v1beta1/guardian.swagger.json @@ -2055,6 +2055,22 @@ } } }, + "PolicyAppealConfigMetadataSource": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string" + }, + "config": {}, + "value": {} + } + }, "PolicyAppealConfigQuestion": { "type": "object", "properties": { @@ -3051,6 +3067,12 @@ }, "allowCreatorDetailsFailure": { "type": "boolean" + }, + "metadataSources": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/PolicyAppealConfigMetadataSource" + } } } },