diff --git a/internal/merger/merger.go b/internal/merger/merger.go index c9af1c8a8..db0989a0d 100644 --- a/internal/merger/merger.go +++ b/internal/merger/merger.go @@ -302,6 +302,20 @@ func MergeEvent(main, aux *pbv2.EventResponse) *pbv2.EventResponse { return main } +// MergeMultiEvent merges multiple V2 EventResponses. +// Assumes the responses are in order of priority. +func MergeMultiEvent(allResp []*pbv2.EventResponse) *pbv2.EventResponse { + if len(allResp) == 0 { + return &pbv2.EventResponse{} + } + prev := allResp[0] + for i := 1; i < len(allResp); i++ { + cur := MergeEvent(prev, allResp[i]) + prev = cur + } + return prev +} + // MergeObservation merges two V2 observation responses. func MergeObservation(main, aux *pbv2.ObservationResponse) *pbv2.ObservationResponse { if main == nil { diff --git a/internal/merger/merger_test.go b/internal/merger/merger_test.go index fde3df30a..6fd04c6a6 100644 --- a/internal/merger/merger_test.go +++ b/internal/merger/merger_test.go @@ -1060,6 +1060,119 @@ func TestMergeEvent(t *testing.T) { } } +func TestMergeMultiEvent(t *testing.T) { + cmpOpts := cmp.Options{ + protocmp.Transform(), + } + + for _, c := range []struct { + desc string + allResp []*pbv2.EventResponse + want *pbv2.EventResponse + }{ + { + desc: "Empty input", + allResp: []*pbv2.EventResponse{}, + want: &pbv2.EventResponse{}, + }, + { + desc: "Single input", + allResp: []*pbv2.EventResponse{ + { + EventCollectionDate: &pbv1.EventCollectionDate{ + Dates: []string{"2021"}, + }, + }, + }, + want: &pbv2.EventResponse{ + EventCollectionDate: &pbv1.EventCollectionDate{ + Dates: []string{"2021"}, + }, + }, + }, + { + desc: "Multiple inputs with date merging", + allResp: []*pbv2.EventResponse{ + { + EventCollectionDate: &pbv1.EventCollectionDate{ + Dates: []string{"2021"}, + }, + }, + { + EventCollectionDate: &pbv1.EventCollectionDate{ + Dates: []string{"2022"}, + }, + }, + { + EventCollectionDate: &pbv1.EventCollectionDate{ + Dates: []string{"2021", "2023"}, + }, + }, + }, + want: &pbv2.EventResponse{ + EventCollectionDate: &pbv1.EventCollectionDate{ + Dates: []string{"2021", "2022", "2023"}, + }, + }, + }, + { + desc: "Multiple inputs with event merging", + allResp: []*pbv2.EventResponse{ + { + EventCollection: &pbv1.EventCollection{ + Events: []*pbv1.EventCollection_Event{ + {Dcid: "event1", ProvenanceId: "prov1"}, + }, + ProvenanceInfo: map[string]*pbv1.EventCollection_ProvenanceInfo{ + "prov1": {ImportName: "import1"}, + }, + }, + }, + { + EventCollection: &pbv1.EventCollection{ + Events: []*pbv1.EventCollection_Event{ + {Dcid: "event2", ProvenanceId: "prov2"}, + }, + ProvenanceInfo: map[string]*pbv1.EventCollection_ProvenanceInfo{ + "prov2": {ImportName: "import2"}, + }, + }, + }, + { + EventCollection: &pbv1.EventCollection{ + Events: []*pbv1.EventCollection_Event{ + {Dcid: "event1", ProvenanceId: "prov3"}, // Duplicate ID + }, + ProvenanceInfo: map[string]*pbv1.EventCollection_ProvenanceInfo{ + "prov3": {ImportName: "import3"}, + }, + }, + }, + }, + want: &pbv2.EventResponse{ + EventCollection: &pbv1.EventCollection{ + Events: []*pbv1.EventCollection_Event{ + {Dcid: "event1", ProvenanceId: "prov1"}, + {Dcid: "event2", ProvenanceId: "prov2"}, + }, + ProvenanceInfo: map[string]*pbv1.EventCollection_ProvenanceInfo{ + "prov1": {ImportName: "import1"}, + "prov2": {ImportName: "import2"}, + }, + }, + EventCollectionDate: &pbv1.EventCollectionDate{}, + }, + }, + } { + t.Run(c.desc, func(t *testing.T) { + got := MergeMultiEvent(c.allResp) + if diff := cmp.Diff(got, c.want, cmpOpts); diff != "" { + t.Errorf("MergeMultiEvent mismatch (-got +want):\n%s", diff) + } + }) + } +} + func TestMergeObservation(t *testing.T) { cmpOpts := cmp.Options{ protocmp.Transform(), diff --git a/internal/proto/service/mixer.pb.go b/internal/proto/service/mixer.pb.go index 34b5bb9a4..7dd5b8e05 100644 --- a/internal/proto/service/mixer.pb.go +++ b/internal/proto/service/mixer.pb.go @@ -21,7 +21,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 +// protoc-gen-go v1.36.11 // protoc v3.21.12 // source: service/mixer.proto @@ -35,6 +35,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" + unsafe "unsafe" ) const ( @@ -46,571 +47,90 @@ const ( var File_service_mixer_proto protoreflect.FileDescriptor -var file_service_mixer_proto_rawDesc = []byte{ - 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6d, 0x69, 0x78, 0x65, 0x72, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x6d, 0x69, - 0x73, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0a, - 0x73, 0x74, 0x61, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x73, 0x74, 0x61, 0x74, - 0x5f, 0x76, 0x61, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x72, 0x65, 0x63, 0x6f, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x76, 0x31, 0x2f, 0x69, 0x6e, - 0x66, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1a, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x64, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x76, 0x31, 0x2f, - 0x70, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x76, 0x31, 0x2f, 0x74, - 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x76, 0x32, - 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0d, 0x76, 0x32, - 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x76, 0x32, 0x2f, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x14, 0x76, 0x32, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x10, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xb2, 0x41, 0x0a, 0x05, 0x4d, 0x69, - 0x78, 0x65, 0x72, 0x12, 0x64, 0x0a, 0x06, 0x56, 0x33, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x5a, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x76, 0x33, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x12, - 0x08, 0x2f, 0x76, 0x33, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x87, 0x01, 0x0a, 0x0d, 0x56, 0x33, - 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x5a, 0x14, 0x3a, 0x01, - 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x33, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x0f, 0x2f, 0x76, 0x33, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x84, 0x01, 0x0a, 0x0c, 0x56, 0x33, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x12, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x27, 0x5a, 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x76, 0x33, 0x2f, 0x6e, 0x6f, - 0x64, 0x65, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x0f, 0x2f, 0x76, 0x33, 0x2f, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x73, 0x0a, 0x09, 0x56, 0x33, - 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, - 0x5a, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x76, 0x33, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x12, 0x0b, 0x2f, 0x76, 0x33, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, - 0x67, 0x0a, 0x08, 0x56, 0x33, 0x53, 0x70, 0x61, 0x72, 0x71, 0x6c, 0x12, 0x1a, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x71, 0x6c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x5a, 0x0f, 0x3a, 0x01, 0x2a, - 0x22, 0x0a, 0x2f, 0x76, 0x33, 0x2f, 0x73, 0x70, 0x61, 0x72, 0x71, 0x6c, 0x12, 0x0a, 0x2f, 0x76, - 0x33, 0x2f, 0x73, 0x70, 0x61, 0x72, 0x71, 0x6c, 0x12, 0x67, 0x0a, 0x08, 0x56, 0x32, 0x53, 0x70, - 0x61, 0x72, 0x71, 0x6c, 0x12, 0x1a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x53, 0x70, 0x61, 0x72, 0x71, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x1d, 0x5a, 0x0f, 0x3a, 0x01, 0x2a, 0x22, 0x0a, 0x2f, 0x76, 0x32, 0x2f, 0x73, - 0x70, 0x61, 0x72, 0x71, 0x6c, 0x12, 0x0a, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x70, 0x61, 0x72, 0x71, - 0x6c, 0x12, 0x73, 0x0a, 0x09, 0x56, 0x32, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x1e, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x5a, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x76, - 0x32, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x0b, 0x2f, 0x76, 0x32, 0x2f, 0x72, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x64, 0x0a, 0x06, 0x56, 0x32, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x19, 0x5a, 0x0d, 0x3a, 0x01, 0x2a, 0x22, 0x08, 0x2f, 0x76, 0x32, 0x2f, 0x6e, 0x6f, - 0x64, 0x65, 0x12, 0x08, 0x2f, 0x76, 0x32, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x69, 0x0a, 0x07, - 0x56, 0x32, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x5a, 0x0e, 0x3a, 0x01, - 0x2a, 0x22, 0x09, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x09, 0x2f, 0x76, - 0x32, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x87, 0x01, 0x0a, 0x0d, 0x56, 0x32, 0x4f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4f, - 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x5a, 0x14, 0x3a, 0x01, 0x2a, 0x22, - 0x0f, 0x2f, 0x76, 0x32, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0f, 0x2f, 0x76, 0x32, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x91, 0x01, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x56, 0x61, 0x72, 0x73, 0x42, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, 0x72, 0x73, 0x42, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x56, 0x61, 0x72, 0x73, 0x42, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x3a, 0x01, 0x2a, - 0x22, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x5b, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x19, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x5a, 0x0b, 0x3a, - 0x01, 0x2a, 0x22, 0x06, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x06, 0x2f, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x12, 0x93, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x5a, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x6e, 0x6f, 0x64, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2d, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x15, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x79, 0x2d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x25, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x5a, 0x1a, 0x3a, 0x01, 0x2a, - 0x22, 0x15, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, - 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x15, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x75, - 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x72, - 0x69, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x23, 0x5a, 0x12, 0x3a, 0x01, 0x2a, 0x22, 0x0d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x74, - 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x0d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x74, 0x72, - 0x69, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x7f, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x63, - 0x65, 0x73, 0x49, 0x6e, 0x12, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x49, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x5a, - 0x14, 0x3a, 0x01, 0x2a, 0x22, 0x0f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x73, 0x2d, 0x69, 0x6e, 0x12, 0x0f, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x73, 0x2d, 0x69, 0x6e, 0x12, 0x6e, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x5a, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x62, - 0x75, 0x6c, 0x6b, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x0b, 0x2f, 0x62, 0x75, 0x6c, 0x6b, - 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x7a, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x20, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1f, 0x5a, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0b, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x7f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x53, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x53, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x21, 0x5a, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2f, 0x73, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x0c, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2f, 0x73, 0x65, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x70, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x41, 0x6c, - 0x6c, 0x12, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x5a, 0x0e, 0x3a, 0x01, 0x2a, 0x22, - 0x09, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2f, 0x61, 0x6c, 0x6c, 0x12, 0x09, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x2f, 0x61, 0x6c, 0x6c, 0x12, 0x9e, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x28, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x5a, 0x16, 0x3a, 0x01, 0x2a, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2f, 0x72, 0x61, 0x6e, 0x6b, - 0x69, 0x6e, 0x67, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2f, 0x72, - 0x61, 0x6e, 0x6b, 0x69, 0x6e, 0x67, 0x12, 0x9b, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x5a, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2f, 0x72, 0x65, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x90, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, 0x72, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x5a, - 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x2d, 0x76, 0x61, 0x72, 0x73, 0x12, 0x10, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x2d, 0x76, 0x61, 0x72, 0x73, 0x12, 0xb6, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, 0x72, 0x73, 0x55, 0x6e, - 0x69, 0x6f, 0x6e, 0x56, 0x31, 0x12, 0x2a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, - 0x74, 0x56, 0x61, 0x72, 0x73, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, 0x72, - 0x73, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x5a, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2d, 0x76, 0x61, 0x72, 0x73, - 0x2f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6c, 0x61, 0x63, - 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x2d, 0x76, 0x61, 0x72, 0x73, 0x2f, 0x75, 0x6e, 0x69, 0x6f, - 0x6e, 0x12, 0x63, 0x0a, 0x07, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x31, 0x12, 0x19, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x5a, 0x0e, 0x3a, 0x01, 0x2a, - 0x22, 0x09, 0x2f, 0x76, 0x31, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x09, 0x2f, 0x76, 0x31, - 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x81, 0x01, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, - 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xae, 0x01, 0x0a, 0x0e, 0x42, - 0x75, 0x6c, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x75, 0x6c, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x47, 0x5a, 0x24, 0x3a, 0x01, 0x2a, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x62, - 0x75, 0x6c, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0x1f, 0x2f, 0x76, 0x31, 0x2f, - 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x2f, - 0x7b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0e, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x25, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, - 0x72, 0x74, 0x79, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x79, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xa5, 0x01, 0x0a, 0x14, 0x4c, 0x69, - 0x6e, 0x6b, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, - 0x30, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x2f, 0x7b, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x3d, 0x2a, 0x2a, - 0x7d, 0x12, 0xc4, 0x01, 0x0a, 0x12, 0x42, 0x75, 0x6c, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, - 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x5a, 0x29, 0x3a, 0x01, 0x2a, 0x22, 0x24, 0x2f, 0x76, - 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x7d, 0x12, 0x24, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x70, 0x72, 0x6f, - 0x70, 0x65, 0x72, 0x74, 0x79, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x12, 0xcc, 0x01, 0x0a, 0x18, 0x42, 0x75, 0x6c, - 0x6b, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4c, 0x69, 0x6e, 0x6b, 0x65, - 0x64, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x50, 0x72, 0x6f, 0x70, - 0x65, 0x72, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x5a, 0x27, 0x3a, 0x01, 0x2a, 0x22, - 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x2f, 0x6c, 0x69, 0x6e, - 0x6b, 0x65, 0x64, 0x12, 0x22, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x70, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2f, 0x69, 0x6e, - 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x12, 0x75, 0x0a, 0x07, 0x54, 0x72, 0x69, 0x70, 0x6c, - 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x76, 0x31, - 0x2f, 0x74, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x9f, - 0x01, 0x0a, 0x0b, 0x42, 0x75, 0x6c, 0x6b, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x22, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x75, 0x6c, 0x6b, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x5a, - 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x74, - 0x72, 0x69, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x7d, 0x12, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x74, 0x72, 0x69, - 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x7d, - 0x12, 0x73, 0x0a, 0x09, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x31, 0x2f, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x72, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x20, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, - 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2f, - 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0d, 0x42, 0x75, - 0x6c, 0x6b, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x24, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, - 0x6b, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, - 0x5a, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, - 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, - 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, - 0x7e, 0x0a, 0x0c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x23, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, - 0xa2, 0x01, 0x0a, 0x10, 0x42, 0x75, 0x6c, 0x6b, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x75, 0x6c, 0x6b, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x5a, - 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x69, - 0x6e, 0x66, 0x6f, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x2f, 0x76, - 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x11, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x66, - 0x6f, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xbd, 0x01, 0x0a, 0x15, 0x42, - 0x75, 0x6c, 0x6b, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x5a, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, - 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x2f, 0x76, - 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x2d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x8a, 0x01, 0x0a, 0x11, 0x4f, - 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x64, 0x61, 0x74, - 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x76, 0x31, 0x2f, - 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x2f, 0x7b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xbb, 0x01, 0x0a, 0x15, 0x42, 0x75, 0x6c, 0x6b, - 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x2c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, - 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x5a, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, - 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, - 0x6c, 0x6b, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0xa1, 0x01, 0x0a, 0x12, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x76, 0x31, - 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xc0, 0x01, 0x0a, 0x16, 0x42, 0x75, - 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x5a, 0x21, 0x3a, 0x01, 0x2a, - 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1c, - 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x12, 0xda, 0x01, 0x0a, - 0x1c, 0x42, 0x75, 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x12, 0x33, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, - 0x75, 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x5a, 0x28, 0x3a, 0x01, 0x2a, 0x22, - 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x69, 0x65, 0x73, 0x2f, 0x6c, 0x69, - 0x6e, 0x6b, 0x65, 0x64, 0x12, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x6f, - 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x69, - 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x12, 0xd6, 0x01, 0x0a, 0x1a, 0x42, 0x75, - 0x6c, 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x65, 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x12, 0x31, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x73, 0x4c, 0x69, - 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x6c, - 0x6b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x65, - 0x73, 0x4c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x5a, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x76, - 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2d, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x12, - 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x6e, 0x6b, - 0x65, 0x64, 0x12, 0x99, 0x01, 0x0a, 0x09, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x61, 0x67, 0x65, - 0x12, 0x20, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x5a, 0x1c, 0x3a, - 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, - 0x2f, 0x70, 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x21, 0x2f, 0x76, 0x31, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x61, 0x67, 0x65, 0x2f, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x12, 0xaf, - 0x01, 0x0a, 0x11, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6e, 0x63, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6e, - 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x3f, 0x5a, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x20, - 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x61, 0x6e, 0x63, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, - 0x12, 0x8d, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x56, - 0x61, 0x72, 0x12, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, - 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x56, 0x61, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2f, 0x5a, 0x18, 0x3a, 0x01, 0x2a, 0x22, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x13, 0x2f, 0x76, 0x31, - 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x81, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x3a, 0x01, 0x2a, 0x22, 0x18, 0x2f, 0x76, 0x31, 0x2f, - 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x76, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x12, 0x26, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x21, 0x3a, 0x01, 0x2a, 0x22, 0x1c, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x63, - 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x2f, 0x63, 0x6f, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x61, 0x74, 0x65, 0x12, 0x6e, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x49, 0x64, 0x73, 0x12, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x49, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x49, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, - 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x2f, 0x69, 0x64, 0x12, 0x86, 0x01, 0x0a, 0x0c, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2b, 0x5a, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x69, - 0x6e, 0x64, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x11, 0x2f, 0x76, 0x31, - 0x2f, 0x66, 0x69, 0x6e, 0x64, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x82, - 0x01, 0x0a, 0x10, 0x42, 0x75, 0x6c, 0x6b, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x24, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x73, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x46, 0x69, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x46, 0x69, 0x6e, 0x64, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, 0x76, 0x31, - 0x2f, 0x62, 0x75, 0x6c, 0x6b, 0x2f, 0x66, 0x69, 0x6e, 0x64, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, - 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x50, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x67, - 0x6e, 0x69, 0x7a, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x5a, 0x19, 0x3a, 0x01, 0x2a, 0x22, - 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x2f, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x67, - 0x6e, 0x69, 0x7a, 0x65, 0x2f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x9f, 0x01, 0x0a, 0x11, - 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x12, 0x25, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, - 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x5a, 0x1b, 0x3a, 0x01, 0x2a, 0x22, 0x16, 0x2f, - 0x76, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x2f, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x67, - 0x6e, 0x69, 0x7a, 0x65, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x9e, 0x01, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x64, - 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x5a, 0x19, 0x3a, - 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x2f, 0x69, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x2d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x14, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x38, - 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x61, 0x74, - 0x61, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x73, 0x6f, 0x72, 0x67, 0x2f, 0x6d, 0x69, 0x78, 0x65, - 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_service_mixer_proto_rawDesc = "" + + "\n" + + "\x13service/mixer.proto\x12\vdatacommons\x1a\x1cgoogle/api/annotations.proto\x1a\fcommon.proto\x1a\fcustom.proto\x1a\n" + + "misc.proto\x1a\n" + + "node.proto\x1a\vplace.proto\x1a\vquery.proto\x1a\n" + + "stat.proto\x1a\x0estat_var.proto\x1a\vrecon.proto\x1a\x13v1/properties.proto\x1a\x18v1/property_values.proto\x1a\x11v1/variable.proto\x1a\rv1/info.proto\x1a\x15v1/observations.proto\x1a\x1av1/observation_dates.proto\x1a\rv1/page.proto\x1a\x10v1/triples.proto\x1a\x0ev2/event.proto\x1a\rv2/node.proto\x1a\x14v2/node_search.proto\x1a\x14v2/observation.proto\x1a\x10v2/resolve.proto2\x9dB\n" + + "\x05Mixer\x12d\n" + + "\x06V3Node\x12\x1b.datacommons.v2.NodeRequest\x1a\x1c.datacommons.v2.NodeResponse\"\x1f\x82\xd3\xe4\x93\x02\x19Z\r:\x01*\"\b/v3/node\x12\b/v3/node\x12\x87\x01\n" + + "\rV3Observation\x12\".datacommons.v2.ObservationRequest\x1a#.datacommons.v2.ObservationResponse\"-\x82\xd3\xe4\x93\x02'Z\x14:\x01*\"\x0f/v3/observation\x12\x0f/v3/observation\x12\x84\x01\n" + + "\fV3NodeSearch\x12!.datacommons.v2.NodeSearchRequest\x1a\".datacommons.v2.NodeSearchResponse\"-\x82\xd3\xe4\x93\x02'Z\x14:\x01*\"\x0f/v3/node_search\x12\x0f/v3/node_search\x12s\n" + + "\tV3Resolve\x12\x1e.datacommons.v2.ResolveRequest\x1a\x1f.datacommons.v2.ResolveResponse\"%\x82\xd3\xe4\x93\x02\x1fZ\x10:\x01*\"\v/v3/resolve\x12\v/v3/resolve\x12i\n" + + "\aV3Event\x12\x1c.datacommons.v2.EventRequest\x1a\x1d.datacommons.v2.EventResponse\"!\x82\xd3\xe4\x93\x02\x1bZ\x0e:\x01*\"\t/v3/event\x12\t/v3/event\x12g\n" + + "\bV3Sparql\x12\x1a.datacommons.SparqlRequest\x1a\x1a.datacommons.QueryResponse\"#\x82\xd3\xe4\x93\x02\x1dZ\x0f:\x01*\"\n" + + "/v3/sparql\x12\n" + + "/v3/sparql\x12g\n" + + "\bV2Sparql\x12\x1a.datacommons.SparqlRequest\x1a\x1a.datacommons.QueryResponse\"#\x82\xd3\xe4\x93\x02\x1dZ\x0f:\x01*\"\n" + + "/v2/sparql\x12\n" + + "/v2/sparql\x12s\n" + + "\tV2Resolve\x12\x1e.datacommons.v2.ResolveRequest\x1a\x1f.datacommons.v2.ResolveResponse\"%\x82\xd3\xe4\x93\x02\x1fZ\x10:\x01*\"\v/v2/resolve\x12\v/v2/resolve\x12d\n" + + "\x06V2Node\x12\x1b.datacommons.v2.NodeRequest\x1a\x1c.datacommons.v2.NodeResponse\"\x1f\x82\xd3\xe4\x93\x02\x19Z\r:\x01*\"\b/v2/node\x12\b/v2/node\x12i\n" + + "\aV2Event\x12\x1c.datacommons.v2.EventRequest\x1a\x1d.datacommons.v2.EventResponse\"!\x82\xd3\xe4\x93\x02\x1bZ\x0e:\x01*\"\t/v2/event\x12\t/v2/event\x12\x87\x01\n" + + "\rV2Observation\x12\".datacommons.v2.ObservationRequest\x1a#.datacommons.v2.ObservationResponse\"-\x82\xd3\xe4\x93\x02'Z\x14:\x01*\"\x0f/v2/observation\x12\x0f/v2/observation\x12\x91\x01\n" + + "\x16FilterStatVarsByEntity\x12*.datacommons.FilterStatVarsByEntityRequest\x1a+.datacommons.FilterStatVarsByEntityResponse\"\x1e\x82\xd3\xe4\x93\x02\x18:\x01*\"\x13/v2/variable/filter\x12[\n" + + "\x05Query\x12\x19.datacommons.QueryRequest\x1a\x1a.datacommons.QueryResponse\"\x1b\x82\xd3\xe4\x93\x02\x15Z\v:\x01*\"\x06/query\x12\x06/query\x12\x93\x01\n" + + "\x11GetPropertyLabels\x12%.datacommons.GetPropertyLabelsRequest\x1a\x1c.datacommons.PayloadResponse\"9\x82\xd3\xe4\x93\x023Z\x1a:\x01*\"\x15/node/property-labels\x12\x15/node/property-labels\x12\x93\x01\n" + + "\x11GetPropertyValues\x12%.datacommons.GetPropertyValuesRequest\x1a\x1c.datacommons.PayloadResponse\"9\x82\xd3\xe4\x93\x023Z\x1a:\x01*\"\x15/node/property-values\x12\x15/node/property-values\x12u\n" + + "\n" + + "GetTriples\x12\x1e.datacommons.GetTriplesRequest\x1a\x1c.datacommons.PayloadResponse\")\x82\xd3\xe4\x93\x02#Z\x12:\x01*\"\r/node/triples\x12\r/node/triples\x12\x7f\n" + + "\vGetPlacesIn\x12\x1f.datacommons.GetPlacesInRequest\x1a .datacommons.GetPlacesInResponse\"-\x82\xd3\xe4\x93\x02'Z\x14:\x01*\"\x0f/node/places-in\x12\x0f/node/places-in\x12n\n" + + "\bGetStats\x12\x1c.datacommons.GetStatsRequest\x1a\x1d.datacommons.GetStatsResponse\"%\x82\xd3\xe4\x93\x02\x1fZ\x10:\x01*\"\v/bulk/stats\x12\v/bulk/stats\x12z\n" + + "\fGetStatValue\x12 .datacommons.GetStatValueRequest\x1a!.datacommons.GetStatValueResponse\"%\x82\xd3\xe4\x93\x02\x1fZ\x10:\x01*\"\v/stat/value\x12\v/stat/value\x12\x7f\n" + + "\rGetStatSeries\x12!.datacommons.GetStatSeriesRequest\x1a\".datacommons.GetStatSeriesResponse\"'\x82\xd3\xe4\x93\x02!Z\x11:\x01*\"\f/stat/series\x12\f/stat/series\x12p\n" + + "\n" + + "GetStatAll\x12\x1e.datacommons.GetStatAllRequest\x1a\x1f.datacommons.GetStatAllResponse\"!\x82\xd3\xe4\x93\x02\x1bZ\x0e:\x01*\"\t/stat/all\x12\t/stat/all\x12\x9e\x01\n" + + "\x14GetLocationsRankings\x12(.datacommons.GetLocationsRankingsRequest\x1a).datacommons.GetLocationsRankingsResponse\"1\x82\xd3\xe4\x93\x02+Z\x16:\x01*\"\x11/v1/place/ranking\x12\x11/v1/place/ranking\x12\x9b\x01\n" + + "\x13GetRelatedLocations\x12'.datacommons.GetRelatedLocationsRequest\x1a(.datacommons.GetRelatedLocationsResponse\"1\x82\xd3\xe4\x93\x02+Z\x16:\x01*\"\x11/v1/place/related\x12\x11/v1/place/related\x12_\n" + + "\n" + + "GetVersion\x12\x1e.datacommons.GetVersionRequest\x1a\x1f.datacommons.GetVersionResponse\"\x10\x82\xd3\xe4\x93\x02\n" + + "\x12\b/version\x12\x90\x01\n" + + "\x10GetPlaceStatVars\x12$.datacommons.GetPlaceStatVarsRequest\x1a%.datacommons.GetPlaceStatVarsResponse\"/\x82\xd3\xe4\x93\x02)Z\x15:\x01*\"\x10/place/stat-vars\x12\x10/place/stat-vars\x12\xb6\x01\n" + + "\x18GetEntityStatVarsUnionV1\x12*.datacommons.GetEntityStatVarsUnionRequest\x1a+.datacommons.GetEntityStatVarsUnionResponse\"A\x82\xd3\xe4\x93\x02;Z\x1e:\x01*\"\x19/v1/place/stat-vars/union\x12\x19/v1/place/stat-vars/union\x12c\n" + + "\aQueryV1\x12\x19.datacommons.QueryRequest\x1a\x1a.datacommons.QueryResponse\"!\x82\xd3\xe4\x93\x02\x1bZ\x0e:\x01*\"\t/v1/query\x12\t/v1/query\x12\x81\x01\n" + + "\n" + + "Properties\x12!.datacommons.v1.PropertiesRequest\x1a\".datacommons.v1.PropertiesResponse\",\x82\xd3\xe4\x93\x02&\x12$/v1/properties/{direction}/{node=**}\x12\xae\x01\n" + + "\x0eBulkProperties\x12%.datacommons.v1.BulkPropertiesRequest\x1a&.datacommons.v1.BulkPropertiesResponse\"M\x82\xd3\xe4\x93\x02GZ$:\x01*\"\x1f/v1/bulk/properties/{direction}\x12\x1f/v1/bulk/properties/{direction}\x12\x9b\x01\n" + + "\x0ePropertyValues\x12%.datacommons.v1.PropertyValuesRequest\x1a&.datacommons.v1.PropertyValuesResponse\":\x82\xd3\xe4\x93\x024\x122/v1/property/values/{direction}/{node_property=**}\x12\xa5\x01\n" + + "\x14LinkedPropertyValues\x12+.datacommons.v1.LinkedPropertyValuesRequest\x1a&.datacommons.v1.PropertyValuesResponse\"8\x82\xd3\xe4\x93\x022\x120/v1/property/values/in/linked/{node_property=**}\x12\xc4\x01\n" + + "\x12BulkPropertyValues\x12).datacommons.v1.BulkPropertyValuesRequest\x1a*.datacommons.v1.BulkPropertyValuesResponse\"W\x82\xd3\xe4\x93\x02QZ):\x01*\"$/v1/bulk/property/values/{direction}\x12$/v1/bulk/property/values/{direction}\x12\xcc\x01\n" + + "\x18BulkLinkedPropertyValues\x12/.datacommons.v1.BulkLinkedPropertyValuesRequest\x1a*.datacommons.v1.BulkPropertyValuesResponse\"S\x82\xd3\xe4\x93\x02MZ':\x01*\"\"/v1/bulk/property/values/in/linked\x12\"/v1/bulk/property/values/in/linked\x12u\n" + + "\aTriples\x12\x1e.datacommons.v1.TriplesRequest\x1a\x1f.datacommons.v1.TriplesResponse\")\x82\xd3\xe4\x93\x02#\x12!/v1/triples/{direction}/{node=**}\x12\x9f\x01\n" + + "\vBulkTriples\x12\".datacommons.v1.BulkTriplesRequest\x1a#.datacommons.v1.BulkTriplesResponse\"G\x82\xd3\xe4\x93\x02AZ!:\x01*\"\x1c/v1/bulk/triples/{direction}\x12\x1c/v1/bulk/triples/{direction}\x12s\n" + + "\tVariables\x12 .datacommons.v1.VariablesRequest\x1a!.datacommons.v1.VariablesResponse\"!\x82\xd3\xe4\x93\x02\x1b\x12\x19/v1/variables/{entity=**}\x12r\n" + + "\tPlaceInfo\x12 .datacommons.v1.PlaceInfoRequest\x1a!.datacommons.v1.PlaceInfoResponse\" \x82\xd3\xe4\x93\x02\x1a\x12\x18/v1/info/place/{node=**}\x12\x93\x01\n" + + "\rBulkPlaceInfo\x12$.datacommons.v1.BulkPlaceInfoRequest\x1a%.datacommons.v1.BulkPlaceInfoResponse\"5\x82\xd3\xe4\x93\x02/Z\x18:\x01*\"\x13/v1/bulk/info/place\x12\x13/v1/bulk/info/place\x12~\n" + + "\fVariableInfo\x12#.datacommons.v1.VariableInfoRequest\x1a$.datacommons.v1.VariableInfoResponse\"#\x82\xd3\xe4\x93\x02\x1d\x12\x1b/v1/info/variable/{node=**}\x12\xa2\x01\n" + + "\x10BulkVariableInfo\x12'.datacommons.v1.BulkVariableInfoRequest\x1a(.datacommons.v1.BulkVariableInfoResponse\";\x82\xd3\xe4\x93\x025Z\x1b:\x01*\"\x16/v1/bulk/info/variable\x12\x16/v1/bulk/info/variable\x12\x93\x01\n" + + "\x11VariableGroupInfo\x12(.datacommons.v1.VariableGroupInfoRequest\x1a).datacommons.v1.VariableGroupInfoResponse\")\x82\xd3\xe4\x93\x02#\x12!/v1/info/variable-group/{node=**}\x12\xbd\x01\n" + + "\x15BulkVariableGroupInfo\x12,.datacommons.v1.BulkVariableGroupInfoRequest\x1a-.datacommons.v1.BulkVariableGroupInfoResponse\"G\x82\xd3\xe4\x93\x02AZ!:\x01*\"\x1c/v1/bulk/info/variable-group\x12\x1c/v1/bulk/info/variable-group\x12\x8a\x01\n" + + "\x11ObservationsPoint\x12(.datacommons.v1.ObservationsPointRequest\x1a\x16.datacommons.PointStat\"3\x82\xd3\xe4\x93\x02-\x12+/v1/observations/point/{entity_variable=**}\x12\xbb\x01\n" + + "\x15BulkObservationsPoint\x12,.datacommons.v1.BulkObservationsPointRequest\x1a-.datacommons.v1.BulkObservationsPointResponse\"E\x82\xd3\xe4\x93\x02?Z :\x01*\"\x1b/v1/bulk/observations/point\x12\x1b/v1/bulk/observations/point\x12\xa1\x01\n" + + "\x12ObservationsSeries\x12).datacommons.v1.ObservationsSeriesRequest\x1a*.datacommons.v1.ObservationsSeriesResponse\"4\x82\xd3\xe4\x93\x02.\x12,/v1/observations/series/{entity_variable=**}\x12\xc0\x01\n" + + "\x16BulkObservationsSeries\x12-.datacommons.v1.BulkObservationsSeriesRequest\x1a..datacommons.v1.BulkObservationsSeriesResponse\"G\x82\xd3\xe4\x93\x02AZ!:\x01*\"\x1c/v1/bulk/observations/series\x12\x1c/v1/bulk/observations/series\x12\xda\x01\n" + + "\x1cBulkObservationsSeriesLinked\x123.datacommons.v1.BulkObservationsSeriesLinkedRequest\x1a..datacommons.v1.BulkObservationsSeriesResponse\"U\x82\xd3\xe4\x93\x02OZ(:\x01*\"#/v1/bulk/observations/series/linked\x12#/v1/bulk/observations/series/linked\x12\xd6\x01\n" + + "\x1aBulkObservationDatesLinked\x121.datacommons.v1.BulkObservationDatesLinkedRequest\x1a2.datacommons.v1.BulkObservationDatesLinkedResponse\"Q\x82\xd3\xe4\x93\x02KZ&:\x01*\"!/v1/bulk/observation-dates/linked\x12!/v1/bulk/observation-dates/linked\x12\x99\x01\n" + + "\tPlacePage\x12 .datacommons.v1.PlacePageRequest\x1a!.datacommons.v1.PlacePageResponse\"G\x82\xd3\xe4\x93\x02AZ\x1c:\x01*\"\x17/v1/internal/page/place\x12!/v1/internal/page/place/{node=**}\x12\xaf\x01\n" + + "\x11VariableAncestors\x12(.datacommons.v1.VariableAncestorsRequest\x1a).datacommons.v1.VariableAncestorsResponse\"E\x82\xd3\xe4\x93\x02?Z\x1b:\x01*\"\x16/v1/variable/ancestors\x12 /v1/variable/ancestors/{node=**}\x12\x8d\x01\n" + + "\rSearchStatVar\x12!.datacommons.SearchStatVarRequest\x1a\".datacommons.SearchStatVarResponse\"5\x82\xd3\xe4\x93\x02/Z\x18:\x01*\"\x13/v1/variable/search\x12\x13/v1/variable/search\x12\x81\x01\n" + + "\x0fResolveEntities\x12#.datacommons.ResolveEntitiesRequest\x1a$.datacommons.ResolveEntitiesResponse\"#\x82\xd3\xe4\x93\x02\x1d:\x01*\"\x18/v1/recon/entity/resolve\x12\x8e\x01\n" + + "\x12ResolveCoordinates\x12&.datacommons.ResolveCoordinatesRequest\x1a'.datacommons.ResolveCoordinatesResponse\"'\x82\xd3\xe4\x93\x02!:\x01*\"\x1c/v1/recon/resolve/coordinate\x12n\n" + + "\n" + + "ResolveIds\x12\x1e.datacommons.ResolveIdsRequest\x1a\x1f.datacommons.ResolveIdsResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/v1/recon/resolve/id\x12\x86\x01\n" + + "\fFindEntities\x12 .datacommons.FindEntitiesRequest\x1a!.datacommons.FindEntitiesResponse\"1\x82\xd3\xe4\x93\x02+Z\x16:\x01*\"\x11/v1/find/entities\x12\x11/v1/find/entities\x12\x82\x01\n" + + "\x10BulkFindEntities\x12$.datacommons.BulkFindEntitiesRequest\x1a%.datacommons.BulkFindEntitiesResponse\"!\x82\xd3\xe4\x93\x02\x1b:\x01*\"\x16/v1/bulk/find/entities\x12\x95\x01\n" + + "\x0fRecognizePlaces\x12#.datacommons.RecognizePlacesRequest\x1a$.datacommons.RecognizePlacesResponse\"7\x82\xd3\xe4\x93\x021Z\x19:\x01*\"\x14/v1/recognize/places\x12\x14/v1/recognize/places\x12\x9f\x01\n" + + "\x11RecognizeEntities\x12%.datacommons.RecognizeEntitiesRequest\x1a&.datacommons.RecognizeEntitiesResponse\";\x82\xd3\xe4\x93\x025Z\x1b:\x01*\"\x16/v1/recognize/entities\x12\x16/v1/recognize/entities\x12\x9e\x01\n" + + "\x12GetImportTableData\x12&.datacommons.GetImportTableDataRequest\x1a'.datacommons.GetImportTableDataResponse\"7\x82\xd3\xe4\x93\x021Z\x19:\x01*\"\x14/custom/import-table\x12\x14/custom/import-tableB8Z6github.com/datacommonsorg/mixer/internal/proto/serviceb\x06proto3" -var file_service_mixer_proto_goTypes = []interface{}{ +var file_service_mixer_proto_goTypes = []any{ (*v2.NodeRequest)(nil), // 0: datacommons.v2.NodeRequest (*v2.ObservationRequest)(nil), // 1: datacommons.v2.ObservationRequest (*v2.NodeSearchRequest)(nil), // 2: datacommons.v2.NodeSearchRequest (*v2.ResolveRequest)(nil), // 3: datacommons.v2.ResolveRequest - (*proto.SparqlRequest)(nil), // 4: datacommons.SparqlRequest - (*v2.EventRequest)(nil), // 5: datacommons.v2.EventRequest + (*v2.EventRequest)(nil), // 4: datacommons.v2.EventRequest + (*proto.SparqlRequest)(nil), // 5: datacommons.SparqlRequest (*proto.FilterStatVarsByEntityRequest)(nil), // 6: datacommons.FilterStatVarsByEntityRequest (*proto.QueryRequest)(nil), // 7: datacommons.QueryRequest (*proto.GetPropertyLabelsRequest)(nil), // 8: datacommons.GetPropertyLabelsRequest @@ -662,8 +182,8 @@ var file_service_mixer_proto_goTypes = []interface{}{ (*v2.ObservationResponse)(nil), // 54: datacommons.v2.ObservationResponse (*v2.NodeSearchResponse)(nil), // 55: datacommons.v2.NodeSearchResponse (*v2.ResolveResponse)(nil), // 56: datacommons.v2.ResolveResponse - (*proto.QueryResponse)(nil), // 57: datacommons.QueryResponse - (*v2.EventResponse)(nil), // 58: datacommons.v2.EventResponse + (*v2.EventResponse)(nil), // 57: datacommons.v2.EventResponse + (*proto.QueryResponse)(nil), // 58: datacommons.QueryResponse (*proto.FilterStatVarsByEntityResponse)(nil), // 59: datacommons.FilterStatVarsByEntityResponse (*proto.PayloadResponse)(nil), // 60: datacommons.PayloadResponse (*proto.GetPlacesInResponse)(nil), // 61: datacommons.GetPlacesInResponse @@ -711,120 +231,122 @@ var file_service_mixer_proto_depIdxs = []int32{ 1, // 1: datacommons.Mixer.V3Observation:input_type -> datacommons.v2.ObservationRequest 2, // 2: datacommons.Mixer.V3NodeSearch:input_type -> datacommons.v2.NodeSearchRequest 3, // 3: datacommons.Mixer.V3Resolve:input_type -> datacommons.v2.ResolveRequest - 4, // 4: datacommons.Mixer.V3Sparql:input_type -> datacommons.SparqlRequest - 4, // 5: datacommons.Mixer.V2Sparql:input_type -> datacommons.SparqlRequest - 3, // 6: datacommons.Mixer.V2Resolve:input_type -> datacommons.v2.ResolveRequest - 0, // 7: datacommons.Mixer.V2Node:input_type -> datacommons.v2.NodeRequest - 5, // 8: datacommons.Mixer.V2Event:input_type -> datacommons.v2.EventRequest - 1, // 9: datacommons.Mixer.V2Observation:input_type -> datacommons.v2.ObservationRequest - 6, // 10: datacommons.Mixer.FilterStatVarsByEntity:input_type -> datacommons.FilterStatVarsByEntityRequest - 7, // 11: datacommons.Mixer.Query:input_type -> datacommons.QueryRequest - 8, // 12: datacommons.Mixer.GetPropertyLabels:input_type -> datacommons.GetPropertyLabelsRequest - 9, // 13: datacommons.Mixer.GetPropertyValues:input_type -> datacommons.GetPropertyValuesRequest - 10, // 14: datacommons.Mixer.GetTriples:input_type -> datacommons.GetTriplesRequest - 11, // 15: datacommons.Mixer.GetPlacesIn:input_type -> datacommons.GetPlacesInRequest - 12, // 16: datacommons.Mixer.GetStats:input_type -> datacommons.GetStatsRequest - 13, // 17: datacommons.Mixer.GetStatValue:input_type -> datacommons.GetStatValueRequest - 14, // 18: datacommons.Mixer.GetStatSeries:input_type -> datacommons.GetStatSeriesRequest - 15, // 19: datacommons.Mixer.GetStatAll:input_type -> datacommons.GetStatAllRequest - 16, // 20: datacommons.Mixer.GetLocationsRankings:input_type -> datacommons.GetLocationsRankingsRequest - 17, // 21: datacommons.Mixer.GetRelatedLocations:input_type -> datacommons.GetRelatedLocationsRequest - 18, // 22: datacommons.Mixer.GetVersion:input_type -> datacommons.GetVersionRequest - 19, // 23: datacommons.Mixer.GetPlaceStatVars:input_type -> datacommons.GetPlaceStatVarsRequest - 20, // 24: datacommons.Mixer.GetEntityStatVarsUnionV1:input_type -> datacommons.GetEntityStatVarsUnionRequest - 7, // 25: datacommons.Mixer.QueryV1:input_type -> datacommons.QueryRequest - 21, // 26: datacommons.Mixer.Properties:input_type -> datacommons.v1.PropertiesRequest - 22, // 27: datacommons.Mixer.BulkProperties:input_type -> datacommons.v1.BulkPropertiesRequest - 23, // 28: datacommons.Mixer.PropertyValues:input_type -> datacommons.v1.PropertyValuesRequest - 24, // 29: datacommons.Mixer.LinkedPropertyValues:input_type -> datacommons.v1.LinkedPropertyValuesRequest - 25, // 30: datacommons.Mixer.BulkPropertyValues:input_type -> datacommons.v1.BulkPropertyValuesRequest - 26, // 31: datacommons.Mixer.BulkLinkedPropertyValues:input_type -> datacommons.v1.BulkLinkedPropertyValuesRequest - 27, // 32: datacommons.Mixer.Triples:input_type -> datacommons.v1.TriplesRequest - 28, // 33: datacommons.Mixer.BulkTriples:input_type -> datacommons.v1.BulkTriplesRequest - 29, // 34: datacommons.Mixer.Variables:input_type -> datacommons.v1.VariablesRequest - 30, // 35: datacommons.Mixer.PlaceInfo:input_type -> datacommons.v1.PlaceInfoRequest - 31, // 36: datacommons.Mixer.BulkPlaceInfo:input_type -> datacommons.v1.BulkPlaceInfoRequest - 32, // 37: datacommons.Mixer.VariableInfo:input_type -> datacommons.v1.VariableInfoRequest - 33, // 38: datacommons.Mixer.BulkVariableInfo:input_type -> datacommons.v1.BulkVariableInfoRequest - 34, // 39: datacommons.Mixer.VariableGroupInfo:input_type -> datacommons.v1.VariableGroupInfoRequest - 35, // 40: datacommons.Mixer.BulkVariableGroupInfo:input_type -> datacommons.v1.BulkVariableGroupInfoRequest - 36, // 41: datacommons.Mixer.ObservationsPoint:input_type -> datacommons.v1.ObservationsPointRequest - 37, // 42: datacommons.Mixer.BulkObservationsPoint:input_type -> datacommons.v1.BulkObservationsPointRequest - 38, // 43: datacommons.Mixer.ObservationsSeries:input_type -> datacommons.v1.ObservationsSeriesRequest - 39, // 44: datacommons.Mixer.BulkObservationsSeries:input_type -> datacommons.v1.BulkObservationsSeriesRequest - 40, // 45: datacommons.Mixer.BulkObservationsSeriesLinked:input_type -> datacommons.v1.BulkObservationsSeriesLinkedRequest - 41, // 46: datacommons.Mixer.BulkObservationDatesLinked:input_type -> datacommons.v1.BulkObservationDatesLinkedRequest - 42, // 47: datacommons.Mixer.PlacePage:input_type -> datacommons.v1.PlacePageRequest - 43, // 48: datacommons.Mixer.VariableAncestors:input_type -> datacommons.v1.VariableAncestorsRequest - 44, // 49: datacommons.Mixer.SearchStatVar:input_type -> datacommons.SearchStatVarRequest - 45, // 50: datacommons.Mixer.ResolveEntities:input_type -> datacommons.ResolveEntitiesRequest - 46, // 51: datacommons.Mixer.ResolveCoordinates:input_type -> datacommons.ResolveCoordinatesRequest - 47, // 52: datacommons.Mixer.ResolveIds:input_type -> datacommons.ResolveIdsRequest - 48, // 53: datacommons.Mixer.FindEntities:input_type -> datacommons.FindEntitiesRequest - 49, // 54: datacommons.Mixer.BulkFindEntities:input_type -> datacommons.BulkFindEntitiesRequest - 50, // 55: datacommons.Mixer.RecognizePlaces:input_type -> datacommons.RecognizePlacesRequest - 51, // 56: datacommons.Mixer.RecognizeEntities:input_type -> datacommons.RecognizeEntitiesRequest - 52, // 57: datacommons.Mixer.GetImportTableData:input_type -> datacommons.GetImportTableDataRequest - 53, // 58: datacommons.Mixer.V3Node:output_type -> datacommons.v2.NodeResponse - 54, // 59: datacommons.Mixer.V3Observation:output_type -> datacommons.v2.ObservationResponse - 55, // 60: datacommons.Mixer.V3NodeSearch:output_type -> datacommons.v2.NodeSearchResponse - 56, // 61: datacommons.Mixer.V3Resolve:output_type -> datacommons.v2.ResolveResponse - 57, // 62: datacommons.Mixer.V3Sparql:output_type -> datacommons.QueryResponse - 57, // 63: datacommons.Mixer.V2Sparql:output_type -> datacommons.QueryResponse - 56, // 64: datacommons.Mixer.V2Resolve:output_type -> datacommons.v2.ResolveResponse - 53, // 65: datacommons.Mixer.V2Node:output_type -> datacommons.v2.NodeResponse - 58, // 66: datacommons.Mixer.V2Event:output_type -> datacommons.v2.EventResponse - 54, // 67: datacommons.Mixer.V2Observation:output_type -> datacommons.v2.ObservationResponse - 59, // 68: datacommons.Mixer.FilterStatVarsByEntity:output_type -> datacommons.FilterStatVarsByEntityResponse - 57, // 69: datacommons.Mixer.Query:output_type -> datacommons.QueryResponse - 60, // 70: datacommons.Mixer.GetPropertyLabels:output_type -> datacommons.PayloadResponse - 60, // 71: datacommons.Mixer.GetPropertyValues:output_type -> datacommons.PayloadResponse - 60, // 72: datacommons.Mixer.GetTriples:output_type -> datacommons.PayloadResponse - 61, // 73: datacommons.Mixer.GetPlacesIn:output_type -> datacommons.GetPlacesInResponse - 62, // 74: datacommons.Mixer.GetStats:output_type -> datacommons.GetStatsResponse - 63, // 75: datacommons.Mixer.GetStatValue:output_type -> datacommons.GetStatValueResponse - 64, // 76: datacommons.Mixer.GetStatSeries:output_type -> datacommons.GetStatSeriesResponse - 65, // 77: datacommons.Mixer.GetStatAll:output_type -> datacommons.GetStatAllResponse - 66, // 78: datacommons.Mixer.GetLocationsRankings:output_type -> datacommons.GetLocationsRankingsResponse - 67, // 79: datacommons.Mixer.GetRelatedLocations:output_type -> datacommons.GetRelatedLocationsResponse - 68, // 80: datacommons.Mixer.GetVersion:output_type -> datacommons.GetVersionResponse - 69, // 81: datacommons.Mixer.GetPlaceStatVars:output_type -> datacommons.GetPlaceStatVarsResponse - 70, // 82: datacommons.Mixer.GetEntityStatVarsUnionV1:output_type -> datacommons.GetEntityStatVarsUnionResponse - 57, // 83: datacommons.Mixer.QueryV1:output_type -> datacommons.QueryResponse - 71, // 84: datacommons.Mixer.Properties:output_type -> datacommons.v1.PropertiesResponse - 72, // 85: datacommons.Mixer.BulkProperties:output_type -> datacommons.v1.BulkPropertiesResponse - 73, // 86: datacommons.Mixer.PropertyValues:output_type -> datacommons.v1.PropertyValuesResponse - 73, // 87: datacommons.Mixer.LinkedPropertyValues:output_type -> datacommons.v1.PropertyValuesResponse - 74, // 88: datacommons.Mixer.BulkPropertyValues:output_type -> datacommons.v1.BulkPropertyValuesResponse - 74, // 89: datacommons.Mixer.BulkLinkedPropertyValues:output_type -> datacommons.v1.BulkPropertyValuesResponse - 75, // 90: datacommons.Mixer.Triples:output_type -> datacommons.v1.TriplesResponse - 76, // 91: datacommons.Mixer.BulkTriples:output_type -> datacommons.v1.BulkTriplesResponse - 77, // 92: datacommons.Mixer.Variables:output_type -> datacommons.v1.VariablesResponse - 78, // 93: datacommons.Mixer.PlaceInfo:output_type -> datacommons.v1.PlaceInfoResponse - 79, // 94: datacommons.Mixer.BulkPlaceInfo:output_type -> datacommons.v1.BulkPlaceInfoResponse - 80, // 95: datacommons.Mixer.VariableInfo:output_type -> datacommons.v1.VariableInfoResponse - 81, // 96: datacommons.Mixer.BulkVariableInfo:output_type -> datacommons.v1.BulkVariableInfoResponse - 82, // 97: datacommons.Mixer.VariableGroupInfo:output_type -> datacommons.v1.VariableGroupInfoResponse - 83, // 98: datacommons.Mixer.BulkVariableGroupInfo:output_type -> datacommons.v1.BulkVariableGroupInfoResponse - 84, // 99: datacommons.Mixer.ObservationsPoint:output_type -> datacommons.PointStat - 85, // 100: datacommons.Mixer.BulkObservationsPoint:output_type -> datacommons.v1.BulkObservationsPointResponse - 86, // 101: datacommons.Mixer.ObservationsSeries:output_type -> datacommons.v1.ObservationsSeriesResponse - 87, // 102: datacommons.Mixer.BulkObservationsSeries:output_type -> datacommons.v1.BulkObservationsSeriesResponse - 87, // 103: datacommons.Mixer.BulkObservationsSeriesLinked:output_type -> datacommons.v1.BulkObservationsSeriesResponse - 88, // 104: datacommons.Mixer.BulkObservationDatesLinked:output_type -> datacommons.v1.BulkObservationDatesLinkedResponse - 89, // 105: datacommons.Mixer.PlacePage:output_type -> datacommons.v1.PlacePageResponse - 90, // 106: datacommons.Mixer.VariableAncestors:output_type -> datacommons.v1.VariableAncestorsResponse - 91, // 107: datacommons.Mixer.SearchStatVar:output_type -> datacommons.SearchStatVarResponse - 92, // 108: datacommons.Mixer.ResolveEntities:output_type -> datacommons.ResolveEntitiesResponse - 93, // 109: datacommons.Mixer.ResolveCoordinates:output_type -> datacommons.ResolveCoordinatesResponse - 94, // 110: datacommons.Mixer.ResolveIds:output_type -> datacommons.ResolveIdsResponse - 95, // 111: datacommons.Mixer.FindEntities:output_type -> datacommons.FindEntitiesResponse - 96, // 112: datacommons.Mixer.BulkFindEntities:output_type -> datacommons.BulkFindEntitiesResponse - 97, // 113: datacommons.Mixer.RecognizePlaces:output_type -> datacommons.RecognizePlacesResponse - 98, // 114: datacommons.Mixer.RecognizeEntities:output_type -> datacommons.RecognizeEntitiesResponse - 99, // 115: datacommons.Mixer.GetImportTableData:output_type -> datacommons.GetImportTableDataResponse - 58, // [58:116] is the sub-list for method output_type - 0, // [0:58] is the sub-list for method input_type + 4, // 4: datacommons.Mixer.V3Event:input_type -> datacommons.v2.EventRequest + 5, // 5: datacommons.Mixer.V3Sparql:input_type -> datacommons.SparqlRequest + 5, // 6: datacommons.Mixer.V2Sparql:input_type -> datacommons.SparqlRequest + 3, // 7: datacommons.Mixer.V2Resolve:input_type -> datacommons.v2.ResolveRequest + 0, // 8: datacommons.Mixer.V2Node:input_type -> datacommons.v2.NodeRequest + 4, // 9: datacommons.Mixer.V2Event:input_type -> datacommons.v2.EventRequest + 1, // 10: datacommons.Mixer.V2Observation:input_type -> datacommons.v2.ObservationRequest + 6, // 11: datacommons.Mixer.FilterStatVarsByEntity:input_type -> datacommons.FilterStatVarsByEntityRequest + 7, // 12: datacommons.Mixer.Query:input_type -> datacommons.QueryRequest + 8, // 13: datacommons.Mixer.GetPropertyLabels:input_type -> datacommons.GetPropertyLabelsRequest + 9, // 14: datacommons.Mixer.GetPropertyValues:input_type -> datacommons.GetPropertyValuesRequest + 10, // 15: datacommons.Mixer.GetTriples:input_type -> datacommons.GetTriplesRequest + 11, // 16: datacommons.Mixer.GetPlacesIn:input_type -> datacommons.GetPlacesInRequest + 12, // 17: datacommons.Mixer.GetStats:input_type -> datacommons.GetStatsRequest + 13, // 18: datacommons.Mixer.GetStatValue:input_type -> datacommons.GetStatValueRequest + 14, // 19: datacommons.Mixer.GetStatSeries:input_type -> datacommons.GetStatSeriesRequest + 15, // 20: datacommons.Mixer.GetStatAll:input_type -> datacommons.GetStatAllRequest + 16, // 21: datacommons.Mixer.GetLocationsRankings:input_type -> datacommons.GetLocationsRankingsRequest + 17, // 22: datacommons.Mixer.GetRelatedLocations:input_type -> datacommons.GetRelatedLocationsRequest + 18, // 23: datacommons.Mixer.GetVersion:input_type -> datacommons.GetVersionRequest + 19, // 24: datacommons.Mixer.GetPlaceStatVars:input_type -> datacommons.GetPlaceStatVarsRequest + 20, // 25: datacommons.Mixer.GetEntityStatVarsUnionV1:input_type -> datacommons.GetEntityStatVarsUnionRequest + 7, // 26: datacommons.Mixer.QueryV1:input_type -> datacommons.QueryRequest + 21, // 27: datacommons.Mixer.Properties:input_type -> datacommons.v1.PropertiesRequest + 22, // 28: datacommons.Mixer.BulkProperties:input_type -> datacommons.v1.BulkPropertiesRequest + 23, // 29: datacommons.Mixer.PropertyValues:input_type -> datacommons.v1.PropertyValuesRequest + 24, // 30: datacommons.Mixer.LinkedPropertyValues:input_type -> datacommons.v1.LinkedPropertyValuesRequest + 25, // 31: datacommons.Mixer.BulkPropertyValues:input_type -> datacommons.v1.BulkPropertyValuesRequest + 26, // 32: datacommons.Mixer.BulkLinkedPropertyValues:input_type -> datacommons.v1.BulkLinkedPropertyValuesRequest + 27, // 33: datacommons.Mixer.Triples:input_type -> datacommons.v1.TriplesRequest + 28, // 34: datacommons.Mixer.BulkTriples:input_type -> datacommons.v1.BulkTriplesRequest + 29, // 35: datacommons.Mixer.Variables:input_type -> datacommons.v1.VariablesRequest + 30, // 36: datacommons.Mixer.PlaceInfo:input_type -> datacommons.v1.PlaceInfoRequest + 31, // 37: datacommons.Mixer.BulkPlaceInfo:input_type -> datacommons.v1.BulkPlaceInfoRequest + 32, // 38: datacommons.Mixer.VariableInfo:input_type -> datacommons.v1.VariableInfoRequest + 33, // 39: datacommons.Mixer.BulkVariableInfo:input_type -> datacommons.v1.BulkVariableInfoRequest + 34, // 40: datacommons.Mixer.VariableGroupInfo:input_type -> datacommons.v1.VariableGroupInfoRequest + 35, // 41: datacommons.Mixer.BulkVariableGroupInfo:input_type -> datacommons.v1.BulkVariableGroupInfoRequest + 36, // 42: datacommons.Mixer.ObservationsPoint:input_type -> datacommons.v1.ObservationsPointRequest + 37, // 43: datacommons.Mixer.BulkObservationsPoint:input_type -> datacommons.v1.BulkObservationsPointRequest + 38, // 44: datacommons.Mixer.ObservationsSeries:input_type -> datacommons.v1.ObservationsSeriesRequest + 39, // 45: datacommons.Mixer.BulkObservationsSeries:input_type -> datacommons.v1.BulkObservationsSeriesRequest + 40, // 46: datacommons.Mixer.BulkObservationsSeriesLinked:input_type -> datacommons.v1.BulkObservationsSeriesLinkedRequest + 41, // 47: datacommons.Mixer.BulkObservationDatesLinked:input_type -> datacommons.v1.BulkObservationDatesLinkedRequest + 42, // 48: datacommons.Mixer.PlacePage:input_type -> datacommons.v1.PlacePageRequest + 43, // 49: datacommons.Mixer.VariableAncestors:input_type -> datacommons.v1.VariableAncestorsRequest + 44, // 50: datacommons.Mixer.SearchStatVar:input_type -> datacommons.SearchStatVarRequest + 45, // 51: datacommons.Mixer.ResolveEntities:input_type -> datacommons.ResolveEntitiesRequest + 46, // 52: datacommons.Mixer.ResolveCoordinates:input_type -> datacommons.ResolveCoordinatesRequest + 47, // 53: datacommons.Mixer.ResolveIds:input_type -> datacommons.ResolveIdsRequest + 48, // 54: datacommons.Mixer.FindEntities:input_type -> datacommons.FindEntitiesRequest + 49, // 55: datacommons.Mixer.BulkFindEntities:input_type -> datacommons.BulkFindEntitiesRequest + 50, // 56: datacommons.Mixer.RecognizePlaces:input_type -> datacommons.RecognizePlacesRequest + 51, // 57: datacommons.Mixer.RecognizeEntities:input_type -> datacommons.RecognizeEntitiesRequest + 52, // 58: datacommons.Mixer.GetImportTableData:input_type -> datacommons.GetImportTableDataRequest + 53, // 59: datacommons.Mixer.V3Node:output_type -> datacommons.v2.NodeResponse + 54, // 60: datacommons.Mixer.V3Observation:output_type -> datacommons.v2.ObservationResponse + 55, // 61: datacommons.Mixer.V3NodeSearch:output_type -> datacommons.v2.NodeSearchResponse + 56, // 62: datacommons.Mixer.V3Resolve:output_type -> datacommons.v2.ResolveResponse + 57, // 63: datacommons.Mixer.V3Event:output_type -> datacommons.v2.EventResponse + 58, // 64: datacommons.Mixer.V3Sparql:output_type -> datacommons.QueryResponse + 58, // 65: datacommons.Mixer.V2Sparql:output_type -> datacommons.QueryResponse + 56, // 66: datacommons.Mixer.V2Resolve:output_type -> datacommons.v2.ResolveResponse + 53, // 67: datacommons.Mixer.V2Node:output_type -> datacommons.v2.NodeResponse + 57, // 68: datacommons.Mixer.V2Event:output_type -> datacommons.v2.EventResponse + 54, // 69: datacommons.Mixer.V2Observation:output_type -> datacommons.v2.ObservationResponse + 59, // 70: datacommons.Mixer.FilterStatVarsByEntity:output_type -> datacommons.FilterStatVarsByEntityResponse + 58, // 71: datacommons.Mixer.Query:output_type -> datacommons.QueryResponse + 60, // 72: datacommons.Mixer.GetPropertyLabels:output_type -> datacommons.PayloadResponse + 60, // 73: datacommons.Mixer.GetPropertyValues:output_type -> datacommons.PayloadResponse + 60, // 74: datacommons.Mixer.GetTriples:output_type -> datacommons.PayloadResponse + 61, // 75: datacommons.Mixer.GetPlacesIn:output_type -> datacommons.GetPlacesInResponse + 62, // 76: datacommons.Mixer.GetStats:output_type -> datacommons.GetStatsResponse + 63, // 77: datacommons.Mixer.GetStatValue:output_type -> datacommons.GetStatValueResponse + 64, // 78: datacommons.Mixer.GetStatSeries:output_type -> datacommons.GetStatSeriesResponse + 65, // 79: datacommons.Mixer.GetStatAll:output_type -> datacommons.GetStatAllResponse + 66, // 80: datacommons.Mixer.GetLocationsRankings:output_type -> datacommons.GetLocationsRankingsResponse + 67, // 81: datacommons.Mixer.GetRelatedLocations:output_type -> datacommons.GetRelatedLocationsResponse + 68, // 82: datacommons.Mixer.GetVersion:output_type -> datacommons.GetVersionResponse + 69, // 83: datacommons.Mixer.GetPlaceStatVars:output_type -> datacommons.GetPlaceStatVarsResponse + 70, // 84: datacommons.Mixer.GetEntityStatVarsUnionV1:output_type -> datacommons.GetEntityStatVarsUnionResponse + 58, // 85: datacommons.Mixer.QueryV1:output_type -> datacommons.QueryResponse + 71, // 86: datacommons.Mixer.Properties:output_type -> datacommons.v1.PropertiesResponse + 72, // 87: datacommons.Mixer.BulkProperties:output_type -> datacommons.v1.BulkPropertiesResponse + 73, // 88: datacommons.Mixer.PropertyValues:output_type -> datacommons.v1.PropertyValuesResponse + 73, // 89: datacommons.Mixer.LinkedPropertyValues:output_type -> datacommons.v1.PropertyValuesResponse + 74, // 90: datacommons.Mixer.BulkPropertyValues:output_type -> datacommons.v1.BulkPropertyValuesResponse + 74, // 91: datacommons.Mixer.BulkLinkedPropertyValues:output_type -> datacommons.v1.BulkPropertyValuesResponse + 75, // 92: datacommons.Mixer.Triples:output_type -> datacommons.v1.TriplesResponse + 76, // 93: datacommons.Mixer.BulkTriples:output_type -> datacommons.v1.BulkTriplesResponse + 77, // 94: datacommons.Mixer.Variables:output_type -> datacommons.v1.VariablesResponse + 78, // 95: datacommons.Mixer.PlaceInfo:output_type -> datacommons.v1.PlaceInfoResponse + 79, // 96: datacommons.Mixer.BulkPlaceInfo:output_type -> datacommons.v1.BulkPlaceInfoResponse + 80, // 97: datacommons.Mixer.VariableInfo:output_type -> datacommons.v1.VariableInfoResponse + 81, // 98: datacommons.Mixer.BulkVariableInfo:output_type -> datacommons.v1.BulkVariableInfoResponse + 82, // 99: datacommons.Mixer.VariableGroupInfo:output_type -> datacommons.v1.VariableGroupInfoResponse + 83, // 100: datacommons.Mixer.BulkVariableGroupInfo:output_type -> datacommons.v1.BulkVariableGroupInfoResponse + 84, // 101: datacommons.Mixer.ObservationsPoint:output_type -> datacommons.PointStat + 85, // 102: datacommons.Mixer.BulkObservationsPoint:output_type -> datacommons.v1.BulkObservationsPointResponse + 86, // 103: datacommons.Mixer.ObservationsSeries:output_type -> datacommons.v1.ObservationsSeriesResponse + 87, // 104: datacommons.Mixer.BulkObservationsSeries:output_type -> datacommons.v1.BulkObservationsSeriesResponse + 87, // 105: datacommons.Mixer.BulkObservationsSeriesLinked:output_type -> datacommons.v1.BulkObservationsSeriesResponse + 88, // 106: datacommons.Mixer.BulkObservationDatesLinked:output_type -> datacommons.v1.BulkObservationDatesLinkedResponse + 89, // 107: datacommons.Mixer.PlacePage:output_type -> datacommons.v1.PlacePageResponse + 90, // 108: datacommons.Mixer.VariableAncestors:output_type -> datacommons.v1.VariableAncestorsResponse + 91, // 109: datacommons.Mixer.SearchStatVar:output_type -> datacommons.SearchStatVarResponse + 92, // 110: datacommons.Mixer.ResolveEntities:output_type -> datacommons.ResolveEntitiesResponse + 93, // 111: datacommons.Mixer.ResolveCoordinates:output_type -> datacommons.ResolveCoordinatesResponse + 94, // 112: datacommons.Mixer.ResolveIds:output_type -> datacommons.ResolveIdsResponse + 95, // 113: datacommons.Mixer.FindEntities:output_type -> datacommons.FindEntitiesResponse + 96, // 114: datacommons.Mixer.BulkFindEntities:output_type -> datacommons.BulkFindEntitiesResponse + 97, // 115: datacommons.Mixer.RecognizePlaces:output_type -> datacommons.RecognizePlacesResponse + 98, // 116: datacommons.Mixer.RecognizeEntities:output_type -> datacommons.RecognizeEntitiesResponse + 99, // 117: datacommons.Mixer.GetImportTableData:output_type -> datacommons.GetImportTableDataResponse + 59, // [59:118] is the sub-list for method output_type + 0, // [0:59] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name 0, // [0:0] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name @@ -839,7 +361,7 @@ func file_service_mixer_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_service_mixer_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_service_mixer_proto_rawDesc), len(file_service_mixer_proto_rawDesc)), NumEnums: 0, NumMessages: 0, NumExtensions: 0, @@ -849,7 +371,6 @@ func file_service_mixer_proto_init() { DependencyIndexes: file_service_mixer_proto_depIdxs, }.Build() File_service_mixer_proto = out.File - file_service_mixer_proto_rawDesc = nil file_service_mixer_proto_goTypes = nil file_service_mixer_proto_depIdxs = nil } diff --git a/internal/proto/service/mixer_grpc.pb.go b/internal/proto/service/mixer_grpc.pb.go index a657c9d96..724af624b 100644 --- a/internal/proto/service/mixer_grpc.pb.go +++ b/internal/proto/service/mixer_grpc.pb.go @@ -21,7 +21,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.3.0 +// - protoc-gen-go-grpc v1.6.0 // - protoc v3.21.12 // source: service/mixer.proto @@ -39,14 +39,15 @@ import ( // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -// Requires gRPC-Go v1.32.0 or later. -const _ = grpc.SupportPackageIsVersion7 +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 const ( Mixer_V3Node_FullMethodName = "/datacommons.Mixer/V3Node" Mixer_V3Observation_FullMethodName = "/datacommons.Mixer/V3Observation" Mixer_V3NodeSearch_FullMethodName = "/datacommons.Mixer/V3NodeSearch" Mixer_V3Resolve_FullMethodName = "/datacommons.Mixer/V3Resolve" + Mixer_V3Event_FullMethodName = "/datacommons.Mixer/V3Event" Mixer_V3Sparql_FullMethodName = "/datacommons.Mixer/V3Sparql" Mixer_V2Sparql_FullMethodName = "/datacommons.Mixer/V2Sparql" Mixer_V2Resolve_FullMethodName = "/datacommons.Mixer/V2Resolve" @@ -111,6 +112,7 @@ type MixerClient interface { V3Observation(ctx context.Context, in *v2.ObservationRequest, opts ...grpc.CallOption) (*v2.ObservationResponse, error) V3NodeSearch(ctx context.Context, in *v2.NodeSearchRequest, opts ...grpc.CallOption) (*v2.NodeSearchResponse, error) V3Resolve(ctx context.Context, in *v2.ResolveRequest, opts ...grpc.CallOption) (*v2.ResolveResponse, error) + V3Event(ctx context.Context, in *v2.EventRequest, opts ...grpc.CallOption) (*v2.EventResponse, error) V3Sparql(ctx context.Context, in *proto.SparqlRequest, opts ...grpc.CallOption) (*proto.QueryResponse, error) V2Sparql(ctx context.Context, in *proto.SparqlRequest, opts ...grpc.CallOption) (*proto.QueryResponse, error) V2Resolve(ctx context.Context, in *v2.ResolveRequest, opts ...grpc.CallOption) (*v2.ResolveResponse, error) @@ -209,8 +211,9 @@ func NewMixerClient(cc grpc.ClientConnInterface) MixerClient { } func (c *mixerClient) V3Node(ctx context.Context, in *v2.NodeRequest, opts ...grpc.CallOption) (*v2.NodeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v2.NodeResponse) - err := c.cc.Invoke(ctx, Mixer_V3Node_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V3Node_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -218,8 +221,9 @@ func (c *mixerClient) V3Node(ctx context.Context, in *v2.NodeRequest, opts ...gr } func (c *mixerClient) V3Observation(ctx context.Context, in *v2.ObservationRequest, opts ...grpc.CallOption) (*v2.ObservationResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v2.ObservationResponse) - err := c.cc.Invoke(ctx, Mixer_V3Observation_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V3Observation_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -227,8 +231,9 @@ func (c *mixerClient) V3Observation(ctx context.Context, in *v2.ObservationReque } func (c *mixerClient) V3NodeSearch(ctx context.Context, in *v2.NodeSearchRequest, opts ...grpc.CallOption) (*v2.NodeSearchResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v2.NodeSearchResponse) - err := c.cc.Invoke(ctx, Mixer_V3NodeSearch_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V3NodeSearch_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -236,8 +241,19 @@ func (c *mixerClient) V3NodeSearch(ctx context.Context, in *v2.NodeSearchRequest } func (c *mixerClient) V3Resolve(ctx context.Context, in *v2.ResolveRequest, opts ...grpc.CallOption) (*v2.ResolveResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v2.ResolveResponse) - err := c.cc.Invoke(ctx, Mixer_V3Resolve_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V3Resolve_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *mixerClient) V3Event(ctx context.Context, in *v2.EventRequest, opts ...grpc.CallOption) (*v2.EventResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(v2.EventResponse) + err := c.cc.Invoke(ctx, Mixer_V3Event_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -245,8 +261,9 @@ func (c *mixerClient) V3Resolve(ctx context.Context, in *v2.ResolveRequest, opts } func (c *mixerClient) V3Sparql(ctx context.Context, in *proto.SparqlRequest, opts ...grpc.CallOption) (*proto.QueryResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.QueryResponse) - err := c.cc.Invoke(ctx, Mixer_V3Sparql_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V3Sparql_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -254,8 +271,9 @@ func (c *mixerClient) V3Sparql(ctx context.Context, in *proto.SparqlRequest, opt } func (c *mixerClient) V2Sparql(ctx context.Context, in *proto.SparqlRequest, opts ...grpc.CallOption) (*proto.QueryResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.QueryResponse) - err := c.cc.Invoke(ctx, Mixer_V2Sparql_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V2Sparql_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -263,8 +281,9 @@ func (c *mixerClient) V2Sparql(ctx context.Context, in *proto.SparqlRequest, opt } func (c *mixerClient) V2Resolve(ctx context.Context, in *v2.ResolveRequest, opts ...grpc.CallOption) (*v2.ResolveResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v2.ResolveResponse) - err := c.cc.Invoke(ctx, Mixer_V2Resolve_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V2Resolve_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -272,8 +291,9 @@ func (c *mixerClient) V2Resolve(ctx context.Context, in *v2.ResolveRequest, opts } func (c *mixerClient) V2Node(ctx context.Context, in *v2.NodeRequest, opts ...grpc.CallOption) (*v2.NodeResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v2.NodeResponse) - err := c.cc.Invoke(ctx, Mixer_V2Node_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V2Node_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -281,8 +301,9 @@ func (c *mixerClient) V2Node(ctx context.Context, in *v2.NodeRequest, opts ...gr } func (c *mixerClient) V2Event(ctx context.Context, in *v2.EventRequest, opts ...grpc.CallOption) (*v2.EventResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v2.EventResponse) - err := c.cc.Invoke(ctx, Mixer_V2Event_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V2Event_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -290,8 +311,9 @@ func (c *mixerClient) V2Event(ctx context.Context, in *v2.EventRequest, opts ... } func (c *mixerClient) V2Observation(ctx context.Context, in *v2.ObservationRequest, opts ...grpc.CallOption) (*v2.ObservationResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v2.ObservationResponse) - err := c.cc.Invoke(ctx, Mixer_V2Observation_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_V2Observation_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -299,8 +321,9 @@ func (c *mixerClient) V2Observation(ctx context.Context, in *v2.ObservationReque } func (c *mixerClient) FilterStatVarsByEntity(ctx context.Context, in *proto.FilterStatVarsByEntityRequest, opts ...grpc.CallOption) (*proto.FilterStatVarsByEntityResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.FilterStatVarsByEntityResponse) - err := c.cc.Invoke(ctx, Mixer_FilterStatVarsByEntity_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_FilterStatVarsByEntity_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -308,8 +331,9 @@ func (c *mixerClient) FilterStatVarsByEntity(ctx context.Context, in *proto.Filt } func (c *mixerClient) Query(ctx context.Context, in *proto.QueryRequest, opts ...grpc.CallOption) (*proto.QueryResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.QueryResponse) - err := c.cc.Invoke(ctx, Mixer_Query_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_Query_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -317,8 +341,9 @@ func (c *mixerClient) Query(ctx context.Context, in *proto.QueryRequest, opts .. } func (c *mixerClient) GetPropertyLabels(ctx context.Context, in *proto.GetPropertyLabelsRequest, opts ...grpc.CallOption) (*proto.PayloadResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.PayloadResponse) - err := c.cc.Invoke(ctx, Mixer_GetPropertyLabels_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetPropertyLabels_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -326,8 +351,9 @@ func (c *mixerClient) GetPropertyLabels(ctx context.Context, in *proto.GetProper } func (c *mixerClient) GetPropertyValues(ctx context.Context, in *proto.GetPropertyValuesRequest, opts ...grpc.CallOption) (*proto.PayloadResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.PayloadResponse) - err := c.cc.Invoke(ctx, Mixer_GetPropertyValues_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetPropertyValues_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -335,8 +361,9 @@ func (c *mixerClient) GetPropertyValues(ctx context.Context, in *proto.GetProper } func (c *mixerClient) GetTriples(ctx context.Context, in *proto.GetTriplesRequest, opts ...grpc.CallOption) (*proto.PayloadResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.PayloadResponse) - err := c.cc.Invoke(ctx, Mixer_GetTriples_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetTriples_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -344,8 +371,9 @@ func (c *mixerClient) GetTriples(ctx context.Context, in *proto.GetTriplesReques } func (c *mixerClient) GetPlacesIn(ctx context.Context, in *proto.GetPlacesInRequest, opts ...grpc.CallOption) (*proto.GetPlacesInResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetPlacesInResponse) - err := c.cc.Invoke(ctx, Mixer_GetPlacesIn_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetPlacesIn_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -353,8 +381,9 @@ func (c *mixerClient) GetPlacesIn(ctx context.Context, in *proto.GetPlacesInRequ } func (c *mixerClient) GetStats(ctx context.Context, in *proto.GetStatsRequest, opts ...grpc.CallOption) (*proto.GetStatsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetStatsResponse) - err := c.cc.Invoke(ctx, Mixer_GetStats_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetStats_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -362,8 +391,9 @@ func (c *mixerClient) GetStats(ctx context.Context, in *proto.GetStatsRequest, o } func (c *mixerClient) GetStatValue(ctx context.Context, in *proto.GetStatValueRequest, opts ...grpc.CallOption) (*proto.GetStatValueResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetStatValueResponse) - err := c.cc.Invoke(ctx, Mixer_GetStatValue_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetStatValue_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -371,8 +401,9 @@ func (c *mixerClient) GetStatValue(ctx context.Context, in *proto.GetStatValueRe } func (c *mixerClient) GetStatSeries(ctx context.Context, in *proto.GetStatSeriesRequest, opts ...grpc.CallOption) (*proto.GetStatSeriesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetStatSeriesResponse) - err := c.cc.Invoke(ctx, Mixer_GetStatSeries_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetStatSeries_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -380,8 +411,9 @@ func (c *mixerClient) GetStatSeries(ctx context.Context, in *proto.GetStatSeries } func (c *mixerClient) GetStatAll(ctx context.Context, in *proto.GetStatAllRequest, opts ...grpc.CallOption) (*proto.GetStatAllResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetStatAllResponse) - err := c.cc.Invoke(ctx, Mixer_GetStatAll_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetStatAll_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -389,8 +421,9 @@ func (c *mixerClient) GetStatAll(ctx context.Context, in *proto.GetStatAllReques } func (c *mixerClient) GetLocationsRankings(ctx context.Context, in *proto.GetLocationsRankingsRequest, opts ...grpc.CallOption) (*proto.GetLocationsRankingsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetLocationsRankingsResponse) - err := c.cc.Invoke(ctx, Mixer_GetLocationsRankings_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetLocationsRankings_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -398,8 +431,9 @@ func (c *mixerClient) GetLocationsRankings(ctx context.Context, in *proto.GetLoc } func (c *mixerClient) GetRelatedLocations(ctx context.Context, in *proto.GetRelatedLocationsRequest, opts ...grpc.CallOption) (*proto.GetRelatedLocationsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetRelatedLocationsResponse) - err := c.cc.Invoke(ctx, Mixer_GetRelatedLocations_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetRelatedLocations_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -407,8 +441,9 @@ func (c *mixerClient) GetRelatedLocations(ctx context.Context, in *proto.GetRela } func (c *mixerClient) GetVersion(ctx context.Context, in *proto.GetVersionRequest, opts ...grpc.CallOption) (*proto.GetVersionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetVersionResponse) - err := c.cc.Invoke(ctx, Mixer_GetVersion_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetVersion_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -416,8 +451,9 @@ func (c *mixerClient) GetVersion(ctx context.Context, in *proto.GetVersionReques } func (c *mixerClient) GetPlaceStatVars(ctx context.Context, in *proto.GetPlaceStatVarsRequest, opts ...grpc.CallOption) (*proto.GetPlaceStatVarsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetPlaceStatVarsResponse) - err := c.cc.Invoke(ctx, Mixer_GetPlaceStatVars_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetPlaceStatVars_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -425,8 +461,9 @@ func (c *mixerClient) GetPlaceStatVars(ctx context.Context, in *proto.GetPlaceSt } func (c *mixerClient) GetEntityStatVarsUnionV1(ctx context.Context, in *proto.GetEntityStatVarsUnionRequest, opts ...grpc.CallOption) (*proto.GetEntityStatVarsUnionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetEntityStatVarsUnionResponse) - err := c.cc.Invoke(ctx, Mixer_GetEntityStatVarsUnionV1_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetEntityStatVarsUnionV1_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -434,8 +471,9 @@ func (c *mixerClient) GetEntityStatVarsUnionV1(ctx context.Context, in *proto.Ge } func (c *mixerClient) QueryV1(ctx context.Context, in *proto.QueryRequest, opts ...grpc.CallOption) (*proto.QueryResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.QueryResponse) - err := c.cc.Invoke(ctx, Mixer_QueryV1_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_QueryV1_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -443,8 +481,9 @@ func (c *mixerClient) QueryV1(ctx context.Context, in *proto.QueryRequest, opts } func (c *mixerClient) Properties(ctx context.Context, in *v1.PropertiesRequest, opts ...grpc.CallOption) (*v1.PropertiesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.PropertiesResponse) - err := c.cc.Invoke(ctx, Mixer_Properties_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_Properties_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -452,8 +491,9 @@ func (c *mixerClient) Properties(ctx context.Context, in *v1.PropertiesRequest, } func (c *mixerClient) BulkProperties(ctx context.Context, in *v1.BulkPropertiesRequest, opts ...grpc.CallOption) (*v1.BulkPropertiesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkPropertiesResponse) - err := c.cc.Invoke(ctx, Mixer_BulkProperties_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkProperties_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -461,8 +501,9 @@ func (c *mixerClient) BulkProperties(ctx context.Context, in *v1.BulkPropertiesR } func (c *mixerClient) PropertyValues(ctx context.Context, in *v1.PropertyValuesRequest, opts ...grpc.CallOption) (*v1.PropertyValuesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.PropertyValuesResponse) - err := c.cc.Invoke(ctx, Mixer_PropertyValues_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_PropertyValues_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -470,8 +511,9 @@ func (c *mixerClient) PropertyValues(ctx context.Context, in *v1.PropertyValuesR } func (c *mixerClient) LinkedPropertyValues(ctx context.Context, in *v1.LinkedPropertyValuesRequest, opts ...grpc.CallOption) (*v1.PropertyValuesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.PropertyValuesResponse) - err := c.cc.Invoke(ctx, Mixer_LinkedPropertyValues_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_LinkedPropertyValues_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -479,8 +521,9 @@ func (c *mixerClient) LinkedPropertyValues(ctx context.Context, in *v1.LinkedPro } func (c *mixerClient) BulkPropertyValues(ctx context.Context, in *v1.BulkPropertyValuesRequest, opts ...grpc.CallOption) (*v1.BulkPropertyValuesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkPropertyValuesResponse) - err := c.cc.Invoke(ctx, Mixer_BulkPropertyValues_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkPropertyValues_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -488,8 +531,9 @@ func (c *mixerClient) BulkPropertyValues(ctx context.Context, in *v1.BulkPropert } func (c *mixerClient) BulkLinkedPropertyValues(ctx context.Context, in *v1.BulkLinkedPropertyValuesRequest, opts ...grpc.CallOption) (*v1.BulkPropertyValuesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkPropertyValuesResponse) - err := c.cc.Invoke(ctx, Mixer_BulkLinkedPropertyValues_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkLinkedPropertyValues_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -497,8 +541,9 @@ func (c *mixerClient) BulkLinkedPropertyValues(ctx context.Context, in *v1.BulkL } func (c *mixerClient) Triples(ctx context.Context, in *v1.TriplesRequest, opts ...grpc.CallOption) (*v1.TriplesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.TriplesResponse) - err := c.cc.Invoke(ctx, Mixer_Triples_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_Triples_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -506,8 +551,9 @@ func (c *mixerClient) Triples(ctx context.Context, in *v1.TriplesRequest, opts . } func (c *mixerClient) BulkTriples(ctx context.Context, in *v1.BulkTriplesRequest, opts ...grpc.CallOption) (*v1.BulkTriplesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkTriplesResponse) - err := c.cc.Invoke(ctx, Mixer_BulkTriples_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkTriples_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -515,8 +561,9 @@ func (c *mixerClient) BulkTriples(ctx context.Context, in *v1.BulkTriplesRequest } func (c *mixerClient) Variables(ctx context.Context, in *v1.VariablesRequest, opts ...grpc.CallOption) (*v1.VariablesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.VariablesResponse) - err := c.cc.Invoke(ctx, Mixer_Variables_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_Variables_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -524,8 +571,9 @@ func (c *mixerClient) Variables(ctx context.Context, in *v1.VariablesRequest, op } func (c *mixerClient) PlaceInfo(ctx context.Context, in *v1.PlaceInfoRequest, opts ...grpc.CallOption) (*v1.PlaceInfoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.PlaceInfoResponse) - err := c.cc.Invoke(ctx, Mixer_PlaceInfo_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_PlaceInfo_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -533,8 +581,9 @@ func (c *mixerClient) PlaceInfo(ctx context.Context, in *v1.PlaceInfoRequest, op } func (c *mixerClient) BulkPlaceInfo(ctx context.Context, in *v1.BulkPlaceInfoRequest, opts ...grpc.CallOption) (*v1.BulkPlaceInfoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkPlaceInfoResponse) - err := c.cc.Invoke(ctx, Mixer_BulkPlaceInfo_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkPlaceInfo_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -542,8 +591,9 @@ func (c *mixerClient) BulkPlaceInfo(ctx context.Context, in *v1.BulkPlaceInfoReq } func (c *mixerClient) VariableInfo(ctx context.Context, in *v1.VariableInfoRequest, opts ...grpc.CallOption) (*v1.VariableInfoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.VariableInfoResponse) - err := c.cc.Invoke(ctx, Mixer_VariableInfo_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_VariableInfo_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -551,8 +601,9 @@ func (c *mixerClient) VariableInfo(ctx context.Context, in *v1.VariableInfoReque } func (c *mixerClient) BulkVariableInfo(ctx context.Context, in *v1.BulkVariableInfoRequest, opts ...grpc.CallOption) (*v1.BulkVariableInfoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkVariableInfoResponse) - err := c.cc.Invoke(ctx, Mixer_BulkVariableInfo_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkVariableInfo_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -560,8 +611,9 @@ func (c *mixerClient) BulkVariableInfo(ctx context.Context, in *v1.BulkVariableI } func (c *mixerClient) VariableGroupInfo(ctx context.Context, in *v1.VariableGroupInfoRequest, opts ...grpc.CallOption) (*v1.VariableGroupInfoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.VariableGroupInfoResponse) - err := c.cc.Invoke(ctx, Mixer_VariableGroupInfo_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_VariableGroupInfo_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -569,8 +621,9 @@ func (c *mixerClient) VariableGroupInfo(ctx context.Context, in *v1.VariableGrou } func (c *mixerClient) BulkVariableGroupInfo(ctx context.Context, in *v1.BulkVariableGroupInfoRequest, opts ...grpc.CallOption) (*v1.BulkVariableGroupInfoResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkVariableGroupInfoResponse) - err := c.cc.Invoke(ctx, Mixer_BulkVariableGroupInfo_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkVariableGroupInfo_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -578,8 +631,9 @@ func (c *mixerClient) BulkVariableGroupInfo(ctx context.Context, in *v1.BulkVari } func (c *mixerClient) ObservationsPoint(ctx context.Context, in *v1.ObservationsPointRequest, opts ...grpc.CallOption) (*proto.PointStat, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.PointStat) - err := c.cc.Invoke(ctx, Mixer_ObservationsPoint_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_ObservationsPoint_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -587,8 +641,9 @@ func (c *mixerClient) ObservationsPoint(ctx context.Context, in *v1.Observations } func (c *mixerClient) BulkObservationsPoint(ctx context.Context, in *v1.BulkObservationsPointRequest, opts ...grpc.CallOption) (*v1.BulkObservationsPointResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkObservationsPointResponse) - err := c.cc.Invoke(ctx, Mixer_BulkObservationsPoint_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkObservationsPoint_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -596,8 +651,9 @@ func (c *mixerClient) BulkObservationsPoint(ctx context.Context, in *v1.BulkObse } func (c *mixerClient) ObservationsSeries(ctx context.Context, in *v1.ObservationsSeriesRequest, opts ...grpc.CallOption) (*v1.ObservationsSeriesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.ObservationsSeriesResponse) - err := c.cc.Invoke(ctx, Mixer_ObservationsSeries_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_ObservationsSeries_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -605,8 +661,9 @@ func (c *mixerClient) ObservationsSeries(ctx context.Context, in *v1.Observation } func (c *mixerClient) BulkObservationsSeries(ctx context.Context, in *v1.BulkObservationsSeriesRequest, opts ...grpc.CallOption) (*v1.BulkObservationsSeriesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkObservationsSeriesResponse) - err := c.cc.Invoke(ctx, Mixer_BulkObservationsSeries_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkObservationsSeries_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -614,8 +671,9 @@ func (c *mixerClient) BulkObservationsSeries(ctx context.Context, in *v1.BulkObs } func (c *mixerClient) BulkObservationsSeriesLinked(ctx context.Context, in *v1.BulkObservationsSeriesLinkedRequest, opts ...grpc.CallOption) (*v1.BulkObservationsSeriesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkObservationsSeriesResponse) - err := c.cc.Invoke(ctx, Mixer_BulkObservationsSeriesLinked_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkObservationsSeriesLinked_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -623,8 +681,9 @@ func (c *mixerClient) BulkObservationsSeriesLinked(ctx context.Context, in *v1.B } func (c *mixerClient) BulkObservationDatesLinked(ctx context.Context, in *v1.BulkObservationDatesLinkedRequest, opts ...grpc.CallOption) (*v1.BulkObservationDatesLinkedResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.BulkObservationDatesLinkedResponse) - err := c.cc.Invoke(ctx, Mixer_BulkObservationDatesLinked_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkObservationDatesLinked_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -632,8 +691,9 @@ func (c *mixerClient) BulkObservationDatesLinked(ctx context.Context, in *v1.Bul } func (c *mixerClient) PlacePage(ctx context.Context, in *v1.PlacePageRequest, opts ...grpc.CallOption) (*v1.PlacePageResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.PlacePageResponse) - err := c.cc.Invoke(ctx, Mixer_PlacePage_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_PlacePage_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -641,8 +701,9 @@ func (c *mixerClient) PlacePage(ctx context.Context, in *v1.PlacePageRequest, op } func (c *mixerClient) VariableAncestors(ctx context.Context, in *v1.VariableAncestorsRequest, opts ...grpc.CallOption) (*v1.VariableAncestorsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(v1.VariableAncestorsResponse) - err := c.cc.Invoke(ctx, Mixer_VariableAncestors_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_VariableAncestors_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -650,8 +711,9 @@ func (c *mixerClient) VariableAncestors(ctx context.Context, in *v1.VariableAnce } func (c *mixerClient) SearchStatVar(ctx context.Context, in *proto.SearchStatVarRequest, opts ...grpc.CallOption) (*proto.SearchStatVarResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.SearchStatVarResponse) - err := c.cc.Invoke(ctx, Mixer_SearchStatVar_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_SearchStatVar_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -659,8 +721,9 @@ func (c *mixerClient) SearchStatVar(ctx context.Context, in *proto.SearchStatVar } func (c *mixerClient) ResolveEntities(ctx context.Context, in *proto.ResolveEntitiesRequest, opts ...grpc.CallOption) (*proto.ResolveEntitiesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.ResolveEntitiesResponse) - err := c.cc.Invoke(ctx, Mixer_ResolveEntities_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_ResolveEntities_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -668,8 +731,9 @@ func (c *mixerClient) ResolveEntities(ctx context.Context, in *proto.ResolveEnti } func (c *mixerClient) ResolveCoordinates(ctx context.Context, in *proto.ResolveCoordinatesRequest, opts ...grpc.CallOption) (*proto.ResolveCoordinatesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.ResolveCoordinatesResponse) - err := c.cc.Invoke(ctx, Mixer_ResolveCoordinates_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_ResolveCoordinates_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -677,8 +741,9 @@ func (c *mixerClient) ResolveCoordinates(ctx context.Context, in *proto.ResolveC } func (c *mixerClient) ResolveIds(ctx context.Context, in *proto.ResolveIdsRequest, opts ...grpc.CallOption) (*proto.ResolveIdsResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.ResolveIdsResponse) - err := c.cc.Invoke(ctx, Mixer_ResolveIds_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_ResolveIds_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -686,8 +751,9 @@ func (c *mixerClient) ResolveIds(ctx context.Context, in *proto.ResolveIdsReques } func (c *mixerClient) FindEntities(ctx context.Context, in *proto.FindEntitiesRequest, opts ...grpc.CallOption) (*proto.FindEntitiesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.FindEntitiesResponse) - err := c.cc.Invoke(ctx, Mixer_FindEntities_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_FindEntities_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -695,8 +761,9 @@ func (c *mixerClient) FindEntities(ctx context.Context, in *proto.FindEntitiesRe } func (c *mixerClient) BulkFindEntities(ctx context.Context, in *proto.BulkFindEntitiesRequest, opts ...grpc.CallOption) (*proto.BulkFindEntitiesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.BulkFindEntitiesResponse) - err := c.cc.Invoke(ctx, Mixer_BulkFindEntities_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_BulkFindEntities_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -704,8 +771,9 @@ func (c *mixerClient) BulkFindEntities(ctx context.Context, in *proto.BulkFindEn } func (c *mixerClient) RecognizePlaces(ctx context.Context, in *proto.RecognizePlacesRequest, opts ...grpc.CallOption) (*proto.RecognizePlacesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.RecognizePlacesResponse) - err := c.cc.Invoke(ctx, Mixer_RecognizePlaces_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_RecognizePlaces_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -713,8 +781,9 @@ func (c *mixerClient) RecognizePlaces(ctx context.Context, in *proto.RecognizePl } func (c *mixerClient) RecognizeEntities(ctx context.Context, in *proto.RecognizeEntitiesRequest, opts ...grpc.CallOption) (*proto.RecognizeEntitiesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.RecognizeEntitiesResponse) - err := c.cc.Invoke(ctx, Mixer_RecognizeEntities_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_RecognizeEntities_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -722,8 +791,9 @@ func (c *mixerClient) RecognizeEntities(ctx context.Context, in *proto.Recognize } func (c *mixerClient) GetImportTableData(ctx context.Context, in *proto.GetImportTableDataRequest, opts ...grpc.CallOption) (*proto.GetImportTableDataResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(proto.GetImportTableDataResponse) - err := c.cc.Invoke(ctx, Mixer_GetImportTableData_FullMethodName, in, out, opts...) + err := c.cc.Invoke(ctx, Mixer_GetImportTableData_FullMethodName, in, out, cOpts...) if err != nil { return nil, err } @@ -732,12 +802,13 @@ func (c *mixerClient) GetImportTableData(ctx context.Context, in *proto.GetImpor // MixerServer is the server API for Mixer service. // All implementations should embed UnimplementedMixerServer -// for forward compatibility +// for forward compatibility. type MixerServer interface { V3Node(context.Context, *v2.NodeRequest) (*v2.NodeResponse, error) V3Observation(context.Context, *v2.ObservationRequest) (*v2.ObservationResponse, error) V3NodeSearch(context.Context, *v2.NodeSearchRequest) (*v2.NodeSearchResponse, error) V3Resolve(context.Context, *v2.ResolveRequest) (*v2.ResolveResponse, error) + V3Event(context.Context, *v2.EventRequest) (*v2.EventResponse, error) V3Sparql(context.Context, *proto.SparqlRequest) (*proto.QueryResponse, error) V2Sparql(context.Context, *proto.SparqlRequest) (*proto.QueryResponse, error) V2Resolve(context.Context, *v2.ResolveRequest) (*v2.ResolveResponse, error) @@ -827,184 +898,191 @@ type MixerServer interface { GetImportTableData(context.Context, *proto.GetImportTableDataRequest) (*proto.GetImportTableDataResponse, error) } -// UnimplementedMixerServer should be embedded to have forward compatible implementations. -type UnimplementedMixerServer struct { -} +// UnimplementedMixerServer should be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedMixerServer struct{} func (UnimplementedMixerServer) V3Node(context.Context, *v2.NodeRequest) (*v2.NodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V3Node not implemented") + return nil, status.Error(codes.Unimplemented, "method V3Node not implemented") } func (UnimplementedMixerServer) V3Observation(context.Context, *v2.ObservationRequest) (*v2.ObservationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V3Observation not implemented") + return nil, status.Error(codes.Unimplemented, "method V3Observation not implemented") } func (UnimplementedMixerServer) V3NodeSearch(context.Context, *v2.NodeSearchRequest) (*v2.NodeSearchResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V3NodeSearch not implemented") + return nil, status.Error(codes.Unimplemented, "method V3NodeSearch not implemented") } func (UnimplementedMixerServer) V3Resolve(context.Context, *v2.ResolveRequest) (*v2.ResolveResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V3Resolve not implemented") + return nil, status.Error(codes.Unimplemented, "method V3Resolve not implemented") +} +func (UnimplementedMixerServer) V3Event(context.Context, *v2.EventRequest) (*v2.EventResponse, error) { + return nil, status.Error(codes.Unimplemented, "method V3Event not implemented") } func (UnimplementedMixerServer) V3Sparql(context.Context, *proto.SparqlRequest) (*proto.QueryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V3Sparql not implemented") + return nil, status.Error(codes.Unimplemented, "method V3Sparql not implemented") } func (UnimplementedMixerServer) V2Sparql(context.Context, *proto.SparqlRequest) (*proto.QueryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V2Sparql not implemented") + return nil, status.Error(codes.Unimplemented, "method V2Sparql not implemented") } func (UnimplementedMixerServer) V2Resolve(context.Context, *v2.ResolveRequest) (*v2.ResolveResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V2Resolve not implemented") + return nil, status.Error(codes.Unimplemented, "method V2Resolve not implemented") } func (UnimplementedMixerServer) V2Node(context.Context, *v2.NodeRequest) (*v2.NodeResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V2Node not implemented") + return nil, status.Error(codes.Unimplemented, "method V2Node not implemented") } func (UnimplementedMixerServer) V2Event(context.Context, *v2.EventRequest) (*v2.EventResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V2Event not implemented") + return nil, status.Error(codes.Unimplemented, "method V2Event not implemented") } func (UnimplementedMixerServer) V2Observation(context.Context, *v2.ObservationRequest) (*v2.ObservationResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method V2Observation not implemented") + return nil, status.Error(codes.Unimplemented, "method V2Observation not implemented") } func (UnimplementedMixerServer) FilterStatVarsByEntity(context.Context, *proto.FilterStatVarsByEntityRequest) (*proto.FilterStatVarsByEntityResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FilterStatVarsByEntity not implemented") + return nil, status.Error(codes.Unimplemented, "method FilterStatVarsByEntity not implemented") } func (UnimplementedMixerServer) Query(context.Context, *proto.QueryRequest) (*proto.QueryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Query not implemented") + return nil, status.Error(codes.Unimplemented, "method Query not implemented") } func (UnimplementedMixerServer) GetPropertyLabels(context.Context, *proto.GetPropertyLabelsRequest) (*proto.PayloadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPropertyLabels not implemented") + return nil, status.Error(codes.Unimplemented, "method GetPropertyLabels not implemented") } func (UnimplementedMixerServer) GetPropertyValues(context.Context, *proto.GetPropertyValuesRequest) (*proto.PayloadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPropertyValues not implemented") + return nil, status.Error(codes.Unimplemented, "method GetPropertyValues not implemented") } func (UnimplementedMixerServer) GetTriples(context.Context, *proto.GetTriplesRequest) (*proto.PayloadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetTriples not implemented") + return nil, status.Error(codes.Unimplemented, "method GetTriples not implemented") } func (UnimplementedMixerServer) GetPlacesIn(context.Context, *proto.GetPlacesInRequest) (*proto.GetPlacesInResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPlacesIn not implemented") + return nil, status.Error(codes.Unimplemented, "method GetPlacesIn not implemented") } func (UnimplementedMixerServer) GetStats(context.Context, *proto.GetStatsRequest) (*proto.GetStatsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetStats not implemented") + return nil, status.Error(codes.Unimplemented, "method GetStats not implemented") } func (UnimplementedMixerServer) GetStatValue(context.Context, *proto.GetStatValueRequest) (*proto.GetStatValueResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetStatValue not implemented") + return nil, status.Error(codes.Unimplemented, "method GetStatValue not implemented") } func (UnimplementedMixerServer) GetStatSeries(context.Context, *proto.GetStatSeriesRequest) (*proto.GetStatSeriesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetStatSeries not implemented") + return nil, status.Error(codes.Unimplemented, "method GetStatSeries not implemented") } func (UnimplementedMixerServer) GetStatAll(context.Context, *proto.GetStatAllRequest) (*proto.GetStatAllResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetStatAll not implemented") + return nil, status.Error(codes.Unimplemented, "method GetStatAll not implemented") } func (UnimplementedMixerServer) GetLocationsRankings(context.Context, *proto.GetLocationsRankingsRequest) (*proto.GetLocationsRankingsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetLocationsRankings not implemented") + return nil, status.Error(codes.Unimplemented, "method GetLocationsRankings not implemented") } func (UnimplementedMixerServer) GetRelatedLocations(context.Context, *proto.GetRelatedLocationsRequest) (*proto.GetRelatedLocationsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRelatedLocations not implemented") + return nil, status.Error(codes.Unimplemented, "method GetRelatedLocations not implemented") } func (UnimplementedMixerServer) GetVersion(context.Context, *proto.GetVersionRequest) (*proto.GetVersionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetVersion not implemented") + return nil, status.Error(codes.Unimplemented, "method GetVersion not implemented") } func (UnimplementedMixerServer) GetPlaceStatVars(context.Context, *proto.GetPlaceStatVarsRequest) (*proto.GetPlaceStatVarsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPlaceStatVars not implemented") + return nil, status.Error(codes.Unimplemented, "method GetPlaceStatVars not implemented") } func (UnimplementedMixerServer) GetEntityStatVarsUnionV1(context.Context, *proto.GetEntityStatVarsUnionRequest) (*proto.GetEntityStatVarsUnionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetEntityStatVarsUnionV1 not implemented") + return nil, status.Error(codes.Unimplemented, "method GetEntityStatVarsUnionV1 not implemented") } func (UnimplementedMixerServer) QueryV1(context.Context, *proto.QueryRequest) (*proto.QueryResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method QueryV1 not implemented") + return nil, status.Error(codes.Unimplemented, "method QueryV1 not implemented") } func (UnimplementedMixerServer) Properties(context.Context, *v1.PropertiesRequest) (*v1.PropertiesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Properties not implemented") + return nil, status.Error(codes.Unimplemented, "method Properties not implemented") } func (UnimplementedMixerServer) BulkProperties(context.Context, *v1.BulkPropertiesRequest) (*v1.BulkPropertiesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkProperties not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkProperties not implemented") } func (UnimplementedMixerServer) PropertyValues(context.Context, *v1.PropertyValuesRequest) (*v1.PropertyValuesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PropertyValues not implemented") + return nil, status.Error(codes.Unimplemented, "method PropertyValues not implemented") } func (UnimplementedMixerServer) LinkedPropertyValues(context.Context, *v1.LinkedPropertyValuesRequest) (*v1.PropertyValuesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method LinkedPropertyValues not implemented") + return nil, status.Error(codes.Unimplemented, "method LinkedPropertyValues not implemented") } func (UnimplementedMixerServer) BulkPropertyValues(context.Context, *v1.BulkPropertyValuesRequest) (*v1.BulkPropertyValuesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkPropertyValues not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkPropertyValues not implemented") } func (UnimplementedMixerServer) BulkLinkedPropertyValues(context.Context, *v1.BulkLinkedPropertyValuesRequest) (*v1.BulkPropertyValuesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkLinkedPropertyValues not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkLinkedPropertyValues not implemented") } func (UnimplementedMixerServer) Triples(context.Context, *v1.TriplesRequest) (*v1.TriplesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Triples not implemented") + return nil, status.Error(codes.Unimplemented, "method Triples not implemented") } func (UnimplementedMixerServer) BulkTriples(context.Context, *v1.BulkTriplesRequest) (*v1.BulkTriplesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkTriples not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkTriples not implemented") } func (UnimplementedMixerServer) Variables(context.Context, *v1.VariablesRequest) (*v1.VariablesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Variables not implemented") + return nil, status.Error(codes.Unimplemented, "method Variables not implemented") } func (UnimplementedMixerServer) PlaceInfo(context.Context, *v1.PlaceInfoRequest) (*v1.PlaceInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PlaceInfo not implemented") + return nil, status.Error(codes.Unimplemented, "method PlaceInfo not implemented") } func (UnimplementedMixerServer) BulkPlaceInfo(context.Context, *v1.BulkPlaceInfoRequest) (*v1.BulkPlaceInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkPlaceInfo not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkPlaceInfo not implemented") } func (UnimplementedMixerServer) VariableInfo(context.Context, *v1.VariableInfoRequest) (*v1.VariableInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VariableInfo not implemented") + return nil, status.Error(codes.Unimplemented, "method VariableInfo not implemented") } func (UnimplementedMixerServer) BulkVariableInfo(context.Context, *v1.BulkVariableInfoRequest) (*v1.BulkVariableInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkVariableInfo not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkVariableInfo not implemented") } func (UnimplementedMixerServer) VariableGroupInfo(context.Context, *v1.VariableGroupInfoRequest) (*v1.VariableGroupInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VariableGroupInfo not implemented") + return nil, status.Error(codes.Unimplemented, "method VariableGroupInfo not implemented") } func (UnimplementedMixerServer) BulkVariableGroupInfo(context.Context, *v1.BulkVariableGroupInfoRequest) (*v1.BulkVariableGroupInfoResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkVariableGroupInfo not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkVariableGroupInfo not implemented") } func (UnimplementedMixerServer) ObservationsPoint(context.Context, *v1.ObservationsPointRequest) (*proto.PointStat, error) { - return nil, status.Errorf(codes.Unimplemented, "method ObservationsPoint not implemented") + return nil, status.Error(codes.Unimplemented, "method ObservationsPoint not implemented") } func (UnimplementedMixerServer) BulkObservationsPoint(context.Context, *v1.BulkObservationsPointRequest) (*v1.BulkObservationsPointResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkObservationsPoint not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkObservationsPoint not implemented") } func (UnimplementedMixerServer) ObservationsSeries(context.Context, *v1.ObservationsSeriesRequest) (*v1.ObservationsSeriesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ObservationsSeries not implemented") + return nil, status.Error(codes.Unimplemented, "method ObservationsSeries not implemented") } func (UnimplementedMixerServer) BulkObservationsSeries(context.Context, *v1.BulkObservationsSeriesRequest) (*v1.BulkObservationsSeriesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkObservationsSeries not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkObservationsSeries not implemented") } func (UnimplementedMixerServer) BulkObservationsSeriesLinked(context.Context, *v1.BulkObservationsSeriesLinkedRequest) (*v1.BulkObservationsSeriesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkObservationsSeriesLinked not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkObservationsSeriesLinked not implemented") } func (UnimplementedMixerServer) BulkObservationDatesLinked(context.Context, *v1.BulkObservationDatesLinkedRequest) (*v1.BulkObservationDatesLinkedResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkObservationDatesLinked not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkObservationDatesLinked not implemented") } func (UnimplementedMixerServer) PlacePage(context.Context, *v1.PlacePageRequest) (*v1.PlacePageResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method PlacePage not implemented") + return nil, status.Error(codes.Unimplemented, "method PlacePage not implemented") } func (UnimplementedMixerServer) VariableAncestors(context.Context, *v1.VariableAncestorsRequest) (*v1.VariableAncestorsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method VariableAncestors not implemented") + return nil, status.Error(codes.Unimplemented, "method VariableAncestors not implemented") } func (UnimplementedMixerServer) SearchStatVar(context.Context, *proto.SearchStatVarRequest) (*proto.SearchStatVarResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method SearchStatVar not implemented") + return nil, status.Error(codes.Unimplemented, "method SearchStatVar not implemented") } func (UnimplementedMixerServer) ResolveEntities(context.Context, *proto.ResolveEntitiesRequest) (*proto.ResolveEntitiesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResolveEntities not implemented") + return nil, status.Error(codes.Unimplemented, "method ResolveEntities not implemented") } func (UnimplementedMixerServer) ResolveCoordinates(context.Context, *proto.ResolveCoordinatesRequest) (*proto.ResolveCoordinatesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResolveCoordinates not implemented") + return nil, status.Error(codes.Unimplemented, "method ResolveCoordinates not implemented") } func (UnimplementedMixerServer) ResolveIds(context.Context, *proto.ResolveIdsRequest) (*proto.ResolveIdsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ResolveIds not implemented") + return nil, status.Error(codes.Unimplemented, "method ResolveIds not implemented") } func (UnimplementedMixerServer) FindEntities(context.Context, *proto.FindEntitiesRequest) (*proto.FindEntitiesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method FindEntities not implemented") + return nil, status.Error(codes.Unimplemented, "method FindEntities not implemented") } func (UnimplementedMixerServer) BulkFindEntities(context.Context, *proto.BulkFindEntitiesRequest) (*proto.BulkFindEntitiesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkFindEntities not implemented") + return nil, status.Error(codes.Unimplemented, "method BulkFindEntities not implemented") } func (UnimplementedMixerServer) RecognizePlaces(context.Context, *proto.RecognizePlacesRequest) (*proto.RecognizePlacesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RecognizePlaces not implemented") + return nil, status.Error(codes.Unimplemented, "method RecognizePlaces not implemented") } func (UnimplementedMixerServer) RecognizeEntities(context.Context, *proto.RecognizeEntitiesRequest) (*proto.RecognizeEntitiesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RecognizeEntities not implemented") + return nil, status.Error(codes.Unimplemented, "method RecognizeEntities not implemented") } func (UnimplementedMixerServer) GetImportTableData(context.Context, *proto.GetImportTableDataRequest) (*proto.GetImportTableDataResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetImportTableData not implemented") + return nil, status.Error(codes.Unimplemented, "method GetImportTableData not implemented") } +func (UnimplementedMixerServer) testEmbeddedByValue() {} // UnsafeMixerServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to MixerServer will @@ -1014,6 +1092,13 @@ type UnsafeMixerServer interface { } func RegisterMixerServer(s grpc.ServiceRegistrar, srv MixerServer) { + // If the following call panics, it indicates UnimplementedMixerServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } s.RegisterService(&Mixer_ServiceDesc, srv) } @@ -1089,6 +1174,24 @@ func _Mixer_V3Resolve_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _Mixer_V3Event_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(v2.EventRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MixerServer).V3Event(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Mixer_V3Event_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MixerServer).V3Event(ctx, req.(*v2.EventRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Mixer_V3Sparql_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(proto.SparqlRequest) if err := dec(in); err != nil { @@ -2084,6 +2187,10 @@ var Mixer_ServiceDesc = grpc.ServiceDesc{ MethodName: "V3Resolve", Handler: _Mixer_V3Resolve_Handler, }, + { + MethodName: "V3Event", + Handler: _Mixer_V3Event_Handler, + }, { MethodName: "V3Sparql", Handler: _Mixer_V3Sparql_Handler, diff --git a/internal/server/datasource/datasource.go b/internal/server/datasource/datasource.go index 454e9beda..1d9281bca 100644 --- a/internal/server/datasource/datasource.go +++ b/internal/server/datasource/datasource.go @@ -40,4 +40,5 @@ type DataSource interface { NodeSearch(context.Context, *pbv2.NodeSearchRequest) (*pbv2.NodeSearchResponse, error) Resolve(context.Context, *pbv2.ResolveRequest) (*pbv2.ResolveResponse, error) Sparql(context.Context, *pb.SparqlRequest) (*pb.QueryResponse, error) + Event(context.Context, *pbv2.EventRequest) (*pbv2.EventResponse, error) } diff --git a/internal/server/datasources/datasources.go b/internal/server/datasources/datasources.go index 484f3f877..ad6865505 100644 --- a/internal/server/datasources/datasources.go +++ b/internal/server/datasources/datasources.go @@ -134,3 +134,14 @@ func (ds *DataSources) Sparql(ctx context.Context, in *pb.SparqlRequest) (*pb.Qu }, ) } + +func (ds *DataSources) Event(ctx context.Context, in *pbv2.EventRequest) (*pbv2.EventResponse, error) { + return fetchAndMerge(ctx, ds.sources, in, + func(c context.Context, s datasource.DataSource, r *pbv2.EventRequest) (*pbv2.EventResponse, error) { + return s.Event(c, r) + }, + func(all []*pbv2.EventResponse) (*pbv2.EventResponse, error) { + return merger.MergeMultiEvent(all), nil + }, + ) +} diff --git a/internal/server/dispatcher/dispatcher.go b/internal/server/dispatcher/dispatcher.go index 1840298f7..3f8ae55ec 100644 --- a/internal/server/dispatcher/dispatcher.go +++ b/internal/server/dispatcher/dispatcher.go @@ -34,6 +34,7 @@ const ( TypeObservation RequestType = "Observation" TypeResolve RequestType = "Resolve" TypeSparql RequestType = "Sparql" + TypeEvent RequestType = "Event" ) // RequestContext holds the context for a given request. @@ -196,6 +197,19 @@ func (dispatcher *Dispatcher) Sparql(ctx context.Context, in *pb.SparqlRequest) return response.(*pb.QueryResponse), nil } +func (dispatcher *Dispatcher) Event(ctx context.Context, in *pbv2.EventRequest) (*pbv2.EventResponse, error) { + requestContext := newRequestContext(ctx, in, TypeEvent) + + response, err := dispatcher.handle(requestContext, func(ctx context.Context, request proto.Message) (proto.Message, error) { + return dispatcher.sources.Event(ctx, request.(*pbv2.EventRequest)) + }) + + if err != nil { + return nil, err + } + return response.(*pbv2.EventResponse), nil +} + func newRequestContext(ctx context.Context, request proto.Message, requestType RequestType) *RequestContext { return &RequestContext{ Context: ctx, diff --git a/internal/server/handler_v3.go b/internal/server/handler_v3.go index b91c54bb1..b776a657a 100644 --- a/internal/server/handler_v3.go +++ b/internal/server/handler_v3.go @@ -51,6 +51,13 @@ func (s *Server) V3Resolve(ctx context.Context, in *pbv2.ResolveRequest) ( return s.dispatcher.Resolve(ctx, in) } +// V3Event implements API for mixer.V3Event. +func (s *Server) V3Event(ctx context.Context, in *pbv2.EventRequest) ( + *pbv2.EventResponse, error, +) { + return s.dispatcher.Event(ctx, in) +} + // V3Sparql implements API for mixer.V3Sparql. func (s *Server) V3Sparql(ctx context.Context, in *pb.SparqlRequest) ( *pb.QueryResponse, error, diff --git a/internal/server/redis/processor.go b/internal/server/redis/processor.go index 199535161..bd7d497ca 100644 --- a/internal/server/redis/processor.go +++ b/internal/server/redis/processor.go @@ -85,6 +85,8 @@ func newEmptyResponse(requestType dispatcher.RequestType) (proto.Message, error) return &pbv2.ResolveResponse{}, nil case dispatcher.TypeSparql: return &pb.QueryResponse{}, nil + case dispatcher.TypeEvent: + return &pbv2.EventResponse{}, nil default: return nil, fmt.Errorf("unknown request type for caching: %v", requestType) } diff --git a/internal/server/remote/client.go b/internal/server/remote/client.go index e071be881..7db3da276 100644 --- a/internal/server/remote/client.go +++ b/internal/server/remote/client.go @@ -100,3 +100,12 @@ func (rc *RemoteClient) Sparql(req *pb.SparqlRequest) (*pb.QueryResponse, error) } return resp, nil } + +func (rc *RemoteClient) Event(req *pbv2.EventRequest) (*pbv2.EventResponse, error) { + resp := &pbv2.EventResponse{} + err := util.FetchRemote(rc.metadata, rc.httpClient, "/v2/event", req, resp) + if err != nil { + return nil, err + } + return resp, nil +} diff --git a/internal/server/remote/datasource.go b/internal/server/remote/datasource.go index 89b669432..69f4127e3 100644 --- a/internal/server/remote/datasource.go +++ b/internal/server/remote/datasource.go @@ -62,3 +62,7 @@ func (rds *RemoteDataSource) Resolve(ctx context.Context, req *pbv2.ResolveReque func (rds *RemoteDataSource) Sparql(ctx context.Context, req *pb.SparqlRequest) (*pb.QueryResponse, error) { return rds.client.Sparql(req) } + +func (rds *RemoteDataSource) Event(ctx context.Context, req *pbv2.EventRequest) (*pbv2.EventResponse, error) { + return rds.client.Event(req) +} diff --git a/internal/server/spanner/client.go b/internal/server/spanner/client.go index d5bfc92d3..35600db4d 100644 --- a/internal/server/spanner/client.go +++ b/internal/server/spanner/client.go @@ -37,6 +37,7 @@ type SpannerClient interface { GetObservationsContainedInPlace(ctx context.Context, variables []string, containedInPlace *v2.ContainedInPlace) ([]*Observation, error) SearchNodes(ctx context.Context, query string, types []string) ([]*SearchNode, error) ResolveByID(ctx context.Context, nodes []string, in, out string) (map[string][]string, error) + GetEventCollectionDate(ctx context.Context, placeID, eventType string) ([]string, error) Sparql(ctx context.Context, nodes []types.Node, queries []*types.Query, opts *types.QueryOptions) ([][]string, error) Id() string Start() diff --git a/internal/server/spanner/datasource.go b/internal/server/spanner/datasource.go index 4d45af525..4cb5d84af 100644 --- a/internal/server/spanner/datasource.go +++ b/internal/server/spanner/datasource.go @@ -20,10 +20,11 @@ import ( "log/slog" "sort" - "github.com/datacommonsorg/mixer/internal/server/datasource" internalmaps "github.com/datacommonsorg/mixer/internal/maps" pb "github.com/datacommonsorg/mixer/internal/proto" + pbv1 "github.com/datacommonsorg/mixer/internal/proto/v1" pbv2 "github.com/datacommonsorg/mixer/internal/proto/v2" + "github.com/datacommonsorg/mixer/internal/server/datasource" "github.com/datacommonsorg/mixer/internal/server/recon" v2 "github.com/datacommonsorg/mixer/internal/server/v2" v3 "github.com/datacommonsorg/mixer/internal/server/v3" @@ -330,3 +331,59 @@ func (sds *SpannerDataSource) fetchTypes( return dcidToTypeSet, nil } +type eventCollectionDateRequest struct { + placeID string + eventType string +} + +// Event retrieves event data from Spanner. +func (sds *SpannerDataSource) Event(ctx context.Context, req *pbv2.EventRequest) (*pbv2.EventResponse, error) { + arcs, err := v2.ParseProperty(req.GetProperty()) + if err != nil { + return nil, err + } + + if parsedReq := parseEventCollectionDate(req, arcs); parsedReq != nil { + return sds.handleEventCollectionDate(ctx, parsedReq) + } + + return nil, status.Errorf(codes.InvalidArgument, "unsupported event request property: %s", req.GetProperty()) +} + +// parseEventCollectionDate checks if the arcs match the pattern for EventCollectionDate and returns the parsed elements. +// Pattern: <-location{typeOf:EventType}->date +func parseEventCollectionDate(req *pbv2.EventRequest, arcs []*v2.Arc) *eventCollectionDateRequest { + if len(arcs) != 2 { + return nil + } + // arcs[0] should be <-location + // arcs[1] should be ->date + if arcs[0].Out || !arcs[1].Out { + return nil + } + if arcs[0].SingleProp != "location" || arcs[1].SingleProp != "date" { + return nil + } + typeOfs, ok := arcs[0].Filter["typeOf"] + if !ok || len(typeOfs) == 0 { + return nil + } + return &eventCollectionDateRequest{ + placeID: req.GetNode(), + eventType: typeOfs[0], + } +} + +// handleEventCollectionDate handles EventCollectionDate requests. +func (sds *SpannerDataSource) handleEventCollectionDate(ctx context.Context, req *eventCollectionDateRequest) (*pbv2.EventResponse, error) { + dates, err := sds.client.GetEventCollectionDate(ctx, req.placeID, req.eventType) + if err != nil { + return nil, fmt.Errorf("error getting event collection date: %v", err) + } + + return &pbv2.EventResponse{ + EventCollectionDate: &pbv1.EventCollectionDate{ + Dates: dates, + }, + }, nil +} diff --git a/internal/server/spanner/golden/datasource/event_collection_date_lbr.json b/internal/server/spanner/golden/datasource/event_collection_date_lbr.json new file mode 100644 index 000000000..dd32f0f4b --- /dev/null +++ b/internal/server/spanner/golden/datasource/event_collection_date_lbr.json @@ -0,0 +1,161 @@ +{ + "eventCollectionDate": { + "dates": [ + "2012-01", + "2012-02", + "2012-03", + "2012-04", + "2012-05", + "2012-06", + "2012-07", + "2012-08", + "2012-10", + "2012-11", + "2012-12", + "2013-01", + "2013-02", + "2013-03", + "2013-04", + "2013-05", + "2013-06", + "2013-07", + "2013-08", + "2013-09", + "2013-10", + "2013-11", + "2013-12", + "2014-01", + "2014-02", + "2014-03", + "2014-04", + "2014-05", + "2014-06", + "2014-07", + "2014-08", + "2014-09", + "2014-10", + "2014-11", + "2014-12", + "2015-01", + "2015-02", + "2015-03", + "2015-04", + "2015-05", + "2015-06", + "2015-07", + "2015-08", + "2015-09", + "2015-10", + "2015-11", + "2015-12", + "2016-01", + "2016-02", + "2016-03", + "2016-04", + "2016-05", + "2016-06", + "2016-07", + "2016-08", + "2016-09", + "2016-10", + "2016-11", + "2016-12", + "2017-01", + "2017-02", + "2017-03", + "2017-04", + "2017-05", + "2017-06", + "2017-07", + "2017-08", + "2017-09", + "2017-10", + "2017-11", + "2017-12", + "2018-01", + "2018-02", + "2018-03", + "2018-04", + "2018-05", + "2018-06", + "2018-07", + "2018-08", + "2018-09", + "2018-10", + "2018-11", + "2018-12", + "2019-01", + "2019-02", + "2019-03", + "2019-04", + "2019-05", + "2019-06", + "2019-07", + "2019-08", + "2019-10", + "2019-11", + "2019-12", + "2020-01", + "2020-02", + "2020-03", + "2020-04", + "2020-05", + "2020-06", + "2020-07", + "2020-08", + "2020-09", + "2020-10", + "2020-11", + "2020-12", + "2021-01", + "2021-02", + "2021-03", + "2021-04", + "2021-05", + "2021-06", + "2021-07", + "2021-08", + "2021-09", + "2021-10", + "2021-11", + "2021-12", + "2022-01", + "2022-02", + "2022-03", + "2022-04", + "2022-05", + "2022-06", + "2022-07", + "2022-08", + "2022-09", + "2022-10", + "2022-11", + "2022-12", + "2023-01", + "2023-02", + "2023-03", + "2023-04", + "2023-05", + "2023-06", + "2023-07", + "2023-08", + "2023-09", + "2023-10", + "2023-11", + "2024-01", + "2024-02", + "2024-03", + "2024-04", + "2024-05", + "2024-06", + "2024-07", + "2024-08", + "2024-09", + "2024-10", + "2024-11", + "2024-12", + "2025-01", + "2025-02" + ] + } +} \ No newline at end of file diff --git a/internal/server/spanner/golden/datasource_test.go b/internal/server/spanner/golden/datasource_test.go index 165b9800e..e8c1d0fe3 100644 --- a/internal/server/spanner/golden/datasource_test.go +++ b/internal/server/spanner/golden/datasource_test.go @@ -20,13 +20,13 @@ import ( "runtime" "testing" + "github.com/datacommonsorg/mixer/internal/maps" pb "github.com/datacommonsorg/mixer/internal/proto" pbv2 "github.com/datacommonsorg/mixer/internal/proto/v2" "github.com/datacommonsorg/mixer/internal/server/datasources" "github.com/datacommonsorg/mixer/internal/server/spanner" v2 "github.com/datacommonsorg/mixer/internal/server/v2" "github.com/datacommonsorg/mixer/internal/store/files" - "github.com/datacommonsorg/mixer/internal/maps" "github.com/datacommonsorg/mixer/internal/translator/types" "github.com/datacommonsorg/mixer/test" "github.com/google/go-cmp/cmp" @@ -61,6 +61,9 @@ func (m *mockSpannerClient) ResolveByID(ctx context.Context, nodes []string, in, func (m *mockSpannerClient) Sparql(ctx context.Context, nodes []types.Node, queries []*types.Query, opts *types.QueryOptions) ([][]string, error) { return nil, nil } +func (m *mockSpannerClient) GetEventCollectionDate(ctx context.Context, placeID, eventType string) ([]string, error) { + return nil, nil +} func (m *mockSpannerClient) Id() string { return "mock" } func (m *mockSpannerClient) Start() {} func (m *mockSpannerClient) Close() {} @@ -265,3 +268,51 @@ func TestSpannerSparql(t *testing.T) { } } } + +func TestSpannerEvent(t *testing.T) { + client := test.NewSpannerClient() + if client == nil { + return + } + ds := spanner.NewSpannerDataSource(client, nil, nil) + + t.Parallel() + ctx := context.Background() + _, filename, _, _ := runtime.Caller(0) + goldenDir := path.Join(path.Dir(filename), "datasource") + + for _, c := range []struct { + req *pbv2.EventRequest + goldenFile string + }{ + { + req: &pbv2.EventRequest{ + Node: "country/LBR", + Property: "<-location{typeOf:FireEvent}->date", + }, + goldenFile: "event_collection_date_lbr.json", + }, + } { + got, err := ds.Event(ctx, c.req) + if err != nil { + t.Fatalf("Event error (%v): %v", c.goldenFile, err) + } + + if test.GenerateGolden { + test.UpdateProtoGolden(got, goldenDir, c.goldenFile) + return + } + + var want pbv2.EventResponse + if err = test.ReadJSON(goldenDir, c.goldenFile, &want); err != nil { + t.Fatalf("ReadJSON error (%v): %v", c.goldenFile, err) + } + + cmpOpts := cmp.Options{ + protocmp.Transform(), + } + if diff := cmp.Diff(got, &want, cmpOpts); diff != "" { + t.Errorf("%v payload mismatch:\n%v", c.goldenFile, diff) + } + } +} diff --git a/internal/server/spanner/golden/query/get_event_collection_date.json b/internal/server/spanner/golden/query/get_event_collection_date.json new file mode 100644 index 000000000..282bfa2ca --- /dev/null +++ b/internal/server/spanner/golden/query/get_event_collection_date.json @@ -0,0 +1,157 @@ +[ + "2012-01", + "2012-02", + "2012-03", + "2012-04", + "2012-05", + "2012-06", + "2012-07", + "2012-08", + "2012-10", + "2012-11", + "2012-12", + "2013-01", + "2013-02", + "2013-03", + "2013-04", + "2013-05", + "2013-06", + "2013-07", + "2013-08", + "2013-09", + "2013-10", + "2013-11", + "2013-12", + "2014-01", + "2014-02", + "2014-03", + "2014-04", + "2014-05", + "2014-06", + "2014-07", + "2014-08", + "2014-09", + "2014-10", + "2014-11", + "2014-12", + "2015-01", + "2015-02", + "2015-03", + "2015-04", + "2015-05", + "2015-06", + "2015-07", + "2015-08", + "2015-09", + "2015-10", + "2015-11", + "2015-12", + "2016-01", + "2016-02", + "2016-03", + "2016-04", + "2016-05", + "2016-06", + "2016-07", + "2016-08", + "2016-09", + "2016-10", + "2016-11", + "2016-12", + "2017-01", + "2017-02", + "2017-03", + "2017-04", + "2017-05", + "2017-06", + "2017-07", + "2017-08", + "2017-09", + "2017-10", + "2017-11", + "2017-12", + "2018-01", + "2018-02", + "2018-03", + "2018-04", + "2018-05", + "2018-06", + "2018-07", + "2018-08", + "2018-09", + "2018-10", + "2018-11", + "2018-12", + "2019-01", + "2019-02", + "2019-03", + "2019-04", + "2019-05", + "2019-06", + "2019-07", + "2019-08", + "2019-10", + "2019-11", + "2019-12", + "2020-01", + "2020-02", + "2020-03", + "2020-04", + "2020-05", + "2020-06", + "2020-07", + "2020-08", + "2020-09", + "2020-10", + "2020-11", + "2020-12", + "2021-01", + "2021-02", + "2021-03", + "2021-04", + "2021-05", + "2021-06", + "2021-07", + "2021-08", + "2021-09", + "2021-10", + "2021-11", + "2021-12", + "2022-01", + "2022-02", + "2022-03", + "2022-04", + "2022-05", + "2022-06", + "2022-07", + "2022-08", + "2022-09", + "2022-10", + "2022-11", + "2022-12", + "2023-01", + "2023-02", + "2023-03", + "2023-04", + "2023-05", + "2023-06", + "2023-07", + "2023-08", + "2023-09", + "2023-10", + "2023-11", + "2024-01", + "2024-02", + "2024-03", + "2024-04", + "2024-05", + "2024-06", + "2024-07", + "2024-08", + "2024-09", + "2024-10", + "2024-11", + "2024-12", + "2025-01", + "2025-02" +] \ No newline at end of file diff --git a/internal/server/spanner/golden/query_builder/get_event_collection_date.sql b/internal/server/spanner/golden/query_builder/get_event_collection_date.sql new file mode 100644 index 000000000..1ea7cca4c --- /dev/null +++ b/internal/server/spanner/golden/query_builder/get_event_collection_date.sql @@ -0,0 +1,6 @@ + @{force_join_order=true} + GRAPH DCGraph MATCH (event:Node)-[:Edge {predicate: 'affectedPlace', object_id: 'country/LBR'}]->(), (event)-[:Edge {predicate: 'typeOf', object_id: 'FireEvent'}]->(), (event)-[:Edge {predicate: 'startDate'}]->(dateNode:Node) + RETURN DISTINCT + SUBSTR(dateNode.value, 1, 7) AS month + ORDER BY + month \ No newline at end of file diff --git a/internal/server/spanner/golden/query_builder_test.go b/internal/server/spanner/golden/query_builder_test.go index 0e53a03ce..6f5cbcdb5 100644 --- a/internal/server/spanner/golden/query_builder_test.go +++ b/internal/server/spanner/golden/query_builder_test.go @@ -125,6 +125,18 @@ func TestSparqlQuery(t *testing.T) { } } +func TestGetEventCollectionDateQuery(t *testing.T) { + t.Parallel() + + for _, c := range eventCollectionDateTestCases { + goldenFile := c.golden + ".sql" + + runQueryBuilderGoldenTest(t, goldenFile, func(ctx context.Context) (interface{}, error) { + return spanner.GetEventCollectionDateQuery(c.placeDcid, c.eventType), nil + }) + } +} + // runQueryBuilderGoldenTest is a helper function that performs the golden file validation. func runQueryBuilderGoldenTest(t *testing.T, goldenFile string, fn goldenTestFunc) { t.Helper() diff --git a/internal/server/spanner/golden/query_cases_test.go b/internal/server/spanner/golden/query_cases_test.go index da6782085..e53d50853 100644 --- a/internal/server/spanner/golden/query_cases_test.go +++ b/internal/server/spanner/golden/query_cases_test.go @@ -410,3 +410,15 @@ var sparqlTestCases = []struct { golden: "sparql_dcid_california", }, } + +var eventCollectionDateTestCases = []struct { + placeDcid string + eventType string + golden string +}{ + { + placeDcid: "country/LBR", + eventType: "FireEvent", + golden: "get_event_collection_date", + }, +} diff --git a/internal/server/spanner/golden/query_test.go b/internal/server/spanner/golden/query_test.go index bdcb4530a..fd19ce569 100644 --- a/internal/server/spanner/golden/query_test.go +++ b/internal/server/spanner/golden/query_test.go @@ -190,6 +190,23 @@ func TestSparql(t *testing.T) { } } +func TestGetEventCollectionDate(t *testing.T) { + client := test.NewSpannerClient() + if client == nil { + return + } + + t.Parallel() + + for _, c := range eventCollectionDateTestCases { + goldenFile := c.golden + ".json" + + runQueryGoldenTest(t, goldenFile, func(ctx context.Context) (interface{}, error) { + return client.GetEventCollectionDate(ctx, c.placeDcid, c.eventType) + }) + } +} + // runQueryGoldenTest is a helper function that performs the golden file validation. func runQueryGoldenTest(t *testing.T, goldenFile string, fn goldenTestFunc) { t.Helper() diff --git a/internal/server/spanner/query.go b/internal/server/spanner/query.go index 3c751611e..37426b201 100644 --- a/internal/server/spanner/query.go +++ b/internal/server/spanner/query.go @@ -205,6 +205,23 @@ func (sc *spannerDatabaseClient) ResolveByID(ctx context.Context, nodes []string return nodeToCandidates, nil } +// GetEventCollectionDate retrieves event collection dates from Spanner. +func (sc *spannerDatabaseClient) GetEventCollectionDate(ctx context.Context, placeID, eventType string) ([]string, error) { + stmt := GetEventCollectionDateQuery(placeID, eventType) + rows, err := sc.queryDynamic(ctx, *stmt) + if err != nil { + return nil, err + } + + var res []string + for _, row := range rows { + if len(row) > 0 { + res = append(res, row[0]) + } + } + return res, nil +} + func (sc *spannerDatabaseClient) Sparql(ctx context.Context, nodes []types.Node, queries []*types.Query, opts *types.QueryOptions) ([][]string, error) { query, err := SparqlQuery(nodes, queries, opts) if err != nil { diff --git a/internal/server/spanner/query_builder.go b/internal/server/spanner/query_builder.go index d36677620..004cde0a5 100644 --- a/internal/server/spanner/query_builder.go +++ b/internal/server/spanner/query_builder.go @@ -403,3 +403,12 @@ func getParamStatement(param string, inputs []string) (string, interface{}) { } return fmt.Sprintf(statements.getParams, param), inputs } +func GetEventCollectionDateQuery(placeID, eventType string) *spanner.Statement { + return &spanner.Statement{ + SQL: statements.getEventCollectionDate, + Params: map[string]interface{}{ + "placeID": placeID, + "eventType": eventType, + }, + } +} diff --git a/internal/server/spanner/statements.go b/internal/server/spanner/statements.go index cb4a10e06..fc8ed90bb 100644 --- a/internal/server/spanner/statements.go +++ b/internal/server/spanner/statements.go @@ -85,6 +85,8 @@ var statements = struct { nodeFilter string // Generic triple pattern. triple string + // Fetch event dates for a given type and location. + getEventCollectionDate string }{ getCompletionTimestamp: ` SELECT CompletionTimestamp @@ -292,4 +294,10 @@ var statements = struct { WHERE %[1]s.subject_id IN UNNEST(@%[1]s)`, triple: `(%[1]s:Node%[2]s)-[:Edge {predicate: @predicate%[3]d}]->(%[4]s:Node%[5]s)`, + getEventCollectionDate: ` @{force_join_order=true} + GRAPH DCGraph MATCH (event:Node)-[:Edge {predicate: 'affectedPlace', object_id: @placeID}]->(), (event)-[:Edge {predicate: 'typeOf', object_id: @eventType}]->(), (event)-[:Edge {predicate: 'startDate'}]->(dateNode:Node) + RETURN DISTINCT + SUBSTR(dateNode.value, 1, 7) AS month + ORDER BY + month`, } diff --git a/internal/sqldb/datasource.go b/internal/sqldb/datasource.go index 14297bf97..4fece4b71 100644 --- a/internal/sqldb/datasource.go +++ b/internal/sqldb/datasource.go @@ -121,3 +121,7 @@ func (sds *SQLDataSource) Resolve(ctx context.Context, req *pbv2.ResolveRequest) func (sds *SQLDataSource) Sparql(ctx context.Context, req *pb.SparqlRequest) (*pb.QueryResponse, error) { return &pb.QueryResponse{}, nil } + +func (sds *SQLDataSource) Event(ctx context.Context, req *pbv2.EventRequest) (*pbv2.EventResponse, error) { + return &pbv2.EventResponse{}, nil +} diff --git a/proto/service/mixer.proto b/proto/service/mixer.proto index 9548cd986..46bcd0b9e 100644 --- a/proto/service/mixer.proto +++ b/proto/service/mixer.proto @@ -81,6 +81,13 @@ service Mixer { }; } + rpc V3Event(datacommons.v2.EventRequest) returns (datacommons.v2.EventResponse) { + option (google.api.http) = { + get : "/v3/event" + additional_bindings : {post : "/v3/event" body : "*"} + }; + } + rpc V3Sparql(SparqlRequest) returns (QueryResponse) { option (google.api.http) = { get : "/v3/sparql"