diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index dafd14e33c8..9452cac5cf4 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -2,13 +2,13 @@ # To learn more about the format of this file, see https://docs.trunk.io/reference/trunk-yaml version: 0.1 cli: - version: 1.24.0 + version: 1.25.0 # Trunk provides extensibility via plugins. (https://docs.trunk.io/plugins) plugins: sources: - id: trunk - ref: v1.7.0 + ref: v1.7.2 uri: https://github.com/trunk-io/plugins # Many linters and tools depend on runtimes - configure them here. (https://docs.trunk.io/runtimes) @@ -26,23 +26,24 @@ lint: - contrib/** - protos/pb/pb.pb.go enabled: - - golangci-lint2@2.1.6 - - trivy@0.63.0 + - svgo@4.0.0 + - golangci-lint2@2.4.0 + - trivy@0.65.0 - actionlint@1.7.7 - - checkov@3.2.445 + - checkov@3.2.467 - dotenv-linter@3.3.0 - git-diff-check - gofmt@1.20.4 - hadolint@2.12.1-beta - markdownlint@0.45.0 - - osv-scanner@2.0.3 + - osv-scanner@2.2.2 - oxipng@9.1.5 - - prettier@3.6.0 - - renovate@41.2.0 - - shellcheck@0.10.0 + - prettier@3.6.2 + - renovate@41.91.3 + - shellcheck@0.11.0 - shfmt@3.6.0 - - tflint@0.58.0 - - trufflehog@3.89.2 + - tflint@0.59.1 + - trufflehog@3.90.5 - yamllint@1.37.1 actions: enabled: diff --git a/dgraph/cmd/alpha/run.go b/dgraph/cmd/alpha/run.go index 2d99908a721..818a41b5275 100644 --- a/dgraph/cmd/alpha/run.go +++ b/dgraph/cmd/alpha/run.go @@ -39,7 +39,6 @@ import ( "github.com/dgraph-io/badger/v4" "github.com/dgraph-io/dgo/v250/protos/api" - apiv2 "github.com/dgraph-io/dgo/v250/protos/api.v2" _ "github.com/dgraph-io/gqlparser/v2/validator/rules" // make gql validator init() all rules "github.com/dgraph-io/ristretto/v2/z" "github.com/hypermodeinc/dgraph/v25/audit" @@ -467,7 +466,6 @@ func serveGRPC(l net.Listener, tlsCfg *tls.Config, closer *z.Closer) { s := grpc.NewServer(opt...) api.RegisterDgraphServer(s, &edgraph.Server{}) - apiv2.RegisterDgraphServer(s, &edgraph.ServerV25{}) hapi.RegisterHealthServer(s, health.NewServer()) worker.RegisterZeroProxyServer(s) diff --git a/dgraph/cmd/dgraphimport/import_client.go b/dgraph/cmd/dgraphimport/import_client.go index 1c6f9dde867..fc56c96cbce 100644 --- a/dgraph/cmd/dgraphimport/import_client.go +++ b/dgraph/cmd/dgraphimport/import_client.go @@ -16,7 +16,7 @@ import ( "github.com/dgraph-io/badger/v4" "github.com/dgraph-io/dgo/v250" - apiv2 "github.com/dgraph-io/dgo/v250/protos/api.v2" + "github.com/dgraph-io/dgo/v250/protos/api" "github.com/dgraph-io/ristretto/v2/z" "github.com/golang/glog" @@ -24,14 +24,14 @@ import ( ) // newClient creates a new import client with the specified endpoint and gRPC options. -func newClient(connectionString string) (apiv2.DgraphClient, error) { +func newClient(connectionString string) (api.DgraphClient, error) { dg, err := dgo.Open(connectionString) if err != nil { return nil, fmt.Errorf("failed to connect to endpoint [%s]: %w", connectionString, err) } glog.Infof("[import] Successfully connected to Dgraph endpoint: %s", connectionString) - return dg.GetAPIv2Client()[0], nil + return dg.GetAPIClients()[0], nil } func Import(ctx context.Context, connectionString string, bulkOutDir string) error { @@ -48,9 +48,9 @@ func Import(ctx context.Context, connectionString string, bulkOutDir string) err } // initiateSnapshotStream initiates a snapshot stream session with the Dgraph server. -func initiateSnapshotStream(ctx context.Context, dc apiv2.DgraphClient) (*apiv2.UpdateExtSnapshotStreamingStateResponse, error) { +func initiateSnapshotStream(ctx context.Context, dc api.DgraphClient) (*api.UpdateExtSnapshotStreamingStateResponse, error) { glog.Info("[import] Initiating external snapshot stream") - req := &apiv2.UpdateExtSnapshotStreamingStateRequest{ + req := &api.UpdateExtSnapshotStreamingStateRequest{ Start: true, } resp, err := dc.UpdateExtSnapshotStreamingState(ctx, req) @@ -65,7 +65,7 @@ func initiateSnapshotStream(ctx context.Context, dc apiv2.DgraphClient) (*apiv2. // streamSnapshot takes a p directory and a set of group IDs and streams the data from the // p directory to the corresponding group IDs. It first scans the provided directory for // subdirectories named with numeric group IDs. -func streamSnapshot(ctx context.Context, dc apiv2.DgraphClient, baseDir string, groups []uint32) error { +func streamSnapshot(ctx context.Context, dc api.DgraphClient, baseDir string, groups []uint32) error { glog.Infof("[import] Starting to stream snapshot from directory: %s", baseDir) errG, errGrpCtx := errgroup.WithContext(ctx) @@ -90,7 +90,7 @@ func streamSnapshot(ctx context.Context, dc apiv2.DgraphClient, baseDir string, // If errors occurs during streaming of the external snapshot, we drop all the data and // go back to ensure a clean slate and the cluster remains in working state. glog.Info("[import] dropping all the data and going back to clean slate") - req := &apiv2.UpdateExtSnapshotStreamingStateRequest{ + req := &api.UpdateExtSnapshotStreamingStateRequest{ Start: false, Finish: true, DropData: true, @@ -104,7 +104,7 @@ func streamSnapshot(ctx context.Context, dc apiv2.DgraphClient, baseDir string, } glog.Info("[import] Completed streaming external snapshot") - req := &apiv2.UpdateExtSnapshotStreamingStateRequest{ + req := &api.UpdateExtSnapshotStreamingStateRequest{ Start: false, Finish: true, DropData: false, @@ -119,7 +119,7 @@ func streamSnapshot(ctx context.Context, dc apiv2.DgraphClient, baseDir string, // streamSnapshotForGroup handles the actual data streaming process for a single group. // It opens the BadgerDB at the specified directory and streams all data to the server. -func streamSnapshotForGroup(ctx context.Context, dc apiv2.DgraphClient, pdir string, groupId uint32) error { +func streamSnapshotForGroup(ctx context.Context, dc api.DgraphClient, pdir string, groupId uint32) error { glog.Infof("Opening stream for group %d from directory %s", groupId, pdir) // Initialize stream with the server @@ -152,7 +152,7 @@ func streamSnapshotForGroup(ctx context.Context, dc apiv2.DgraphClient, pdir str // Send group ID as the first message in the stream glog.Infof("[import] Sending request for streaming external snapshot for group ID [%v]", groupId) - groupReq := &apiv2.StreamExtSnapshotRequest{GroupId: groupId} + groupReq := &api.StreamExtSnapshotRequest{GroupId: groupId} if err := out.Send(groupReq); err != nil { return fmt.Errorf("failed to send request for streaming external snapshot for group ID [%v] to the server: %w", groupId, err) @@ -171,13 +171,13 @@ func streamSnapshotForGroup(ctx context.Context, dc apiv2.DgraphClient, pdir str // streamBadger runs a BadgerDB stream to send key-value pairs to the specified group. // It creates a new stream at the maximum sequence number and sends the data to the specified group. // It also sends a final 'done' signal to mark completion. -func streamBadger(ctx context.Context, ps *badger.DB, out apiv2.Dgraph_StreamExtSnapshotClient, groupId uint32) error { +func streamBadger(ctx context.Context, ps *badger.DB, out api.Dgraph_StreamExtSnapshotClient, groupId uint32) error { stream := ps.NewStreamAt(math.MaxUint64) stream.LogPrefix = "[import] Sending external snapshot to group [" + fmt.Sprintf("%d", groupId) + "]" stream.KeyToList = nil stream.Send = func(buf *z.Buffer) error { - p := &apiv2.StreamPacket{Data: buf.Bytes()} - if err := out.Send(&apiv2.StreamExtSnapshotRequest{Pkt: p}); err != nil && !errors.Is(err, io.EOF) { + p := &api.StreamPacket{Data: buf.Bytes()} + if err := out.Send(&api.StreamExtSnapshotRequest{Pkt: p}); err != nil && !errors.Is(err, io.EOF) { return fmt.Errorf("failed to send data chunk: %w", err) } return nil @@ -190,9 +190,9 @@ func streamBadger(ctx context.Context, ps *badger.DB, out apiv2.Dgraph_StreamExt // Send the final 'done' signal to mark completion glog.Infof("[import] Sending completion signal for group [%d]", groupId) - done := &apiv2.StreamPacket{Done: true} + done := &api.StreamPacket{Done: true} - if err := out.Send(&apiv2.StreamExtSnapshotRequest{Pkt: done}); err != nil && !errors.Is(err, io.EOF) { + if err := out.Send(&api.StreamExtSnapshotRequest{Pkt: done}); err != nil && !errors.Is(err, io.EOF) { return fmt.Errorf("failed to send 'done' signal for group [%d]: %w", groupId, err) } diff --git a/dgraph/cmd/mcp/mcp_server.go b/dgraph/cmd/mcp/mcp_server.go index 7a4b874e927..67aa7772295 100644 --- a/dgraph/cmd/mcp/mcp_server.go +++ b/dgraph/cmd/mcp/mcp_server.go @@ -182,7 +182,7 @@ func NewMCPServer(connectionString string, readOnly bool) (*server.MCPServer, er if err != nil { return mcp.NewToolResultErrorFromErr("Error opening connection with Dgraph Alpha", err), nil } - if err = conn.SetSchema(ctx, dgo.RootNamespace, schema); err != nil { + if err = conn.SetSchema(ctx, schema); err != nil { return mcp.NewToolResultErrorFromErr("Schema alteration failed", err), nil } diff --git a/edgraph/alter.go b/edgraph/alter.go deleted file mode 100644 index 1c5b3b15dd8..00000000000 --- a/edgraph/alter.go +++ /dev/null @@ -1,294 +0,0 @@ -/* - * SPDX-FileCopyrightText: © Hypermode Inc. - * SPDX-License-Identifier: Apache-2.0 - */ - -package edgraph - -import ( - "context" - "fmt" - "time" - - "github.com/dgraph-io/dgo/v250/protos/api" - apiv2 "github.com/dgraph-io/dgo/v250/protos/api.v2" - "github.com/hypermodeinc/dgraph/v25/dql" - "github.com/hypermodeinc/dgraph/v25/protos/pb" - "github.com/hypermodeinc/dgraph/v25/query" - "github.com/hypermodeinc/dgraph/v25/schema" - "github.com/hypermodeinc/dgraph/v25/worker" - "github.com/hypermodeinc/dgraph/v25/x" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/trace" - - "github.com/golang/glog" - "github.com/pkg/errors" - "google.golang.org/grpc/status" -) - -type ServerV25 struct { - apiv2.UnimplementedDgraphServer -} - -func validateAlterReq(ctx context.Context) error { - if err := x.HealthCheck(); err != nil { - return err - } - if !isMutationAllowed(ctx) { - return errors.Errorf("No mutations allowed by server.") - } - if _, err := hasAdminAuth(ctx, "Alter"); err != nil { - return err - } - return nil -} - -func executeDropAll(ctx context.Context, startTs uint64) error { - if x.Config.BlockClusterWideDrop { - glog.V(2).Info("Blocked drop-all because it is not permitted.") - return errors.New("Drop all operation is not permitted.") - } - - ctx = x.AttachJWTNamespace(ctx) - - m := &pb.Mutations{StartTs: startTs, DropOp: pb.Mutations_ALL} - if _, err := query.ApplyMutations(ctx, m); err != nil { - return err - } - - // insert a helper record for backup & restore, indicating that drop_all was done - if err := InsertDropRecord(ctx, "DROP_ALL;"); err != nil { - return err - } - - // insert empty GraphQL schema, so all alphas get notified to - // reset their in-memory GraphQL schema - if _, err := UpdateGQLSchema(ctx, "", ""); err != nil { - return err - } - - // recreate the admin account after a drop all operation - InitializeAcl(nil) - - return nil -} - -func executeDropAllInNs(ctx context.Context, startTs uint64, req *apiv2.AlterRequest) error { - ctx = x.AttachJWTNamespace(ctx) - - nsID, err := getNamespaceIDFromName(ctx, req.NsName) - if err != nil { - return err - } - - m := &pb.Mutations{ - StartTs: startTs, - DropOp: pb.Mutations_ALL_IN_NS, - DropValue: fmt.Sprintf("%#x", nsID), - } - if _, err := query.ApplyMutations(ctx, m); err != nil { - return err - } - - // TODO: handle this in backup and restore - // insert a helper record for backup & restore, indicating that drop_all for a ns was done - if err := InsertDropRecord(ctx, fmt.Sprintf("DROP_ALL_IN_NS;%#x", nsID)); err != nil { - return err - } - - // Attach the newly leased NsID in the context in order to create guardians/groot for it. - m = &pb.Mutations{ - StartTs: worker.State.GetTimestamp(false), - Schema: schema.InitialSchema(nsID), - Types: schema.InitialTypes(nsID), - } - if _, err := query.ApplyMutations(ctx, m); err != nil { - return err - } - - err = x.RetryUntilSuccess(10, 100*time.Millisecond, func() error { - return createGuardianAndGroot(x.AttachNamespace(ctx, nsID), "password") - }) - if err != nil { - return errors.Wrapf(err, "Failed to create guardian and groot: ") - } - - return nil -} - -func executeDropData(ctx context.Context, startTs uint64, req *apiv2.AlterRequest) error { - nsID, err := getNamespaceIDFromName(x.AttachJWTNamespace(ctx), req.NsName) - if err != nil { - return err - } - - // query the GraphQL schema and keep it in memory, so it can be inserted again - _, graphQLSchema, err := GetGQLSchema(nsID) - if err != nil { - return err - } - - m := &pb.Mutations{ - StartTs: startTs, - DropOp: pb.Mutations_DATA, - DropValue: fmt.Sprintf("%#x", nsID), - } - if _, err := query.ApplyMutations(x.AttachNamespace(ctx, nsID), m); err != nil { - return err - } - - // insert a helper record for backup & restore, indicating that drop_data was done - if err := InsertDropRecord(x.AttachJWTNamespace(ctx), fmt.Sprintf("DROP_DATA;%#x", nsID)); err != nil { - return err - } - - // just reinsert the GraphQL schema, no need to alter dgraph schema as this was drop_data - if _, err := UpdateGQLSchema(ctx, graphQLSchema, ""); err != nil { - return err - } - - // Since all data has been dropped, we need to recreate the admin account in the respective namespace. - upsertGuardianAndGroot(nil, nsID) - return nil -} - -func executeDropPredicate(ctx context.Context, startTs uint64, req *apiv2.AlterRequest) error { - if len(req.PredicateToDrop) == 0 { - return errors.Errorf("PredicateToDrop cannot be empty") - } - - nsID, err := getNamespaceIDFromName(x.AttachJWTNamespace(ctx), req.NsName) - if err != nil { - return err - } - - // Pre-defined predicates cannot be dropped. - attr := x.NamespaceAttr(nsID, req.PredicateToDrop) - if x.IsPreDefinedPredicate(attr) { - return errors.Errorf("predicate %s is pre-defined and is not allowed to be dropped", x.ParseAttr(attr)) - } - - nq := &api.NQuad{ - Namespace: nsID, - Subject: x.Star, - Predicate: x.ParseAttr(attr), - ObjectValue: &api.Value{Val: &api.Value_StrVal{StrVal: x.Star}}, - } - wnq := &dql.NQuad{NQuad: nq} - edge, err := wnq.ToDeletePredEdge() - if err != nil { - return err - } - edges := []*pb.DirectedEdge{edge} - - m := &pb.Mutations{StartTs: startTs, Edges: edges} - if _, err := query.ApplyMutations(x.AttachNamespace(ctx, nsID), m); err != nil { - return err - } - - // insert a helper record for backup & restore, indicating that drop_attr was done - if err := InsertDropRecord(x.AttachJWTNamespace(ctx), "DROP_ATTR;"+attr); err != nil { - return err - } - - return nil -} - -func executeDropType(ctx context.Context, startTs uint64, req *apiv2.AlterRequest) error { - if len(req.TypeToDrop) == 0 { - return errors.Errorf("TypeToDrop cannot be empty") - } - - nsID, err := getNamespaceIDFromName(x.AttachJWTNamespace(ctx), req.NsName) - if err != nil { - return err - } - - // Pre-defined types cannot be dropped. - dropPred := x.NamespaceAttr(nsID, req.TypeToDrop) - if x.IsPreDefinedType(dropPred) { - return errors.Errorf("type %s is pre-defined and is not allowed to be dropped", req.TypeToDrop) - } - - m := &pb.Mutations{DropOp: pb.Mutations_TYPE, DropValue: dropPred, StartTs: startTs} - if _, err := query.ApplyMutations(x.AttachNamespace(ctx, nsID), m); err != nil { - return err - } - - return nil -} - -func executeSetSchema(ctx context.Context, startTs uint64, req *apiv2.AlterRequest) error { - nsID, err := getNamespaceIDFromName(x.AttachJWTNamespace(ctx), req.NsName) - if err != nil { - return err - } - - result, err := parseSchemaFromAlterOperation(x.AttachNamespace(ctx, nsID), req.Schema) - if err == errIndexingInProgress { - // Make the client wait a bit. - time.Sleep(time.Second) - return err - } else if err != nil { - return err - } - - glog.Infof("Got schema: %+v", result) - - m := &pb.Mutations{StartTs: startTs, Schema: result.Preds, Types: result.Types} - if _, err := query.ApplyMutations(x.AttachNamespace(ctx, nsID), m); err != nil { - return err - } - - // wait for indexing to complete or context to be canceled. - if err := worker.WaitForIndexing(ctx, !req.RunInBackground); err != nil { - return err - } - - return nil -} - -// Alter handles requests to change the schema or remove parts or all of the data. -func (s *ServerV25) Alter(ctx context.Context, req *apiv2.AlterRequest) (*apiv2.AlterResponse, error) { - ctx, span := otel.Tracer("").Start(ctx, "ServerV25.Alter") - defer span.End() - span.AddEvent("Alter operation", trace.WithAttributes(attribute.String("request", req.String()))) - - // Always print out Alter operations because they are important and rare. - glog.Infof("Received ALTER op: %+v", req) - defer glog.Infof("ALTER op: %+v done", req) - - // For now, we only allow guadian of galaxies to do this operation in v25 - if err := AuthSuperAdmin(ctx); err != nil { - s := status.Convert(err) - return nil, status.Error(s.Code(), - "v25.Alter can only be called by the guardian of the galaxy. "+s.Message()) - } - - if err := validateAlterReq(ctx); err != nil { - return nil, err - } - - // StartTs is not needed if the predicate to be dropped lies on this server - // but is required if it lies on some other machine. Let's get it for safety. - startTs := worker.State.GetTimestamp(false) - - empty := &apiv2.AlterResponse{} - switch req.Op { - case apiv2.AlterOp_DROP_ALL: - return empty, executeDropAll(ctx, startTs) - case apiv2.AlterOp_DROP_ALL_IN_NS: - return empty, executeDropAllInNs(ctx, startTs, req) - case apiv2.AlterOp_DROP_DATA_IN_NS: - return empty, executeDropData(ctx, startTs, req) - case apiv2.AlterOp_DROP_PREDICATE_IN_NS: - return empty, executeDropPredicate(ctx, startTs, req) - case apiv2.AlterOp_DROP_TYPE_IN_NS: - return empty, executeDropType(ctx, startTs, req) - case apiv2.AlterOp_SCHEMA_IN_NS: - return empty, executeSetSchema(ctx, startTs, req) - default: - return empty, errors.Errorf("invalid operation in Alter Request") - } -} diff --git a/edgraph/alter_test.go b/edgraph/alter_test.go deleted file mode 100644 index c3fed1871de..00000000000 --- a/edgraph/alter_test.go +++ /dev/null @@ -1,315 +0,0 @@ -//go:build integration - -/* - * SPDX-FileCopyrightText: © Hypermode Inc. - * SPDX-License-Identifier: Apache-2.0 - */ - -package edgraph - -import ( - "context" - "testing" - - "github.com/dgraph-io/dgo/v250/protos/api" - "github.com/hypermodeinc/dgraph/v25/dgraphapi" - "github.com/hypermodeinc/dgraph/v25/dgraphtest" - - "github.com/stretchr/testify/require" -) - -func TestDropAllInNs(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAllNamespaces(context.Background())) - - // Create two namespaces - ctx := context.Background() - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - require.NoError(t, client.CreateNamespace(ctx, "ns2")) - - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - ns1ID := nsMaps["ns1"].Id - require.NotZero(t, ns1ID) - ns2ID := nsMaps["ns2"].Id - require.NotZero(t, ns2ID) - - // namespace 1 - require.NoError(t, client.SetSchema(ctx, "ns1", `name: string @index(exact) .`)) - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID)) - _, err = client.Mutate(&api.Mutation{ - SetNquads: []byte(`_:a "Alice" .`), - CommitNow: true, - }) - require.NoError(t, err) - resp, err := client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Alice"}]}`, string(resp.GetJson())) - - // namespace 2 - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.SetSchema(ctx, "ns2", `name: string @index(exact) .`)) - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns2ID)) - _, err = client.Mutate(&api.Mutation{ - SetNquads: []byte(`_:a "Bob" .`), - CommitNow: true, - }) - require.NoError(t, err) - resp, err = client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Bob"}]}`, string(resp.GetJson())) - - // Drop everything in namespace 1 - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.Dgraph.DropAll(context.Background(), "ns1")) - - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns2ID)) - resp, err = client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Bob"}]}`, string(resp.GetJson())) - - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID)) - resp, err = client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[]}`, string(resp.GetJson())) -} - -// TODO: add a test that talks to different alphas in the same cluster -func TestDropAll(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAllNamespaces(context.Background())) - - // Create two namespaces - ctx := context.Background() - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - require.NoError(t, client.CreateNamespace(ctx, "ns2")) - - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - ns1ID := nsMaps["ns1"].Id - require.NotZero(t, ns1ID) - ns2ID := nsMaps["ns2"].Id - require.NotZero(t, ns2ID) - - // namespace 1 - require.NoError(t, client.SetSchema(ctx, "ns1", `name: string @index(exact) .`)) - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID)) - _, err = client.Mutate(&api.Mutation{ - SetNquads: []byte(`_:a "Alice" .`), - CommitNow: true, - }) - require.NoError(t, err) - resp, err := client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Alice"}]}`, string(resp.GetJson())) - - // namespace 2 - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.SetSchema(ctx, "ns2", `name: string @index(exact) .`)) - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns2ID)) - _, err = client.Mutate(&api.Mutation{ - SetNquads: []byte(`_:a "Bob" .`), - CommitNow: true, - }) - require.NoError(t, err) - resp, err = client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Bob"}]}`, string(resp.GetJson())) - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAllNamespaces(context.Background())) - - resp, err = client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[]}`, string(resp.GetJson())) - - require.ErrorContains(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID), - "invalid username or password") -} - -func TestDropData(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAllNamespaces(context.Background())) - - // Create two namespaces - ctx := context.Background() - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - require.NoError(t, client.CreateNamespace(ctx, "ns2")) - - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - ns1ID := nsMaps["ns1"].Id - require.NotZero(t, ns1ID) - ns2ID := nsMaps["ns2"].Id - require.NotZero(t, ns2ID) - - // namespace 1 - require.NoError(t, client.SetSchema(ctx, "ns1", `name: string @index(exact) .`)) - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID)) - _, err = client.Mutate(&api.Mutation{ - SetNquads: []byte(`_:a "Alice" .`), - CommitNow: true, - }) - require.NoError(t, err) - resp, err := client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Alice"}]}`, string(resp.GetJson())) - - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropData(context.Background(), "ns1")) - - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID)) - resp, err = client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[]}`, string(resp.GetJson())) - - resp, err = client.Query(`schema{}`) - require.NoError(t, err) - require.Contains(t, string(resp.GetJson()), `"predicate":"name"`) -} - -func TestDropPredicate(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAllNamespaces(context.Background())) - - // Create two namespaces - ctx := context.Background() - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - require.NoError(t, client.CreateNamespace(ctx, "ns2")) - - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - ns1ID := nsMaps["ns1"].Id - require.NotZero(t, ns1ID) - ns2ID := nsMaps["ns2"].Id - require.NotZero(t, ns2ID) - - // namespace 1 - require.NoError(t, client.SetSchema(ctx, "ns1", `name: string @index(exact) .`)) - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID)) - _, err = client.Mutate(&api.Mutation{ - SetNquads: []byte(`_:a "Alice" .`), - CommitNow: true, - }) - require.NoError(t, err) - resp, err := client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Alice"}]}`, string(resp.GetJson())) - - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.Dgraph.DropPredicate(context.Background(), "ns1", "name")) - - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID)) - resp, err = client.Query(`{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[]}`, string(resp.GetJson())) - - resp, err = client.Query(`schema{}`) - require.NoError(t, err) - require.NotContains(t, string(resp.GetJson()), `"predicate":"name"`) -} - -func TestDropType(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAllNamespaces(context.Background())) - - // Create two namespaces - ctx := context.Background() - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - require.NoError(t, client.CreateNamespace(ctx, "ns2")) - - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - ns1ID := nsMaps["ns1"].Id - require.NotZero(t, ns1ID) - ns2ID := nsMaps["ns2"].Id - require.NotZero(t, ns2ID) - - // namespace 1 - require.NoError(t, client.SetSchema(context.Background(), "ns1", - `name: string . - age: int . - type Person { - name - age - }`)) - require.NoError(t, client.LoginIntoNamespace(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword, ns1ID)) - resp, err := client.Query(`schema{}`) - require.NoError(t, err) - require.Contains(t, string(resp.GetJson()), `"predicate":"name"`) - resp, err = client.Query(`schema(type: Person) { }`) - require.NoError(t, err) - require.Contains(t, string(resp.GetJson()), `"name":"name"`) - - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropType(context.Background(), "ns1", "Person")) - resp, err = client.Query(`schema{}`) - require.NoError(t, err) - require.NotContains(t, string(resp.GetJson()), `"predicate":"name"`) - resp, err = client.Query(`schema(type: Person) { }`) - require.NoError(t, err) - require.NotContains(t, string(resp.GetJson()), `"name":"name"`) -} diff --git a/edgraph/namespace.go b/edgraph/namespace.go index 4531ea05469..7f054b79d9f 100644 --- a/edgraph/namespace.go +++ b/edgraph/namespace.go @@ -7,77 +7,18 @@ package edgraph import ( "context" - "encoding/json" "fmt" - "math" - "strconv" "strings" - "unicode" "github.com/golang/glog" - "github.com/pkg/errors" "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" "github.com/dgraph-io/dgo/v250/protos/api" - apiv2 "github.com/dgraph-io/dgo/v250/protos/api.v2" "github.com/hypermodeinc/dgraph/v25/schema" - "github.com/hypermodeinc/dgraph/v25/x" ) -const ( - queryAllNamespaces = `{ - namespaces(func: type(dgraph.namespace)) { - dgraph.namespace.name - dgraph.namespace.id - } - }` - queryNamespaceByName = `{ - namespaces(func: eq(dgraph.namespace.name, "%v")) { - dgraph.namespace.id - } - }` - queryNamespaceByID = `{ - namespaces(func: eq(dgraph.namespace.id, "%v")) { - dgraph.namespace.name - } - }` - queryDeleteNamespaceByName = `{ - namespaces(func: eq(dgraph.namespace.name, "%v")) { - nsUID as uid - dgraph.namespace.id - } - }` - queryRenameNamespace = `{ - namespaces as var(func: eq(dgraph.namespace.name, "%v")) - }` -) - -type resultNamespaces struct { - Namespaces []struct { - ID uint64 `json:"dgraph.namespace.id"` - Name string `json:"dgraph.namespace.name"` - } `json:"namespaces"` -} - -func (s *ServerV25) SignInUser(ctx context.Context, - request *apiv2.SignInUserRequest) (*apiv2.SignInUserResponse, error) { - - req := &api.LoginRequest{Userid: request.UserId, Password: request.Password, Namespace: 0} - resp, err := (&Server{}).Login(ctx, req) - if err != nil { - return nil, err - } - jwt := api.Jwt{} - if err := proto.Unmarshal(resp.Json, &jwt); err != nil { - return nil, err - } - - return &apiv2.SignInUserResponse{AccessJwt: jwt.AccessJwt, RefreshJwt: jwt.RefreshJwt}, nil -} - -func (s *ServerV25) CreateNamespace(ctx context.Context, in *apiv2.CreateNamespaceRequest) ( - *apiv2.CreateNamespaceResponse, error) { +func (s *Server) CreateNamespace(ctx context.Context, in *api.CreateNamespaceRequest) ( + *api.CreateNamespaceResponse, error) { if err := AuthSuperAdmin(ctx); err != nil { s := status.Convert(err) @@ -85,38 +26,18 @@ func (s *ServerV25) CreateNamespace(ctx context.Context, in *apiv2.CreateNamespa "Non superadmin user cannot create namespace. "+s.Message()) } - if err := isValidNamespaceName(in.NsName); err != nil { - return nil, err - } - - if _, err := getNamespaceIDFromName(x.AttachJWTNamespace(ctx), in.NsName); err == nil { - return nil, errors.Errorf("namespace %q already exists", in.NsName) - } else if !strings.Contains(err.Error(), "not found") { - return nil, err - } - password := "password" ns, err := (&Server{}).CreateNamespaceInternal(ctx, password) if err != nil { return nil, err } - // If we crash at this point, it is possible that namespaces is created - // but no entry has been added to dgraph.namespace predicate. This is alright - // because we have not let the user know that namespace has been created. - // The user would have to try again and another namespace then would be - // assigned to the provided name here. - - if err := insertNamespace(ctx, in.NsName, ns); err != nil { - return nil, err - } - - glog.Infof("Created namespace [%v] with id [%d]", in.NsName, ns) - return &apiv2.CreateNamespaceResponse{}, nil + glog.Infof("Created namespace with id [%d]", ns) + return &api.CreateNamespaceResponse{}, nil } -func (s *ServerV25) DropNamespace(ctx context.Context, in *apiv2.DropNamespaceRequest) ( - *apiv2.DropNamespaceResponse, error) { +func (s *Server) DropNamespace(ctx context.Context, in *api.DropNamespaceRequest) ( + *api.DropNamespaceResponse, error) { if err := AuthSuperAdmin(ctx); err != nil { s := status.Convert(err) @@ -124,83 +45,25 @@ func (s *ServerV25) DropNamespace(ctx context.Context, in *apiv2.DropNamespaceRe "Non superadmin user cannot drop namespace. "+s.Message()) } - if err := isValidNamespaceToDelete(in.NsName); err != nil { - return nil, err - } - - var nsID uint64 - if isLgacyNamespace(in.NsName) { - ns, err := extractNsIDFromLegacyNamespace(in.NsName) - if err != nil { - return nil, err - } - - if _, err := getNamespaceNameFromID(x.AttachJWTNamespace(ctx), ns); err == nil { - // We found the namespace with a real name - return nil, fmt.Errorf("namespace [%v] not found", in.NsName) - } else if !strings.Contains(err.Error(), "not found") { - return nil, err - } - nsID = ns - } else { - ns, err := deleteNamespaceByName(x.AttachJWTNamespace(ctx), in.NsName) - if err != nil { - return nil, err - } - nsID = ns - } - - if nsID == 0 { - glog.Infof("Namespace [%v] not found", in.NsName) - return &apiv2.DropNamespaceResponse{}, nil + if in.Namespace == 0 { + glog.Infof("Namespace [%v] cannot be deleted", in.Namespace) + return nil, fmt.Errorf("namespace [%v] cannot be deleted", in.Namespace) } - // If we crash at this point, it is possible that namespace is deleted - // by the name, but the entry has not been removed from dgraph.namespace - - if err := (&Server{}).DeleteNamespace(ctx, nsID); err != nil { + if err := (&Server{}).DeleteNamespace(ctx, in.Namespace); err != nil { if !strings.Contains(err.Error(), "error deleting non-existing namespace") { return nil, err } else { - glog.Infof("Namespace with id [%d] does not exist, cannot be deleted", nsID) + glog.Infof("Namespace with id [%d] does not exist, cannot be deleted", in.Namespace) } } - glog.Infof("Dropped namespace [%v] with id [%d]", in.NsName, nsID) - return &apiv2.DropNamespaceResponse{}, nil + glog.Infof("Dropped namespace [%v]", in.Namespace) + return &api.DropNamespaceResponse{}, nil } -func (s *ServerV25) UpdateNamespace(ctx context.Context, in *apiv2.UpdateNamespaceRequest) ( - *apiv2.UpdateNamespaceResponse, error) { - - if err := AuthSuperAdmin(ctx); err != nil { - s := status.Convert(err) - return nil, status.Error(s.Code(), - "Non superadmin user cannot rename a namespace. "+s.Message()) - } - - if err := isValidNamespaceToDelete(in.NsName); err != nil { - return nil, err - } - if err := isValidNamespaceName(in.RenameToNs); err != nil { - return nil, err - } - - if isLgacyNamespace(in.NsName) { - err := renameLeagcyNamespace(ctx, in.NsName, in.RenameToNs) - return &apiv2.UpdateNamespaceResponse{}, err - } - - if err := renameNamespace(x.AttachJWTNamespace(ctx), in.NsName, in.RenameToNs); err != nil { - return nil, err - } - - glog.Infof("Renamed namespace [%v] to [%v]", in.NsName, in.RenameToNs) - return &apiv2.UpdateNamespaceResponse{}, nil -} - -func (s *ServerV25) ListNamespaces(ctx context.Context, in *apiv2.ListNamespacesRequest) ( - *apiv2.ListNamespacesResponse, error) { +func (s *Server) ListNamespaces(ctx context.Context, in *api.ListNamespacesRequest) ( + *api.ListNamespacesResponse, error) { if err := AuthSuperAdmin(ctx); err != nil { s := status.Convert(err) @@ -208,233 +71,10 @@ func (s *ServerV25) ListNamespaces(ctx context.Context, in *apiv2.ListNamespaces "Non superadmin user cannot list namespaces. "+s.Message()) } - resp, err := (&Server{}).doQuery(x.AttachJWTNamespace(ctx), - &Request{req: &api.Request{Query: queryAllNamespaces}, doAuth: NoAuthorize}) - if err != nil { - return nil, err - } - - var data resultNamespaces - if err := json.Unmarshal(resp.GetJson(), &data); err != nil { - return nil, err - } - dataNsList := make(map[uint64]string) - for _, e := range data.Namespaces { - dataNsList[e.ID] = e.Name - } - - schNsList := schema.State().Namespaces() - result := &apiv2.ListNamespacesResponse{NsList: make(map[string]*apiv2.Namespace)} - for id := range schNsList { - if name, ok := dataNsList[id]; !ok { - name = fmt.Sprintf("dgraph-%d", id) - result.NsList[name] = &apiv2.Namespace{Name: name, Id: id} - } else { - result.NsList[name] = &apiv2.Namespace{Name: name, Id: id} - } - } - - return result, nil -} - -func isLgacyNamespace(nsName string) bool { - return strings.HasPrefix(nsName, "dgraph") -} - -func extractNsIDFromLegacyNamespace(nsName string) (uint64, error) { - if len(nsName) < 8 { - return 0, errors.Errorf("namespace %q is not a legacy namespace", nsName) - } - ns, err := strconv.ParseUint(nsName[7:], 10, 64) - if err != nil { - return 0, errors.Errorf("invalid namespace name %q", nsName) - } - return ns, nil -} - -func isSystemNamespace(nsName string) bool { - return nsName == "root" || nsName == "galaxy" || nsName == "dgraph-0" -} - -func isValidNamespaceName(name string) error { - if name == "" { - return errors.Errorf("namespace name cannot be empty") - } - hasInvalidChars := strings.ContainsFunc(name, func(r rune) bool { - return !unicode.IsLetter(r) && !unicode.IsNumber(r) && r != '_' && r != '-' - }) - if hasInvalidChars { - return fmt.Errorf("namespace name [%v] has invalid characters", name) - } - if strings.HasPrefix(name, "_") || strings.HasPrefix(name, "-") { - return fmt.Errorf("namespace name [%v] cannot start with _ or -", name) - } - if isLgacyNamespace(name) { - return fmt.Errorf("namespace name [%v] cannot start with dgraph", name) - } - if isSystemNamespace(name) { - return fmt.Errorf("namespace name [%v] is reserved", name) - } - if _, err := strconv.ParseInt(name, 10, 64); err == nil { - return fmt.Errorf("namespace name [%v] cannot be a number", name) - } - return nil -} - -func isValidNamespaceToDelete(name string) error { - if name == "" { - return errors.Errorf("namespace name cannot be empty") - } - if isSystemNamespace(name) { - return fmt.Errorf("namespace [%v] cannot be renamed/dropped", name) - } - return nil -} - -func getNamespaceIDFromName(ctx context.Context, nsName string) (uint64, error) { - if isSystemNamespace(nsName) { - return 0, nil - } - if isLgacyNamespace(nsName) { - return extractNsIDFromLegacyNamespace(nsName) - } - - req := &api.Request{Query: fmt.Sprintf(queryNamespaceByName, nsName)} - resp, err := (&Server{}).doQuery(ctx, &Request{req: req, doAuth: NoAuthorize}) - if err != nil { - return 0, err - } - - var data resultNamespaces - if err := json.Unmarshal(resp.GetJson(), &data); err != nil { - return 0, err - } - if len(data.Namespaces) == 0 { - return 0, errors.Errorf("namespace %q not found", nsName) - } - - glog.Infof("Found namespace [%v] with id [%d]", nsName, data.Namespaces[0].ID) - return data.Namespaces[0].ID, nil -} - -func getNamespaceNameFromID(ctx context.Context, nsID uint64) (string, error) { - req := &api.Request{Query: fmt.Sprintf(queryNamespaceByID, nsID)} - resp, err := (&Server{}).doQuery(ctx, &Request{req: req, doAuth: NoAuthorize}) - if err != nil { - return "", err - } - - var data resultNamespaces - if err := json.Unmarshal(resp.GetJson(), &data); err != nil { - return "", err - } - if len(data.Namespaces) == 0 { - return "", errors.Errorf("namespace [%v] not found", nsID) - } - - glog.Infof("Found namespace with ID [%v] with name [%v]", nsID, data.Namespaces[0].Name) - return data.Namespaces[0].Name, nil -} - -func insertNamespace(ctx context.Context, nsName string, nsID uint64) error { - if nsID >= math.MaxInt64 { - return errors.Errorf("namespace ID %d exceeds int64 range", nsID) - } - - _, err := (&Server{}).QueryNoGrpc( - context.WithValue(ctx, IsGraphql, true), - &api.Request{ - Mutations: []*api.Mutation{{ - Set: []*api.NQuad{ - { - Subject: "_:ns", - Predicate: "dgraph.namespace.name", - ObjectValue: &api.Value{Val: &api.Value_StrVal{StrVal: nsName}}, - }, - { - Subject: "_:ns", - Predicate: "dgraph.namespace.id", - ObjectValue: &api.Value{Val: &api.Value_IntVal{IntVal: int64(nsID)}}, - }, - { - Subject: "_:ns", - Predicate: "dgraph.type", - ObjectValue: &api.Value{Val: &api.Value_StrVal{StrVal: "dgraph.namespace"}}, - }, - }, - }}, - CommitNow: true, - }) - return err -} - -func deleteNamespaceByName(ctx context.Context, nsName string) (uint64, error) { - req := &api.Request{ - Query: fmt.Sprintf(queryDeleteNamespaceByName, nsName), - Mutations: []*api.Mutation{{DelNquads: []byte(`uid(nsUID) * * .`)}}, - CommitNow: true, - } - resp, err := (&Server{}).doQuery(context.WithValue(ctx, IsGraphql, true), - &Request{req: req, doAuth: NoAuthorize}) - if err != nil { - return 0, err - } - - var data resultNamespaces - if err := json.Unmarshal(resp.GetJson(), &data); err != nil { - return 0, err - } - if len(data.Namespaces) != 1 { - return 0, nil - } - - return data.Namespaces[0].ID, nil -} - -func renameLeagcyNamespace(ctx context.Context, fromNs, toNs string) error { - fromID, err := extractNsIDFromLegacyNamespace(fromNs) - if err != nil { - return err - } - - _, err = getNamespaceNameFromID(x.AttachJWTNamespace(ctx), fromID) - if err == nil { - return fmt.Errorf("namespace [%v] not found: %v", err, fromNs) - } - if !strings.Contains(err.Error(), "not found") { - return err - } - - if err := insertNamespace(x.AttachJWTNamespace(ctx), toNs, fromID); err != nil { - return err - } - - return nil -} - -func renameNamespace(ctx context.Context, fromNs, toNs string) error { - req := &api.Request{ - Query: fmt.Sprintf(queryRenameNamespace, fromNs), - Mutations: []*api.Mutation{{ - Cond: `@if(eq(len(namespaces), 1))`, - Set: []*api.NQuad{ - { - Subject: "uid(namespaces)", - Predicate: "dgraph.namespace.name", - ObjectValue: &api.Value{Val: &api.Value_StrVal{StrVal: toNs}}, - }, - }, - }}, - CommitNow: true, - } - resp, err := (&Server{}).doQuery(context.WithValue(ctx, IsGraphql, true), &Request{req: req}) - if err != nil { - return err - } - - if resp.Metrics.NumUids["namespaces"] != 1 { - return errors.Errorf("namespace [%v] not found", fromNs) + dataNsList := make(map[uint64]*api.Namespace) + for ns := range schema.State().Namespaces() { + dataNsList[ns] = &api.Namespace{Id: ns} } - return nil + return &api.ListNamespacesResponse{Namespaces: dataNsList}, nil } diff --git a/edgraph/namespace_test.go b/edgraph/namespace_test.go deleted file mode 100644 index 146912d2caf..00000000000 --- a/edgraph/namespace_test.go +++ /dev/null @@ -1,310 +0,0 @@ -//go:build integration - -/* - * SPDX-FileCopyrightText: © Hypermode Inc. - * SPDX-License-Identifier: Apache-2.0 - */ - -package edgraph - -import ( - "context" - "fmt" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/hypermodeinc/dgraph/v25/dgraphapi" - "github.com/hypermodeinc/dgraph/v25/dgraphtest" - "github.com/hypermodeinc/dgraph/v25/x" -) - -func TestNamespaces(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAll()) - - // Create two namespaces - ctx := context.Background() - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - require.NoError(t, client.CreateNamespace(ctx, "ns2")) - - // namespace 1 - require.NoError(t, client.SetSchema(ctx, "ns1", `name: string @index(exact) .`)) - resp, err := client.RunDQL(ctx, "ns1", `{ set {_:a "Alice" .}}`) - require.NoError(t, err) - require.Equal(t, 1, len(resp.BlankUids)) - resp, err = client.RunDQL(ctx, "ns1", `{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Alice"}]}`, string(resp.GetQueryResult())) - - // namespace 2 - require.NoError(t, client.SetSchema(ctx, "ns2", `name: string @index(exact) .`)) - _, err = client.RunDQL(ctx, "ns2", `{ set {_:a "Bob" .}}`) - require.NoError(t, err) - resp, err = client.RunDQL(ctx, "ns2", `{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Bob"}]}`, string(resp.GetQueryResult())) - - // rename ns2 namespace - require.NoError(t, client.RenameNamespace(ctx, "ns2", "ns2-new")) - - // check if the data is still there - resp, err = client.RunDQL(ctx, "ns2-new", `{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Bob"}]}`, string(resp.GetQueryResult())) - - // List Namespaces - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 3) - - // drop ns2-new namespace - require.NoError(t, client.DropNamespace(ctx, "ns2-new")) - _, err = client.RunDQL(ctx, "ns2-new", `{ q(func: has(name)) { name } }`) - require.ErrorContains(t, err, "namespace \"ns2-new\" not found") - nsMaps, err = client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 2) - - // drop ns1 namespace - require.NoError(t, client.DropNamespace(ctx, "ns1")) - _, err = client.RunDQL(ctx, "ns1", `{ q(func: has(name)) { name } }`) - require.ErrorContains(t, err, "namespace \"ns1\" not found") -} - -func TestNamespacesPreV25(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - hc, err := dc.HTTPClient() - require.NoError(t, err) - require.NoError(t, hc.LoginIntoNamespace(dgraphapi.DefaultUser, - dgraphapi.DefaultPassword, x.RootNamespace)) - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAll()) - - // Add two pre v25 namespaces - ns1, err := hc.AddNamespace() - require.NoError(t, err) - ns2, err := hc.AddNamespace() - require.NoError(t, err) - - // Add one v25 namespace - ctx := context.Background() - require.NoError(t, client.CreateNamespace(ctx, "ns3")) - - // Ensure that all the namespaces are correctly added - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 4) - require.Contains(t, nsMaps, fmt.Sprintf("dgraph-%v", ns1)) - require.Contains(t, nsMaps, fmt.Sprintf("dgraph-%v", ns2)) - require.Contains(t, nsMaps, "dgraph-0") - require.Contains(t, nsMaps, "ns3") - - // Rename a graphql namespace - require.NoError(t, client.RenameNamespace(ctx, fmt.Sprintf("dgraph-%v", ns1), "ns1")) - - // Ensure that all the namespaces are correctly added - nsMaps, err = client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 4) - require.Contains(t, nsMaps, "ns1") - require.Contains(t, nsMaps, fmt.Sprintf("dgraph-%v", ns2)) - require.Contains(t, nsMaps, "dgraph-0") - require.Contains(t, nsMaps, "ns3") - - // Drop a pre v25 namespace - require.NoError(t, client.DropNamespace(ctx, fmt.Sprintf("dgraph-%v", ns2))) - - // Drop a pre v25 namespace after renaming - require.NoError(t, client.DropNamespace(ctx, "ns1")) - - // Ensure that all the namespaces are correctly added - nsMaps, err = client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 2) - require.Contains(t, nsMaps, "dgraph-0") - require.Contains(t, nsMaps, "ns3") - - // Add two pre v25 namespaces and ensure login works - ns4ID, err := hc.AddNamespace() - require.NoError(t, err) - ns4 := fmt.Sprintf("dgraph-%v", ns4ID) - require.NoError(t, client.SetSchema(ctx, ns4, `name: string @index(exact) .`)) - _, err = client.RunDQL(ctx, ns4, `{set{_:a "Alice" .}}`) - require.NoError(t, err) - resp, err := client.RunDQL(ctx, ns4, `{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Alice"}]}`, string(resp.GetQueryResult())) -} - -func TestCreateNamespaceErr(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAll()) - - // create ns1 - ctx := context.Background() - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - - // create namespace with wrong name - require.ErrorContains(t, client.CreateNamespace(ctx, ""), - "namespace name cannot be empty") - require.ErrorContains(t, client.CreateNamespace(ctx, "ns🏆"), - "namespace name [ns🏆] has invalid characters") - require.ErrorContains(t, client.CreateNamespace(ctx, "--"), - "namespace name [--] cannot start with _ or -") - require.ErrorContains(t, client.CreateNamespace(ctx, "dgraph"), - "namespace name [dgraph] cannot start with dgraph") - require.ErrorContains(t, client.CreateNamespace(ctx, "root"), - "namespace name [root] is reserved") - require.ErrorContains(t, client.CreateNamespace(ctx, "galaxy"), - "namespace name [galaxy] is reserved") - require.ErrorContains(t, client.CreateNamespace(ctx, "123"), - "namespace name [123] cannot be a number") - require.ErrorContains(t, client.CreateNamespace(ctx, "00123"), - "namespace name [00123] cannot be a number") - require.ErrorContains(t, client.CreateNamespace(ctx, "ns1"), - `namespace "ns1" already exists`) - - // create namespace with wrong auth - // require.NoError(t, client.LoginToNamespace(ctx, - // "ns1", dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - // require.ErrorContains(t, client.CreateNamespace(ctx, "ns2"), - // "Non superadmin user cannot create namespace") -} - -func TestDropNamespaceErr(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAll()) - - // create ns1 - ctx := context.Background() - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - - // Dropping a non-existent namespace should not be an error - require.NoError(t, client.DropNamespace(ctx, "ns2")) - require.NoError(t, client.DropNamespace(ctx, fmt.Sprintf("dgraph-%v", 10000000))) - - // bad request - require.ErrorContains(t, client.DropNamespace(ctx, ""), - `namespace name cannot be empty`) - require.ErrorContains(t, client.DropNamespace(ctx, "root"), - `namespace [root] cannot be renamed/dropped`) - require.ErrorContains(t, client.DropNamespace(ctx, "galaxy"), - `namespace [galaxy] cannot be renamed/dropped`) - require.ErrorContains(t, client.DropNamespace(ctx, "dgraph-0"), - `namespace [dgraph-0] cannot be renamed/dropped`) - - // pre v25 namespace - require.ErrorContains(t, client.DropNamespace(ctx, "dgraph-"), - `namespace "dgraph-" is not a legacy namespace`) - require.ErrorContains(t, client.DropNamespace(ctx, "dgraph-ns1"), - `invalid namespace name`) - - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 2) - ns1 := nsMaps["ns1"] - - // this namespace has a real name, should not be dropped using dgraph- prefix name - require.ErrorContains(t, client.DropNamespace(ctx, fmt.Sprintf("dgraph-%v", ns1.Id)), `not found`) - - // wrong auth - // require.NoError(t, client.LoginToNamespace(ctx, - // "ns1", dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - // require.ErrorContains(t, client.DropNamespace(ctx, "ns1"), - // `Only superadmin is allowed to do this operation`) -} - -func TestRenameNamespaceErr(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAll()) - - // create ns1 - ctx := context.Background() - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 2) - ns1 := nsMaps["ns1"].Id - - // bad request - require.ErrorContains(t, client.RenameNamespace(ctx, "", "ns2"), - `namespace name cannot be empty`) - require.ErrorContains(t, client.RenameNamespace(ctx, "root", "ns2"), - `namespace [root] cannot be renamed/dropped`) - require.ErrorContains(t, client.RenameNamespace(ctx, "galaxy", "ns2"), - `namespace [galaxy] cannot be renamed/dropped`) - require.ErrorContains(t, client.RenameNamespace(ctx, "dgraph-0", "ns2"), - `namespace [dgraph-0] cannot be renamed/dropped`) - require.ErrorContains(t, client.RenameNamespace(ctx, "ns1", ""), - `namespace name cannot be empty`) - require.ErrorContains(t, client.RenameNamespace(ctx, "ns1", "ns🌍s"), - `namespace name [ns🌍s] has invalid characters`) - require.ErrorContains(t, client.RenameNamespace(ctx, "ns1", "dgraph-23"), - `namespace name [dgraph-23] cannot start with dgraph`) - require.ErrorContains(t, client.RenameNamespace(ctx, "ns1", "root"), - `namespace name [root] is reserved`) - require.ErrorContains(t, client.RenameNamespace(ctx, "ns1", "galaxy"), - `namespace name [galaxy] is reserved`) - require.ErrorContains(t, client.RenameNamespace(ctx, "dgraph-", "ns3"), - `namespace "dgraph-" is not a legacy namespace`) - require.ErrorContains(t, client.RenameNamespace(ctx, fmt.Sprintf("dgraph-%v", ns1), "ns3"), - `not found`) -} - -func TestListNamespacesErr(t *testing.T) { - dc := dgraphtest.NewComposeCluster() - client, cleanup, err := dc.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.Login(context.Background(), - dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - require.NoError(t, client.DropAll()) - - // create ns1 - ctx := context.Background() - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - - // wrong auth - // require.NoError(t, client.LoginToNamespace(ctx, - // "ns1", dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) - // _, err = client.ListNamespaces(ctx) - // require.ErrorContains(t, err, "Only superadmin is allowed to do this operation") -} diff --git a/edgraph/ns_query_no_acl_test.go b/edgraph/ns_query_no_acl_test.go deleted file mode 100644 index d35e1eba13a..00000000000 --- a/edgraph/ns_query_no_acl_test.go +++ /dev/null @@ -1,87 +0,0 @@ -//go:build integration2 - -/* - * SPDX-FileCopyrightText: © Hypermode Inc. - * SPDX-License-Identifier: Apache-2.0 - */ - -package edgraph - -import ( - "context" - "testing" - - "github.com/dgraph-io/dgo/v250" - "github.com/stretchr/testify/require" - - "github.com/hypermodeinc/dgraph/v25/dgraphtest" -) - -func TestNamespaces(t *testing.T) { - conf := dgraphtest.NewClusterConfig().WithNumAlphas(1).WithNumZeros(1).WithReplicas(1) - c, err := dgraphtest.NewLocalCluster(conf) - require.NoError(t, err) - defer func() { c.Cleanup(t.Failed()) }() - require.NoError(t, c.Start()) - - // ensure that Open works with no ACL - alphaGrpcPort, err := c.GetAlphaGrpcPublicPort(0) - require.NoError(t, err) - _, err = dgo.Open("dgraph://localhost:" + alphaGrpcPort) - require.NoError(t, err) - - client, cleanup, err := c.Client() - require.NoError(t, err) - defer cleanup() - - // Drop all data - require.NoError(t, client.DropAll()) - - // Create two namespaces - ctx := context.Background() - require.NoError(t, client.CreateNamespace(ctx, "ns1")) - require.NoError(t, client.CreateNamespace(ctx, "ns2")) - - // namespace 1 - require.NoError(t, client.SetSchema(ctx, "ns1", `name: string @index(exact) .`)) - resp, err := client.RunDQL(ctx, "ns1", `{ set {_:a "Alice" .}}`) - require.NoError(t, err) - require.Equal(t, 1, len(resp.BlankUids)) - resp, err = client.RunDQL(ctx, "ns1", `{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Alice"}]}`, string(resp.GetQueryResult())) - - // namespace 2 - require.NoError(t, client.SetSchema(ctx, "ns2", `name: string @index(exact) .`)) - _, err = client.RunDQL(ctx, "ns2", `{ set {_:a "Bob" .}}`) - require.NoError(t, err) - resp, err = client.RunDQL(ctx, "ns2", `{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Bob"}]}`, string(resp.GetQueryResult())) - - // rename ns2 namespace - require.NoError(t, client.RenameNamespace(ctx, "ns2", "ns2-new")) - - // check if the data is still there - resp, err = client.RunDQL(ctx, "ns2-new", `{ q(func: has(name)) { name } }`) - require.NoError(t, err) - require.JSONEq(t, `{"q":[{"name":"Bob"}]}`, string(resp.GetQueryResult())) - - // List Namespaces - nsMaps, err := client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 3) - - // drop ns2-new namespace - require.NoError(t, client.DropNamespace(ctx, "ns2-new")) - _, err = client.RunDQL(ctx, "ns2-new", `{ q(func: has(name)) { name } }`) - require.ErrorContains(t, err, "namespace \"ns2-new\" not found") - nsMaps, err = client.ListNamespaces(ctx) - require.NoError(t, err) - require.Len(t, nsMaps, 2) - - // drop ns1 namespace - require.NoError(t, client.DropNamespace(ctx, "ns1")) - _, err = client.RunDQL(ctx, "ns1", `{ q(func: has(name)) { name } }`) - require.ErrorContains(t, err, "namespace \"ns1\" not found") -} diff --git a/edgraph/query.go b/edgraph/query.go index af92a7fa775..c2383e47798 100644 --- a/edgraph/query.go +++ b/edgraph/query.go @@ -10,34 +10,11 @@ import ( "fmt" "github.com/dgraph-io/dgo/v250/protos/api" - apiv2 "github.com/dgraph-io/dgo/v250/protos/api.v2" "github.com/hypermodeinc/dgraph/v25/dql" - "github.com/hypermodeinc/dgraph/v25/x" - - "google.golang.org/grpc/status" ) -func (s *ServerV25) Ping(ctx context.Context, req *apiv2.PingRequest) (*apiv2.PingResponse, error) { - if err := x.HealthCheck(); err != nil { - return nil, err - } - - return &apiv2.PingResponse{Version: x.Version()}, nil -} - // Alter handles requests to change the schema or remove parts or all of the data. -func (s *ServerV25) RunDQL(ctx context.Context, req *apiv2.RunDQLRequest) (*apiv2.RunDQLResponse, error) { - // For now, we only allow guardian of galaxies to do this operation in v25 - if err := AuthSuperAdmin(ctx); err != nil { - s := status.Convert(err) - return nil, status.Error(s.Code(), - "v25.RunDQL can only be called by the guardian of the galaxy. "+s.Message()) - } - - nsID, err := getNamespaceIDFromName(x.AttachJWTNamespace(ctx), req.NsName) - if err != nil { - return nil, fmt.Errorf("error retrieving namespace ID: %w", err) - } +func (s *Server) RunDQL(ctx context.Context, req *api.RunDQLRequest) (*api.Response, error) { apiReq, err := dql.ParseDQL(req.DqlQuery) if err != nil { @@ -47,47 +24,10 @@ func (s *ServerV25) RunDQL(ctx context.Context, req *apiv2.RunDQLRequest) (*apiv apiReq.Vars = req.Vars apiReq.ReadOnly = req.ReadOnly apiReq.BestEffort = req.BestEffort - apiReq.RespFormat = api.Request_JSON - if req.RespFormat == apiv2.RespFormat_RDF { - apiReq.RespFormat = api.Request_RDF - } + apiReq.RespFormat = req.RespFormat if len(apiReq.Mutations) > 0 { apiReq.CommitNow = true } - apiResp, err := (&Server{}).doQuery(x.AttachNamespace(ctx, nsID), - &Request{req: apiReq, doAuth: NoAuthorize}) - if err != nil { - return nil, err - } - - resp := &apiv2.RunDQLResponse{ - Txn: &apiv2.TxnContext{ - StartTs: apiResp.Txn.StartTs, - CommitTs: apiResp.Txn.CommitTs, - Aborted: apiResp.Txn.Aborted, - Keys: apiResp.Txn.Keys, - Preds: apiResp.Txn.Preds, - Hash: apiResp.Txn.Hash, - }, - BlankUids: apiResp.Uids, - Latency: &apiv2.Latency{ - ParsingNs: apiResp.Latency.ParsingNs, - ProcessingNs: apiResp.Latency.ProcessingNs, - RespEncodingNs: apiResp.Latency.EncodingNs, - AssignTimestampNs: apiResp.Latency.AssignTimestampNs, - TotalNs: apiResp.Latency.TotalNs, - }, - Metrics: &apiv2.Metrics{ - UidsTouched: apiResp.Metrics.NumUids, - }, - } - - if req.RespFormat == apiv2.RespFormat_JSON { - resp.QueryResult = apiResp.Json - } else if req.RespFormat == apiv2.RespFormat_RDF { - resp.QueryResult = apiResp.Rdf - } - - return resp, nil + return (&Server{}).doQuery(ctx, &Request{req: apiReq}) } diff --git a/edgraph/server.go b/edgraph/server.go index 6bfedb0c4c8..130939a888b 100644 --- a/edgraph/server.go +++ b/edgraph/server.go @@ -35,7 +35,6 @@ import ( "github.com/dgraph-io/dgo/v250" "github.com/dgraph-io/dgo/v250/protos/api" - apiv2 "github.com/dgraph-io/dgo/v250/protos/api.v2" "github.com/hypermodeinc/dgraph/v25/chunker" "github.com/hypermodeinc/dgraph/v25/conn" "github.com/hypermodeinc/dgraph/v25/dql" @@ -1816,8 +1815,8 @@ func validateNamespace(ctx context.Context, tc *api.TxnContext) error { return nil } -func (s *ServerV25) UpdateExtSnapshotStreamingState(ctx context.Context, - req *apiv2.UpdateExtSnapshotStreamingStateRequest) (v *apiv2.UpdateExtSnapshotStreamingStateResponse, err error) { +func (s *Server) UpdateExtSnapshotStreamingState(ctx context.Context, + req *api.UpdateExtSnapshotStreamingStateRequest) (v *api.UpdateExtSnapshotStreamingStateResponse, err error) { if req == nil { return nil, errors.New("UpdateExtSnapshotStreamingStateRequest must not be nil") @@ -1832,12 +1831,12 @@ func (s *ServerV25) UpdateExtSnapshotStreamingState(ctx context.Context, return nil, err } - resp := &apiv2.UpdateExtSnapshotStreamingStateResponse{Groups: groups} + resp := &api.UpdateExtSnapshotStreamingStateResponse{Groups: groups} return resp, nil } -func (s *ServerV25) StreamExtSnapshot(stream apiv2.Dgraph_StreamExtSnapshotServer) error { +func (s *Server) StreamExtSnapshot(stream api.Dgraph_StreamExtSnapshotServer) error { defer x.ExtSnapshotStreamingState(false) return worker.InStream(stream) diff --git a/edgraph/zero.go b/edgraph/zero.go index f5dae542ee1..ed77e71611c 100644 --- a/edgraph/zero.go +++ b/edgraph/zero.go @@ -9,7 +9,7 @@ import ( "context" "fmt" - apiv2 "github.com/dgraph-io/dgo/v250/protos/api.v2" + "github.com/dgraph-io/dgo/v250/protos/api" "github.com/hypermodeinc/dgraph/v25/protos/pb" "github.com/hypermodeinc/dgraph/v25/worker" @@ -17,8 +17,8 @@ import ( "google.golang.org/grpc/status" ) -func (s *ServerV25) AllocateIDs(ctx context.Context, req *apiv2.AllocateIDsRequest) ( - *apiv2.AllocateIDsResponse, error) { +func (s *Server) AllocateIDs(ctx context.Context, req *api.AllocateIDsRequest) ( + *api.AllocateIDsResponse, error) { // For now, we only allow users in superadmin group to do this operation in v25 if err := AuthSuperAdmin(ctx); err != nil { @@ -29,11 +29,11 @@ func (s *ServerV25) AllocateIDs(ctx context.Context, req *apiv2.AllocateIDsReque num := &pb.Num{Val: req.HowMany} switch req.LeaseType { - case apiv2.LeaseType_NS: + case api.LeaseType_NS: num.Type = pb.Num_NS_ID - case apiv2.LeaseType_UID: + case api.LeaseType_UID: num.Type = pb.Num_UID - case apiv2.LeaseType_TS: + case api.LeaseType_TS: num.Type = pb.Num_TXN_TS default: return nil, fmt.Errorf("invalid lease type: %v", req.LeaseType) @@ -44,5 +44,5 @@ func (s *ServerV25) AllocateIDs(ctx context.Context, req *apiv2.AllocateIDsReque return nil, errors.Wrapf(err, "Failed to allocate IDs") } - return &apiv2.AllocateIDsResponse{Start: resp.StartId, End: resp.EndId}, nil + return &api.AllocateIDsResponse{Start: resp.StartId, End: resp.EndId}, nil } diff --git a/go.mod b/go.mod index ebe76124ba9..d3eda3eb509 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/Masterminds/semver/v3 v3.4.0 github.com/blevesearch/bleve/v2 v2.5.3 github.com/dgraph-io/badger/v4 v4.8.0 - github.com/dgraph-io/dgo/v250 v250.0.0-preview4.0.20250619041351-4a519e53fb9d + github.com/dgraph-io/dgo/v250 v250.0.0-preview4.0.20250903065320-fda084b621ca github.com/dgraph-io/gqlgen v0.13.2 github.com/dgraph-io/gqlparser/v2 v2.2.2 github.com/dgraph-io/graphql-transport-ws v0.0.0-20210511143556-2cef522f1f15 diff --git a/go.sum b/go.sum index 5808d051530..47cf7ad31b4 100644 --- a/go.sum +++ b/go.sum @@ -132,8 +132,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgraph-io/badger/v4 v4.8.0 h1:JYph1ChBijCw8SLeybvPINizbDKWZ5n/GYbz2yhN/bs= github.com/dgraph-io/badger/v4 v4.8.0/go.mod h1:U6on6e8k/RTbUWxqKR0MvugJuVmkxSNc79ap4917h4w= -github.com/dgraph-io/dgo/v250 v250.0.0-preview4.0.20250619041351-4a519e53fb9d h1:9PLyvZY1Nih05g+2womk+kNnX3Gb20kx5BsK3foA5a8= -github.com/dgraph-io/dgo/v250 v250.0.0-preview4.0.20250619041351-4a519e53fb9d/go.mod h1:gLr7uM+x/8PjSQJ4Ca9kfQF15uBzruDzRK3bnELt3vE= +github.com/dgraph-io/dgo/v250 v250.0.0-preview4.0.20250903065320-fda084b621ca h1:Xn/aRxYMy47NVc3WjM5mfVuJ+Inktd5Tze2wW7bqxF4= +github.com/dgraph-io/dgo/v250 v250.0.0-preview4.0.20250903065320-fda084b621ca/go.mod h1:H3PcQuhmfzSC/1I7FLJYOxntpk3UG6lmZAyv0QxRm+o= github.com/dgraph-io/gqlgen v0.13.2 h1:TNhndk+eHKj5qE7BenKKSYdSIdOGhLqxR1rCiMso9KM= github.com/dgraph-io/gqlgen v0.13.2/go.mod h1:iCOrOv9lngN7KAo+jMgvUPVDlYHdf7qDwsTkQby2Sis= github.com/dgraph-io/gqlparser/v2 v2.1.1/go.mod h1:MYS4jppjyx8b9tuUtjV7jU1UFZK6P9fvO8TsIsQtRKU= diff --git a/protos/Makefile b/protos/Makefile index ca460ae364e..266a78806f9 100644 --- a/protos/Makefile +++ b/protos/Makefile @@ -41,8 +41,6 @@ copy-protos: ${TMPDIR}/src/${BADGER_PATH}/pb/pb.proto @cp $(shell go list -m -f "{{.Dir}}" ${DGO_PATH})/protos/api.proto \ ${TMPDIR}/src/${DGO_PATH}/protos/api.proto - @cp $(shell go list -m -f "{{.Dir}}" ${DGO_PATH})/protos/api.v2.proto \ - ${TMPDIR}/src/${DGO_PATH}/protos/api.v2.proto .PHONY: patch-pb patch-pb: @@ -50,15 +48,16 @@ patch-pb: .PHONY: regenerate regenerate: tidy-deps copy-protos check clean + echo ${DGO_PATH} @protoc \ --proto_path=/usr/local/include \ --proto_path=/usr/include \ + --proto_path=/opt/homebrew/include/google/protobuf \ --proto_path=${PROTO_PATH} \ --go_out=pb --go-grpc_out=pb \ --go_opt=paths=source_relative \ --go-grpc_opt=paths=source_relative \ --go_opt=M{DGO_PATH}/protos/api.proto={DGO_PATH}/protos/api \ - --go_opt=M{DGO_PATH}/protos/api.v2.proto={DGO_PATH}/protos/api.v2 \ pb.proto @$(MAKE) patch-pb @rm -rf ${TMPDIR} diff --git a/protos/depcheck.sh b/protos/depcheck.sh index d367e044053..8f74120ee45 100755 --- a/protos/depcheck.sh +++ b/protos/depcheck.sh @@ -37,7 +37,7 @@ function CompareSemVer() { function CheckProtobufIncludes() { echo -n "Checking for directory /usr/include/google/protobuf or /usr/local/include/google/protobuf... " - if !([[ -d /usr/include/google/protobuf ]] || [[ -d /usr/local/include/google/protobuf ]]); then + if ! { [[ -d /usr/include/google/protobuf ]] || [[ -d /usr/local/include/google/protobuf ]] || [[ -d /opt/homebrew/include/google/protobuf ]]; }; then echo "FAIL" >&2 echo "Missing protobuf headers in /usr/include/google/protobuf or /usr/local/include/google/protobuf:" \ "directory not found." >&2 diff --git a/protos/patch_pb.sh b/protos/patch_pb.sh index 21a5431f78a..1e243609ab5 100755 --- a/protos/patch_pb.sh +++ b/protos/patch_pb.sh @@ -9,10 +9,18 @@ # This patch script applies the necessary changes to pb.pb.go. PB_GEN_FILE="./pb/pb.pb.go" -sed -i 's/SessionToken string/SessionToken Sensitive/' "${PB_GEN_FILE}" -sed -i 's/SecretKey string/SecretKey Sensitive/' "${PB_GEN_FILE}" +# Function to perform in-place sed that works on both macOS and Linux +sed_inplace() { + local tmpfile + tmpfile=$(mktemp) + sed "$1" "$2" >"${tmpfile}" && mv "${tmpfile}" "$2" + rm -f "${tmpfile}" +} -sed -i 's/GetSessionToken() string {/GetSessionToken() Sensitive {/' "${PB_GEN_FILE}" -sed -i 's/GetSecretKey() string/GetSecretKey() Sensitive/' "${PB_GEN_FILE}" +# Apply the replacements using the cross-platform function +sed_inplace 's/SessionToken string/SessionToken Sensitive/' "${PB_GEN_FILE}" +sed_inplace 's/SecretKey string/SecretKey Sensitive/' "${PB_GEN_FILE}" +sed_inplace 's/GetSessionToken() string {/GetSessionToken() Sensitive {/' "${PB_GEN_FILE}" +sed_inplace 's/GetSecretKey() string/GetSecretKey() Sensitive/' "${PB_GEN_FILE}" echo "Patches applied successfully." diff --git a/protos/pb.proto b/protos/pb.proto index a78aa71f053..75cb4996a7a 100644 --- a/protos/pb.proto +++ b/protos/pb.proto @@ -13,7 +13,6 @@ syntax = "proto3"; package pb; import "github.com/dgraph-io/dgo/v250/protos/api.proto"; -import "github.com/dgraph-io/dgo/v250/protos/api.v2.proto"; import "github.com/dgraph-io/badger/v4/pb/pb.proto"; import "google/protobuf/descriptor.proto"; @@ -322,7 +321,7 @@ message Proposal { DeleteNsRequest delete_ns = 14; // Used to delete namespace. // Skipping 15 as it is used for uint64 key in master and might be needed later here. uint64 start_ts = 16; - api.v2.UpdateExtSnapshotStreamingStateRequest ext_snapshot_state = 17; + api.UpdateExtSnapshotStreamingStateRequest ext_snapshot_state = 17; } message CDCState { @@ -599,8 +598,8 @@ service Worker { returns (UpdateGraphQLSchemaResponse) {} rpc DeleteNamespace(DeleteNsRequest) returns (Status) {} rpc TaskStatus(TaskStatusRequest) returns (TaskStatusResponse) {} - rpc UpdateExtSnapshotStreamingState(api.v2.UpdateExtSnapshotStreamingStateRequest) returns (Status) {} - rpc StreamExtSnapshot(stream api.v2.StreamExtSnapshotRequest) returns (api.v2.StreamExtSnapshotResponse) {} + rpc UpdateExtSnapshotStreamingState(api.UpdateExtSnapshotStreamingStateRequest) returns (Status) {} + rpc StreamExtSnapshot(stream api.StreamExtSnapshotRequest) returns (api.StreamExtSnapshotResponse) {} } message TabletResponse { diff --git a/protos/pb/pb.pb.go b/protos/pb/pb.pb.go index 5a4cae68919..aafb38698de 100644 --- a/protos/pb/pb.pb.go +++ b/protos/pb/pb.pb.go @@ -18,7 +18,6 @@ package pb import ( pb "github.com/dgraph-io/badger/v4/pb" api "github.com/dgraph-io/dgo/v250/protos/api" - api_v2 "github.com/dgraph-io/dgo/v250/protos/api.v2" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" _ "google.golang.org/protobuf/types/descriptorpb" @@ -2700,8 +2699,8 @@ type Proposal struct { CdcState *CDCState `protobuf:"bytes,13,opt,name=cdc_state,json=cdcState,proto3" json:"cdc_state,omitempty"` DeleteNs *DeleteNsRequest `protobuf:"bytes,14,opt,name=delete_ns,json=deleteNs,proto3" json:"delete_ns,omitempty"` // Used to delete namespace. // Skipping 15 as it is used for uint64 key in master and might be needed later here. - StartTs uint64 `protobuf:"varint,16,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` - ExtSnapshotState *api_v2.UpdateExtSnapshotStreamingStateRequest `protobuf:"bytes,17,opt,name=ext_snapshot_state,json=extSnapshotState,proto3" json:"ext_snapshot_state,omitempty"` + StartTs uint64 `protobuf:"varint,16,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` + ExtSnapshotState *api.UpdateExtSnapshotStreamingStateRequest `protobuf:"bytes,17,opt,name=ext_snapshot_state,json=extSnapshotState,proto3" json:"ext_snapshot_state,omitempty"` } func (x *Proposal) Reset() { @@ -2820,7 +2819,7 @@ func (x *Proposal) GetStartTs() uint64 { return 0 } -func (x *Proposal) GetExtSnapshotState() *api_v2.UpdateExtSnapshotStreamingStateRequest { +func (x *Proposal) GetExtSnapshotState() *api.UpdateExtSnapshotStreamingStateRequest { if x != nil { return x.ExtSnapshotState } @@ -6088,729 +6087,690 @@ var file_pb_proto_rawDesc = []byte{ 0x0a, 0x08, 0x70, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x2d, 0x69, 0x6f, 0x2f, 0x64, 0x67, 0x6f, 0x2f, 0x76, 0x32, 0x35, 0x30, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, + 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x2d, 0x69, 0x6f, 0x2f, 0x64, 0x67, 0x6f, 0x2f, 0x76, 0x32, 0x35, 0x30, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x2f, 0x76, - 0x34, 0x2f, 0x70, 0x62, 0x2f, 0x70, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x1a, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x06, 0x52, 0x04, 0x75, 0x69, 0x64, 0x73, 0x22, 0x4d, 0x0a, 0x09, 0x54, - 0x61, 0x73, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x76, 0x61, - 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, - 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x22, 0x4f, 0x0a, 0x0b, 0x53, 0x72, - 0x63, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xde, 0x03, 0x0a, 0x05, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x6e, - 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x06, 0x52, 0x08, 0x61, 0x66, 0x74, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x64, 0x6f, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x64, 0x6f, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x08, 0x75, 0x69, 0x64, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x07, 0x75, 0x69, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x08, - 0x73, 0x72, 0x63, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x72, 0x63, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x07, 0x73, 0x72, 0x63, 0x46, 0x75, 0x6e, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, - 0x72, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, - 0x73, 0x65, 0x12, 0x30, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, - 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x63, - 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x65, 0x74, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x12, 0x33, 0x0a, 0x0d, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x5f, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, - 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x0c, 0x66, 0x61, 0x63, - 0x65, 0x74, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, - 0x61, 0x6e, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65, - 0x78, 0x70, 0x61, 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x32, 0x0a, 0x09, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x54, - 0x61, 0x73, 0x6b, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x22, 0x1e, 0x0a, 0x08, 0x4c, 0x61, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, - 0x22, 0xa0, 0x03, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x0a, 0x75, - 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x75, 0x69, 0x64, 0x4d, 0x61, - 0x74, 0x72, 0x69, 0x78, 0x12, 0x30, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, - 0x74, 0x72, 0x69, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x25, - 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, - 0x74, 0x44, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0c, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x6d, - 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, - 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x66, 0x61, 0x63, - 0x65, 0x74, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x2d, 0x0a, 0x0b, 0x6c, 0x61, 0x6e, 0x67, - 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x70, 0x62, 0x2e, 0x4c, 0x61, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x6c, 0x61, 0x6e, - 0x67, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0e, 0x76, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, - 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0d, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x1a, 0x40, 0x0a, 0x12, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x45, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, - 0x61, 0x74, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, - 0x64, 0x65, 0x73, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x0b, 0x53, - 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0a, 0x75, - 0x69, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x75, 0x69, 0x64, 0x4d, 0x61, - 0x74, 0x72, 0x69, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x22, 0x35, 0x0a, 0x0a, 0x53, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x0a, 0x75, 0x69, 0x64, - 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, - 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x75, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, - 0x69, 0x78, 0x22, 0x87, 0x01, 0x0a, 0x0b, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1f, 0x0a, 0x0b, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x12, 0x1d, 0x0a, - 0x0a, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x69, 0x73, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x22, 0xfe, 0x01, 0x0a, - 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x06, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x6d, 0x44, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, - 0x6d, 0x44, 0x65, 0x61, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x12, - 0x28, 0x0a, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4f, 0x6e, - 0x6c, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0xdd, 0x02, - 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x07, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x73, 0x1a, 0x46, 0x0a, - 0x0c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x68, 0x2d, 0x69, 0x6f, 0x2f, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x2f, 0x76, 0x34, 0x2f, 0x70, + 0x62, 0x2f, 0x70, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1a, 0x0a, 0x04, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x06, 0x52, 0x04, 0x75, 0x69, 0x64, 0x73, 0x22, 0x4d, 0x0a, 0x09, 0x54, 0x61, 0x73, 0x6b, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x2e, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, + 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, + 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x22, 0x4f, 0x0a, 0x0b, 0x53, 0x72, 0x63, 0x46, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, + 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x18, + 0x0a, 0x07, 0x69, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x69, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xde, 0x03, 0x0a, 0x05, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, + 0x61, 0x66, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x06, 0x52, + 0x08, 0x61, 0x66, 0x74, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x6f, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x6f, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x08, 0x75, 0x69, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x07, 0x75, 0x69, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x08, 0x73, 0x72, 0x63, + 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, + 0x2e, 0x53, 0x72, 0x63, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x72, + 0x63, 0x46, 0x75, 0x6e, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, + 0x30, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x33, 0x0a, 0x0d, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x0c, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, + 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65, 0x78, 0x70, 0x61, + 0x6e, 0x64, 0x41, 0x6c, 0x6c, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x12, 0x25, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x32, 0x0a, 0x09, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x73, 0x6b, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x1e, 0x0a, + 0x08, 0x4c, 0x61, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, + 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x22, 0xa0, 0x03, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x0a, 0x75, 0x69, 0x64, 0x5f, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, + 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x75, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x12, 0x30, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x74, + 0x72, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0d, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x44, 0x65, + 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0c, 0x66, 0x61, 0x63, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x72, + 0x69, 0x78, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, + 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x4d, + 0x61, 0x74, 0x72, 0x69, 0x78, 0x12, 0x2d, 0x0a, 0x0b, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, + 0x4c, 0x61, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0a, 0x6c, 0x61, 0x6e, 0x67, 0x4d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0e, 0x76, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0d, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, 0x40, + 0x0a, 0x12, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x45, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x12, 0x0a, + 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x65, 0x73, + 0x63, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x6c, 0x61, 0x6e, 0x67, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x72, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0a, 0x75, 0x69, 0x64, 0x5f, + 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, + 0x62, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x75, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, + 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x22, 0x35, 0x0a, 0x0a, 0x53, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x0a, 0x75, 0x69, 0x64, 0x5f, 0x6d, 0x61, + 0x74, 0x72, 0x69, 0x78, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, 0x62, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x75, 0x69, 0x64, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x22, + 0x87, 0x01, 0x0a, 0x0b, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, 0x64, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, + 0x5f, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x69, 0x73, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x22, 0xfe, 0x01, 0x0a, 0x06, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x64, + 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, + 0x44, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x6d, 0x44, 0x65, + 0x61, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x0f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4f, 0x6e, 0x6c, 0x79, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0xdd, 0x02, 0x0a, 0x05, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x73, 0x1a, 0x46, 0x0a, 0x0c, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, + 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b, 0x04, 0x0a, 0x0c, 0x5a, + 0x65, 0x72, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x41, 0x0a, 0x0b, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x12, 0x22, + 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, + 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x22, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x06, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x12, 0x1a, + 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, + 0x78, 0x4e, 0x73, 0x49, 0x44, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, + 0x4e, 0x73, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x03, 0x74, 0x78, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x52, 0x03, 0x74, 0x78, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x5a, + 0x65, 0x72, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x30, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, + 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x1a, 0x3d, 0x0a, + 0x0f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x08, + 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x22, 0xd0, 0x03, 0x0a, 0x0f, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, + 0x34, 0x0a, 0x05, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, + 0x4e, 0x73, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4e, + 0x73, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, + 0x64, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x1a, 0x44, 0x0a, 0x0b, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x44, 0x0a, 0x0a, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8b, 0x04, - 0x0a, 0x0c, 0x5a, 0x65, 0x72, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x41, - 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, - 0x73, 0x12, 0x22, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, - 0x55, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, - 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, - 0x66, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x52, - 0x61, 0x66, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x03, 0x74, 0x78, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x52, 0x03, 0x74, 0x78, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, - 0x62, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x30, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x5f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, - 0x1a, 0x3d, 0x0a, 0x0f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, - 0x04, 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x22, 0xd0, 0x03, 0x0a, 0x0f, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x06, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x12, 0x34, 0x0a, 0x05, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x55, - 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, - 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, - 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, - 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, - 0x66, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, - 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x1a, 0x44, 0x0a, 0x0b, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, - 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x44, 0x0a, 0x0a, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0x81, - 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x22, 0xb8, 0x02, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x45, - 0x63, 0x68, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x45, - 0x63, 0x68, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x18, 0x08, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x65, 0x5f, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x65, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, - 0x78, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x22, 0xf5, 0x01, - 0x0a, 0x06, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, - 0x6b, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, - 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x16, - 0x0a, 0x06, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x11, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe5, 0x02, 0x0a, 0x0c, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, - 0x74, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, - 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x06, 0x52, 0x07, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x02, 0x6f, - 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x02, 0x6f, 0x70, - 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, - 0x63, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x50, - 0x72, 0x65, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x50, 0x72, 0x65, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x1f, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x07, 0x0a, 0x03, - 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x4c, 0x10, 0x01, 0x12, 0x07, - 0x0a, 0x03, 0x4f, 0x56, 0x52, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xf1, 0x02, - 0x0a, 0x09, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0x81, 0x01, 0x0a, 0x0f, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x22, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, + 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, + 0xb8, 0x02, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x70, + 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x63, 0x68, 0x6f, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x63, 0x68, 0x6f, + 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x65, 0x5f, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x65, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, + 0x61, 0x78, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x22, 0xf5, 0x01, 0x0a, 0x06, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, + 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, + 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x6e, 0x44, 0x69, + 0x73, 0x6b, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, + 0x6f, 0x76, 0x65, 0x54, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x6f, 0x76, + 0x65, 0x54, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x11, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x22, 0xe5, 0x02, 0x0a, 0x0c, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, + 0x64, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x06, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, + 0x74, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, + 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x06, 0x52, 0x07, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x22, 0x0a, + 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, + 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x50, 0x72, 0x65, 0x64, + 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, + 0x50, 0x72, 0x65, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x22, 0x1f, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, + 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, 0x4c, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4f, + 0x56, 0x52, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xf1, 0x02, 0x0a, 0x09, 0x4d, + 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x26, + 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x70, 0x62, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x52, + 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x12, 0x24, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x6f, + 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x52, 0x06, 0x64, + 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x72, 0x6f, 0x70, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3e, + 0x0a, 0x06, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, + 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, + 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x12, + 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x4c, 0x5f, 0x49, 0x4e, 0x5f, 0x4e, 0x53, 0x10, 0x04, 0x22, 0xca, + 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x0a, 0x70, + 0x72, 0x65, 0x64, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, + 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x70, 0x72, + 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x53, 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x64, 0x48, + 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x48, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2d, 0x0a, 0x08, + 0x48, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, + 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x22, 0x93, 0x01, 0x0a, 0x08, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, + 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, + 0x64, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, + 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, + 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, + 0x73, 0x22, 0x74, 0x0a, 0x0c, 0x5a, 0x65, 0x72, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x73, 0x12, 0x29, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, + 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xdb, 0x05, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x54, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x2e, + 0x0a, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, + 0x0a, 0x0a, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x2a, 0x0a, + 0x11, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x69, 0x64, 0x5f, 0x66, 0x69, + 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x52, + 0x6f, 0x6c, 0x65, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x61, 0x75, + 0x6c, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x75, + 0x6c, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, + 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, + 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x75, + 0x6c, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x10, 0x69, + 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x61, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x66, 0x72, + 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x69, + 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x77, 0x61, 0x72, 0x65, 0x52, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x73, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x77, 0x61, 0x72, 0x65, 0x52, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xc5, 0x04, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, + 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x09, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x09, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x1d, 0x0a, 0x02, 0x6b, 0x76, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x62, 0x61, + 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x52, 0x02, 0x6b, 0x76, 0x12, 0x29, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6c, 0x65, + 0x61, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, + 0x74, 0x61, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x08, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, + 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x29, 0x0a, 0x09, 0x63, 0x64, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x44, 0x43, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63, 0x64, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x30, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x59, 0x0a, 0x12, + 0x65, 0x78, 0x74, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x65, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x23, 0x0a, + 0x08, 0x43, 0x44, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x6e, + 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74, + 0x54, 0x73, 0x22, 0x63, 0x0a, 0x03, 0x4b, 0x56, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, + 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x80, 0x04, 0x0a, 0x07, 0x50, 0x6f, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, + 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x76, + 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, + 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x70, + 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, + 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, + 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, + 0x61, 0x67, 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, + 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x22, 0xa0, + 0x01, 0x0a, 0x07, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, + 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, + 0x59, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, + 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4f, 0x4c, 0x10, + 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x05, 0x12, + 0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x49, 0x44, 0x10, + 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x08, 0x12, + 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x4f, + 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x49, 0x47, 0x46, 0x4c, + 0x4f, 0x41, 0x54, 0x10, 0x0b, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, + 0x0c, 0x22, 0x31, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x07, 0x0a, 0x03, 0x52, 0x45, 0x46, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x41, 0x4c, + 0x55, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x41, + 0x4e, 0x47, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x51, 0x0a, 0x08, 0x55, 0x69, + 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, + 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, + 0x61, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x69, 0x64, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x55, 0x69, 0x64, 0x73, 0x22, 0x6b, 0x0a, + 0x07, 0x55, 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x69, 0x64, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x66, 0x22, 0x8c, 0x01, 0x0a, 0x0b, 0x50, + 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x70, 0x61, + 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x69, + 0x64, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x04, 0x70, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x08, 0x70, + 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, + 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x04, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x22, 0x34, 0x0a, 0x0a, 0x46, 0x61, 0x63, + 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, + 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, + 0x4e, 0x0a, 0x0b, 0x46, 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x19, + 0x0a, 0x08, 0x61, 0x6c, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x24, 0x0a, 0x05, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, + 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x22, + 0x2c, 0x0a, 0x06, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, + 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x22, 0x39, 0x0a, + 0x0a, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0b, 0x66, + 0x61, 0x63, 0x65, 0x74, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x52, 0x0a, 0x66, 0x61, + 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x44, 0x0a, 0x08, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, + 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0x6a, + 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x2a, 0x0a, 0x08, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x08, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x04, 0x66, 0x75, 0x6e, 0x63, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x75, 0x6e, 0x63, 0x22, 0x78, 0x0a, 0x0d, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, - 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x73, 0x12, 0x26, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x64, - 0x67, 0x65, 0x52, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x72, 0x6f, - 0x70, 0x5f, 0x6f, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x2e, - 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, - 0x52, 0x06, 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x72, 0x6f, 0x70, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x72, - 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x3e, 0x0a, 0x06, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x08, 0x0a, 0x04, 0x4e, - 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x08, - 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, - 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x4c, 0x5f, 0x49, 0x4e, 0x5f, 0x4e, 0x53, 0x10, - 0x04, 0x22, 0xca, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, - 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x5f, 0x68, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x50, 0x72, 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x09, 0x70, 0x72, 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x53, 0x0a, 0x0e, 0x50, 0x72, - 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, - 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x48, 0x69, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x2d, 0x0a, 0x08, 0x48, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, - 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47, - 0x4c, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x22, 0x93, - 0x01, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, - 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, - 0x65, 0x61, 0x64, 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6e, - 0x63, 0x65, 0x5f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, - 0x63, 0x65, 0x54, 0x73, 0x22, 0x74, 0x0a, 0x0c, 0x5a, 0x65, 0x72, 0x6f, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x73, 0x12, - 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0xdb, 0x05, 0x0a, 0x0e, 0x52, - 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x23, - 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, - 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x46, 0x69, 0x6c, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x64, 0x64, 0x72, - 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x69, 0x64, - 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x61, 0x75, - 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x13, - 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x69, 0x64, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x76, 0x61, 0x75, 0x6c, 0x74, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x69, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x76, - 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, - 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, - 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x72, - 0x6f, 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, - 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x38, - 0x0a, 0x17, 0x69, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x77, 0x61, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x17, 0x69, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x77, 0x61, 0x72, - 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xc8, 0x04, 0x0a, 0x08, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x09, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x09, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x02, 0x6b, 0x76, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x52, 0x02, 0x6b, - 0x76, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, - 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, - 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2b, 0x0a, 0x11, - 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x73, - 0x74, 0x6f, 0x72, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, - 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, - 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x29, 0x0a, 0x09, 0x63, 0x64, 0x63, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, - 0x43, 0x44, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63, 0x64, 0x63, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6e, 0x73, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, - 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, - 0x5c, 0x0a, 0x12, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x65, 0x78, 0x74, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4a, 0x04, 0x08, - 0x07, 0x10, 0x08, 0x22, 0x23, 0x0a, 0x08, 0x43, 0x44, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x54, 0x73, 0x22, 0x63, 0x0a, 0x03, 0x4b, 0x56, 0x53, 0x12, - 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, - 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x80, 0x04, - 0x0a, 0x07, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, - 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, - 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, - 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x19, 0x0a, 0x08, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x5f, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x54, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x07, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, - 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, - 0x04, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, - 0x49, 0x4d, 0x45, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x07, - 0x0a, 0x03, 0x55, 0x49, 0x44, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x41, 0x53, 0x53, 0x57, - 0x4f, 0x52, 0x44, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, - 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0a, 0x12, 0x0c, 0x0a, - 0x08, 0x42, 0x49, 0x47, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x0b, 0x12, 0x0a, 0x0a, 0x06, 0x56, - 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x0c, 0x22, 0x31, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x45, 0x46, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x56, 0x41, - 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x41, 0x4e, 0x47, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, - 0x22, 0x51, 0x0a, 0x08, 0x55, 0x69, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, - 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, - 0x75, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x55, - 0x69, 0x64, 0x73, 0x22, 0x6b, 0x0a, 0x07, 0x55, 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x12, 0x1d, - 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, - 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x70, 0x62, 0x2e, 0x55, 0x69, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x72, 0x65, 0x66, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x66, - 0x22, 0x8c, 0x01, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x1f, 0x0a, 0x04, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x04, 0x70, 0x61, 0x63, - 0x6b, 0x12, 0x27, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x22, - 0x34, 0x0a, 0x0a, 0x46, 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x4e, 0x0a, 0x0b, 0x46, 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x12, - 0x24, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x2c, 0x0a, 0x06, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, - 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, - 0x65, 0x74, 0x73, 0x22, 0x39, 0x0a, 0x0a, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x2b, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x63, 0x65, - 0x74, 0x73, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x44, - 0x0a, 0x08, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, - 0x61, 0x72, 0x67, 0x73, 0x22, 0x6a, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, - 0x65, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x6f, 0x70, 0x12, 0x2a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x54, 0x72, 0x65, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x20, - 0x0a, 0x04, 0x66, 0x75, 0x6e, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, - 0x62, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x75, 0x6e, 0x63, - 0x22, 0x78, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, - 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x0a, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, - 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, - 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x0a, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, + 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, + 0x65, 0x72, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, + 0x72, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, + 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x6e, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, + 0x69, 0x71, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x70, 0x65, 0x63, + 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x73, 0x22, 0x3a, 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x22, 0xc1, 0x04, 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, - 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, - 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, - 0x61, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, - 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6e, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x62, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x73, 0x22, 0x3a, - 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2a, - 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x02, - 0x18, 0x01, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xc1, 0x04, 0x0a, 0x0c, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, - 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x09, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, - 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x75, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x6e, 0x4e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, - 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x6e, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x6e, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0a, 0x6e, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x12, 0x34, 0x0a, - 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x0f, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, - 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, - 0x65, 0x63, 0x73, 0x22, 0x39, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, - 0x44, 0x45, 0x58, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, - 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x4a, 0x04, - 0x08, 0x07, 0x10, 0x08, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x22, 0x4f, - 0x0a, 0x0f, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, - 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x34, 0x0a, 0x0a, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x53, 0x0a, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x28, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x32, 0x0a, 0x09, 0x4d, 0x61, - 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, - 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x22, 0xb2, - 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x67, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x47, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x67, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x65, 0x73, 0x74, 0x47, 0x69, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x74, 0x78, 0x6e, 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x74, 0x78, 0x6e, 0x54, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x73, 0x75, 0x6d, 0x22, 0x43, 0x0a, 0x09, 0x54, 0x78, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x22, 0xe4, 0x01, 0x0a, 0x0b, 0x4f, 0x72, 0x61, - 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x78, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x78, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x04, 0x74, 0x78, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, - 0x61, 0x78, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x4c, - 0x0a, 0x0f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, - 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x1a, 0x41, 0x0a, 0x13, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x1f, 0x0a, 0x0d, 0x54, 0x78, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, - 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x02, 0x74, 0x73, - 0x22, 0x26, 0x0a, 0x0c, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5e, 0x0a, 0x09, 0x52, 0x61, 0x66, 0x74, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x12, 0x26, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x36, 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, - 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, - 0x22, 0x50, 0x0a, 0x0d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, - 0x62, 0x34, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x22, 0x3b, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x03, 0x6b, 0x76, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, - 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x03, 0x6b, 0x76, 0x73, 0x22, 0xba, - 0x01, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, - 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, - 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x62, 0x75, 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x2e, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2b, - 0x0a, 0x09, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x4e, - 0x53, 0x5f, 0x49, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x49, 0x44, 0x10, 0x01, 0x12, - 0x0a, 0x0a, 0x06, 0x54, 0x58, 0x4e, 0x5f, 0x54, 0x53, 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x0b, 0x41, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x45, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x6f, - 0x64, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x65, - 0x0a, 0x11, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x73, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x46, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x54, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2e, 0x0a, - 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, - 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xd9, 0x02, - 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6e, 0x63, - 0x65, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, - 0x65, 0x54, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x75, 0x6e, 0x69, 0x78, 0x54, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, - 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x6f, - 0x72, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x66, 0x6f, 0x72, 0x63, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x22, 0x4c, 0x0a, 0x0e, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0f, 0x64, - 0x72, 0x6f, 0x70, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0d, 0x44, 0x72, 0x6f, 0x70, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x72, 0x6f, - 0x70, 0x5f, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, - 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x72, - 0x6f, 0x70, 0x4f, 0x70, 0x52, 0x06, 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x1d, 0x0a, 0x0a, - 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x06, 0x44, - 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x54, 0x54, 0x52, - 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x53, 0x10, 0x03, 0x22, 0xb5, 0x02, 0x0a, 0x0d, 0x45, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x78, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x73, + 0x65, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x6e, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x6f, 0x6e, + 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6e, 0x6f, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, + 0x62, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, + 0x63, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x73, 0x22, 0x39, 0x0a, + 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, + 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x01, 0x12, + 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x52, 0x08, + 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x22, 0x4f, 0x0a, 0x0f, 0x56, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x28, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x69, 0x72, + 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x34, 0x0a, 0x0a, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x53, 0x0a, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x73, 0x22, 0x32, 0x0a, 0x09, 0x4d, 0x61, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, + 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x76, + 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x69, 0x64, 0x12, 0x19, + 0x0a, 0x08, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x67, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x07, 0x64, 0x65, 0x73, 0x74, 0x47, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x6e, + 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x78, 0x6e, 0x54, 0x73, + 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x65, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x22, 0x43, 0x0a, + 0x09, 0x54, 0x78, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x54, 0x73, 0x22, 0xe4, 0x01, 0x0a, 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, + 0x74, 0x61, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x78, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x78, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x04, 0x74, 0x78, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x73, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, + 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x0f, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, + 0x74, 0x61, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1f, 0x0a, 0x0d, 0x54, 0x78, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x02, 0x74, 0x73, 0x22, 0x26, 0x0a, 0x0c, 0x50, 0x65, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x5e, 0x0a, 0x09, 0x52, 0x61, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x29, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x0a, 0x07, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x22, 0x36, 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x50, 0x0a, 0x0d, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, + 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x13, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, + 0x2a, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x22, 0x3b, 0x0a, 0x14, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x03, 0x6b, 0x76, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x03, 0x6b, 0x76, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x03, 0x4e, 0x75, 0x6d, + 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x76, + 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, + 0x1c, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x62, 0x75, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x62, 0x75, 0x6d, + 0x70, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x09, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x4e, 0x53, 0x5f, 0x49, 0x44, 0x10, 0x00, + 0x12, 0x07, 0x0a, 0x03, 0x55, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x58, 0x4e, + 0x5f, 0x54, 0x53, 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, + 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, + 0x79, 0x22, 0x45, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x11, 0x4d, 0x6f, 0x76, 0x65, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, + 0x46, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, + 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x73, 0x12, 0x19, 0x0a, 0x08, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xd9, 0x02, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, + 0x64, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, + 0x54, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x78, + 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x78, 0x54, + 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, @@ -6820,195 +6780,230 @@ var file_pb_proto_rawDesc = []byte{ 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, - 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x22, 0xab, 0x02, 0x0a, 0x09, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x29, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, - 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x10, 0x0a, - 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x55, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x65, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x22, 0x68, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x44, 0x41, 0x54, 0x41, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, - 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x03, 0x12, 0x09, - 0x0a, 0x05, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x55, - 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x56, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x43, 0x48, 0x45, - 0x4d, 0x41, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, 0x10, 0x07, 0x22, 0xa2, - 0x01, 0x0a, 0x11, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x04, 0x52, 0x04, 0x75, 0x69, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, - 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, - 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x69, 0x64, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x69, 0x64, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x25, 0x0a, - 0x0e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x12, 0x33, 0x0a, 0x0c, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x70, - 0x72, 0x65, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x50, 0x72, 0x65, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x0c, 0x64, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x0b, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x2f, 0x0a, 0x1b, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xdb, 0x01, - 0x0a, 0x08, 0x42, 0x75, 0x6c, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x64, - 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x65, 0x64, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x70, 0x62, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x4d, 0x61, 0x70, 0x12, 0x24, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x4e, 0x0a, 0x0e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0f, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x11, 0x54, 0x61, 0x73, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, - 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, - 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x31, 0x0a, 0x12, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x61, 0x73, 0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x74, 0x61, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x32, 0xc4, 0x01, 0x0a, 0x04, 0x52, 0x61, 0x66, - 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x0c, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0e, 0x2e, 0x70, - 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x2e, 0x0a, 0x0b, 0x52, 0x61, 0x66, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x0c, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, - 0x12, 0x2e, 0x0a, 0x0b, 0x4a, 0x6f, 0x69, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, - 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, - 0x12, 0x2d, 0x0a, 0x06, 0x49, 0x73, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, - 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x62, - 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, - 0xfd, 0x04, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, 0x12, 0x2c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x12, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x1a, - 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x30, 0x01, - 0x12, 0x2b, 0x0a, 0x06, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, - 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x27, 0x0a, - 0x0b, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x12, 0x0a, 0x2e, 0x70, - 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x06, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x09, 0x41, 0x73, 0x73, - 0x69, 0x67, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x1a, - 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, 0x73, - 0x22, 0x00, 0x12, 0x28, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, + 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x75, + 0x6c, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x46, + 0x75, 0x6c, 0x6c, 0x22, 0x4c, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0d, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x6f, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x52, 0x06, + 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x72, 0x6f, 0x70, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x06, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, + 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, + 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x54, 0x54, 0x52, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, + 0x4e, 0x53, 0x10, 0x03, 0x22, 0xb5, 0x02, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, + 0x69, 0x78, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x6e, 0x69, + 0x78, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, + 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, + 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x09, 0x42, + 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x4b, 0x65, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x55, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x68, + 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, + 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x55, 0x4e, + 0x54, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x56, + 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x41, 0x10, 0x06, 0x12, 0x08, + 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, 0x10, 0x07, 0x22, 0xa2, 0x01, 0x0a, 0x11, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x75, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x04, 0x75, 0x69, + 0x64, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, + 0x67, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x70, 0x6c, 0x69, + 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x69, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x69, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xc6, 0x01, + 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x70, 0x68, + 0x71, 0x6c, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x33, + 0x0a, 0x0c, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x50, 0x72, + 0x65, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x0c, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x2f, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xdb, 0x01, 0x0a, 0x08, 0x42, 0x75, 0x6c, 0x6b, + 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6d, 0x61, + 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x6c, + 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x61, 0x70, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x61, 0x70, 0x12, + 0x24, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x4e, 0x0a, 0x0e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, + 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x22, 0x2c, 0x0a, 0x11, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, + 0x31, 0x0a, 0x12, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x4d, 0x65, + 0x74, 0x61, 0x32, 0xc4, 0x01, 0x0a, 0x04, 0x52, 0x61, 0x66, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x48, + 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x30, 0x01, 0x12, 0x2e, 0x0a, 0x0b, 0x52, 0x61, + 0x66, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x52, + 0x61, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x12, 0x2e, 0x0a, 0x0b, 0x4a, 0x6f, + 0x69, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, + 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x06, 0x49, 0x73, + 0x50, 0x65, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xfd, 0x04, 0x0a, 0x04, 0x5a, 0x65, + 0x72, 0x6f, 0x12, 0x2c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x0a, 0x2e, + 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, + 0x12, 0x2d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, + 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, + 0x39, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x68, 0x69, 0x70, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x06, 0x4f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, + 0x6c, 0x74, 0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x27, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x75, 0x6c, + 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x12, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0x00, + 0x12, 0x31, 0x0a, 0x06, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, + 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, + 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x09, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x41, - 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, 0x73, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0d, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4f, 0x72, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x0f, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x0f, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, - 0x00, 0x12, 0x30, 0x0a, 0x08, 0x54, 0x72, 0x79, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x11, 0x2e, - 0x70, 0x62, 0x2e, 0x54, 0x78, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, - 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, - 0x61, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0a, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, - 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0a, - 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, - 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x32, - 0xad, 0x07, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x4d, 0x75, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x65, 0x54, - 0x61, 0x73, 0x6b, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0a, - 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x0c, - 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x07, 0x2e, 0x70, - 0x62, 0x2e, 0x4b, 0x56, 0x53, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x29, 0x0a, 0x04, 0x53, - 0x6f, 0x72, 0x74, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, - 0x70, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2b, 0x0a, 0x07, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x06, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x10, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x07, - 0x2e, 0x70, 0x62, 0x2e, 0x4b, 0x56, 0x53, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x12, 0x39, 0x0a, 0x0d, 0x4d, 0x6f, 0x76, - 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, - 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x62, 0x61, 0x64, - 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x30, - 0x01, 0x12, 0x58, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, - 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0f, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x13, - 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, 0x73, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x0a, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x12, 0x07, 0x2e, 0x70, 0x62, 0x2e, + 0x4e, 0x75, 0x6d, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x64, 0x49, 0x64, 0x73, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x4f, 0x72, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, + 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, + 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x08, 0x54, + 0x72, 0x79, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x78, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, + 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x22, 0x00, 0x12, 0x34, 0x0a, + 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0a, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x32, 0xa4, 0x07, 0x0a, 0x06, 0x57, 0x6f, + 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0d, + 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x00, + 0x12, 0x24, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x09, 0x2e, + 0x70, 0x62, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x4b, 0x56, 0x53, 0x22, + 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x29, 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x0f, 0x2e, + 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x0e, + 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, + 0x12, 0x2f, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, + 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, + 0x00, 0x12, 0x31, 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, 0x11, 0x2e, 0x70, 0x62, + 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, + 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x2b, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, + 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x00, 0x12, 0x3d, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x73, 0x6b, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x5f, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, + 0x00, 0x12, 0x31, 0x0a, 0x06, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x11, 0x2e, 0x70, 0x62, + 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, + 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x50, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x4b, 0x56, + 0x53, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0x00, 0x28, 0x01, 0x12, 0x39, 0x0a, 0x0d, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, + 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0c, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x3b, + 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, + 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, + 0x2e, 0x4b, 0x56, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x13, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, + 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0a, 0x54, + 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x54, + 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x1f, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, - 0x00, 0x12, 0x5c, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x74, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x42, - 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1d, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x78, 0x74, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, + 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7121,12 +7116,12 @@ var file_pb_proto_goTypes = []interface{}{ (*api.TxnContext)(nil), // 92: api.TxnContext (*api.Facet)(nil), // 93: api.Facet (*pb.KV)(nil), // 94: badgerpb4.KV - (*api_v2.UpdateExtSnapshotStreamingStateRequest)(nil), // 95: api.v2.UpdateExtSnapshotStreamingStateRequest - (*api.Payload)(nil), // 96: api.Payload - (*pb.Match)(nil), // 97: badgerpb4.Match - (*pb.KVList)(nil), // 98: badgerpb4.KVList - (*api_v2.StreamExtSnapshotRequest)(nil), // 99: api.v2.StreamExtSnapshotRequest - (*api_v2.StreamExtSnapshotResponse)(nil), // 100: api.v2.StreamExtSnapshotResponse + (*api.UpdateExtSnapshotStreamingStateRequest)(nil), // 95: api.UpdateExtSnapshotStreamingStateRequest + (*api.Payload)(nil), // 96: api.Payload + (*pb.Match)(nil), // 97: badgerpb4.Match + (*pb.KVList)(nil), // 98: badgerpb4.KVList + (*api.StreamExtSnapshotRequest)(nil), // 99: api.StreamExtSnapshotRequest + (*api.StreamExtSnapshotResponse)(nil), // 100: api.StreamExtSnapshotResponse } var file_pb_proto_depIdxs = []int32{ 3, // 0: pb.TaskValue.val_type:type_name -> pb.Posting.ValType @@ -7177,7 +7172,7 @@ var file_pb_proto_depIdxs = []int32{ 32, // 45: pb.Proposal.restore:type_name -> pb.RestoreRequest 34, // 46: pb.Proposal.cdc_state:type_name -> pb.CDCState 80, // 47: pb.Proposal.delete_ns:type_name -> pb.DeleteNsRequest - 95, // 48: pb.Proposal.ext_snapshot_state:type_name -> api.v2.UpdateExtSnapshotStreamingStateRequest + 95, // 48: pb.Proposal.ext_snapshot_state:type_name -> api.UpdateExtSnapshotStreamingStateRequest 3, // 49: pb.Posting.val_type:type_name -> pb.Posting.ValType 4, // 50: pb.Posting.posting_type:type_name -> pb.Posting.PostingType 93, // 51: pb.Posting.facets:type_name -> api.Facet @@ -7250,8 +7245,8 @@ var file_pb_proto_depIdxs = []int32{ 77, // 118: pb.Worker.UpdateGraphQLSchema:input_type -> pb.UpdateGraphQLSchemaRequest 80, // 119: pb.Worker.DeleteNamespace:input_type -> pb.DeleteNsRequest 81, // 120: pb.Worker.TaskStatus:input_type -> pb.TaskStatusRequest - 95, // 121: pb.Worker.UpdateExtSnapshotStreamingState:input_type -> api.v2.UpdateExtSnapshotStreamingStateRequest - 99, // 122: pb.Worker.StreamExtSnapshot:input_type -> api.v2.StreamExtSnapshotRequest + 95, // 121: pb.Worker.UpdateExtSnapshotStreamingState:input_type -> api.UpdateExtSnapshotStreamingStateRequest + 99, // 122: pb.Worker.StreamExtSnapshot:input_type -> api.StreamExtSnapshotRequest 25, // 123: pb.Raft.Heartbeat:output_type -> pb.HealthInfo 96, // 124: pb.Raft.RaftMessage:output_type -> api.Payload 96, // 125: pb.Raft.JoinCluster:output_type -> api.Payload @@ -7284,7 +7279,7 @@ var file_pb_proto_depIdxs = []int32{ 69, // 152: pb.Worker.DeleteNamespace:output_type -> pb.Status 82, // 153: pb.Worker.TaskStatus:output_type -> pb.TaskStatusResponse 69, // 154: pb.Worker.UpdateExtSnapshotStreamingState:output_type -> pb.Status - 100, // 155: pb.Worker.StreamExtSnapshot:output_type -> api.v2.StreamExtSnapshotResponse + 100, // 155: pb.Worker.StreamExtSnapshot:output_type -> api.StreamExtSnapshotResponse 123, // [123:156] is the sub-list for method output_type 90, // [90:123] is the sub-list for method input_type 90, // [90:90] is the sub-list for extension type_name diff --git a/protos/pb/pb_grpc.pb.go b/protos/pb/pb_grpc.pb.go index 23b300b9dac..af9438a532e 100644 --- a/protos/pb/pb_grpc.pb.go +++ b/protos/pb/pb_grpc.pb.go @@ -19,7 +19,6 @@ import ( context "context" pb "github.com/dgraph-io/badger/v4/pb" api "github.com/dgraph-io/dgo/v250/protos/api" - api_v2 "github.com/dgraph-io/dgo/v250/protos/api.v2" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -922,7 +921,7 @@ type WorkerClient interface { UpdateGraphQLSchema(ctx context.Context, in *UpdateGraphQLSchemaRequest, opts ...grpc.CallOption) (*UpdateGraphQLSchemaResponse, error) DeleteNamespace(ctx context.Context, in *DeleteNsRequest, opts ...grpc.CallOption) (*Status, error) TaskStatus(ctx context.Context, in *TaskStatusRequest, opts ...grpc.CallOption) (*TaskStatusResponse, error) - UpdateExtSnapshotStreamingState(ctx context.Context, in *api_v2.UpdateExtSnapshotStreamingStateRequest, opts ...grpc.CallOption) (*Status, error) + UpdateExtSnapshotStreamingState(ctx context.Context, in *api.UpdateExtSnapshotStreamingStateRequest, opts ...grpc.CallOption) (*Status, error) StreamExtSnapshot(ctx context.Context, opts ...grpc.CallOption) (Worker_StreamExtSnapshotClient, error) } @@ -1130,7 +1129,7 @@ func (c *workerClient) TaskStatus(ctx context.Context, in *TaskStatusRequest, op return out, nil } -func (c *workerClient) UpdateExtSnapshotStreamingState(ctx context.Context, in *api_v2.UpdateExtSnapshotStreamingStateRequest, opts ...grpc.CallOption) (*Status, error) { +func (c *workerClient) UpdateExtSnapshotStreamingState(ctx context.Context, in *api.UpdateExtSnapshotStreamingStateRequest, opts ...grpc.CallOption) (*Status, error) { out := new(Status) err := c.cc.Invoke(ctx, Worker_UpdateExtSnapshotStreamingState_FullMethodName, in, out, opts...) if err != nil { @@ -1149,8 +1148,8 @@ func (c *workerClient) StreamExtSnapshot(ctx context.Context, opts ...grpc.CallO } type Worker_StreamExtSnapshotClient interface { - Send(*api_v2.StreamExtSnapshotRequest) error - CloseAndRecv() (*api_v2.StreamExtSnapshotResponse, error) + Send(*api.StreamExtSnapshotRequest) error + CloseAndRecv() (*api.StreamExtSnapshotResponse, error) grpc.ClientStream } @@ -1158,15 +1157,15 @@ type workerStreamExtSnapshotClient struct { grpc.ClientStream } -func (x *workerStreamExtSnapshotClient) Send(m *api_v2.StreamExtSnapshotRequest) error { +func (x *workerStreamExtSnapshotClient) Send(m *api.StreamExtSnapshotRequest) error { return x.ClientStream.SendMsg(m) } -func (x *workerStreamExtSnapshotClient) CloseAndRecv() (*api_v2.StreamExtSnapshotResponse, error) { +func (x *workerStreamExtSnapshotClient) CloseAndRecv() (*api.StreamExtSnapshotResponse, error) { if err := x.ClientStream.CloseSend(); err != nil { return nil, err } - m := new(api_v2.StreamExtSnapshotResponse) + m := new(api.StreamExtSnapshotResponse) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } @@ -1192,7 +1191,7 @@ type WorkerServer interface { UpdateGraphQLSchema(context.Context, *UpdateGraphQLSchemaRequest) (*UpdateGraphQLSchemaResponse, error) DeleteNamespace(context.Context, *DeleteNsRequest) (*Status, error) TaskStatus(context.Context, *TaskStatusRequest) (*TaskStatusResponse, error) - UpdateExtSnapshotStreamingState(context.Context, *api_v2.UpdateExtSnapshotStreamingStateRequest) (*Status, error) + UpdateExtSnapshotStreamingState(context.Context, *api.UpdateExtSnapshotStreamingStateRequest) (*Status, error) StreamExtSnapshot(Worker_StreamExtSnapshotServer) error mustEmbedUnimplementedWorkerServer() } @@ -1243,7 +1242,7 @@ func (UnimplementedWorkerServer) DeleteNamespace(context.Context, *DeleteNsReque func (UnimplementedWorkerServer) TaskStatus(context.Context, *TaskStatusRequest) (*TaskStatusResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TaskStatus not implemented") } -func (UnimplementedWorkerServer) UpdateExtSnapshotStreamingState(context.Context, *api_v2.UpdateExtSnapshotStreamingStateRequest) (*Status, error) { +func (UnimplementedWorkerServer) UpdateExtSnapshotStreamingState(context.Context, *api.UpdateExtSnapshotStreamingStateRequest) (*Status, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateExtSnapshotStreamingState not implemented") } func (UnimplementedWorkerServer) StreamExtSnapshot(Worker_StreamExtSnapshotServer) error { @@ -1534,7 +1533,7 @@ func _Worker_TaskStatus_Handler(srv interface{}, ctx context.Context, dec func(i } func _Worker_UpdateExtSnapshotStreamingState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(api_v2.UpdateExtSnapshotStreamingStateRequest) + in := new(api.UpdateExtSnapshotStreamingStateRequest) if err := dec(in); err != nil { return nil, err } @@ -1546,7 +1545,7 @@ func _Worker_UpdateExtSnapshotStreamingState_Handler(srv interface{}, ctx contex FullMethod: Worker_UpdateExtSnapshotStreamingState_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(WorkerServer).UpdateExtSnapshotStreamingState(ctx, req.(*api_v2.UpdateExtSnapshotStreamingStateRequest)) + return srv.(WorkerServer).UpdateExtSnapshotStreamingState(ctx, req.(*api.UpdateExtSnapshotStreamingStateRequest)) } return interceptor(ctx, in, info, handler) } @@ -1556,8 +1555,8 @@ func _Worker_StreamExtSnapshot_Handler(srv interface{}, stream grpc.ServerStream } type Worker_StreamExtSnapshotServer interface { - SendAndClose(*api_v2.StreamExtSnapshotResponse) error - Recv() (*api_v2.StreamExtSnapshotRequest, error) + SendAndClose(*api.StreamExtSnapshotResponse) error + Recv() (*api.StreamExtSnapshotRequest, error) grpc.ServerStream } @@ -1565,12 +1564,12 @@ type workerStreamExtSnapshotServer struct { grpc.ServerStream } -func (x *workerStreamExtSnapshotServer) SendAndClose(m *api_v2.StreamExtSnapshotResponse) error { +func (x *workerStreamExtSnapshotServer) SendAndClose(m *api.StreamExtSnapshotResponse) error { return x.ServerStream.SendMsg(m) } -func (x *workerStreamExtSnapshotServer) Recv() (*api_v2.StreamExtSnapshotRequest, error) { - m := new(api_v2.StreamExtSnapshotRequest) +func (x *workerStreamExtSnapshotServer) Recv() (*api.StreamExtSnapshotRequest, error) { + m := new(api.StreamExtSnapshotRequest) if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err } diff --git a/worker/import.go b/worker/import.go index 1f9bbe76035..73d915df8b7 100644 --- a/worker/import.go +++ b/worker/import.go @@ -11,7 +11,7 @@ import ( "io" "sync" - apiv2 "github.com/dgraph-io/dgo/v250/protos/api.v2" + "github.com/dgraph-io/dgo/v250/protos/api" "github.com/dgraph-io/ristretto/v2/z" "github.com/hypermodeinc/dgraph/v25/conn" "github.com/hypermodeinc/dgraph/v25/posting" @@ -25,20 +25,20 @@ import ( ) type pubSub struct { - subscribers []chan *apiv2.StreamExtSnapshotRequest + subscribers []chan *api.StreamExtSnapshotRequest sync.RWMutex } // Subscribe returns a new channel to receive published messages -func (ps *pubSub) subscribe() <-chan *apiv2.StreamExtSnapshotRequest { - ch := make(chan *apiv2.StreamExtSnapshotRequest, 20) +func (ps *pubSub) subscribe() <-chan *api.StreamExtSnapshotRequest { + ch := make(chan *api.StreamExtSnapshotRequest, 20) ps.Lock() defer ps.Unlock() ps.subscribers = append(ps.subscribers, ch) return ch } -func (ps *pubSub) publish(msg *apiv2.StreamExtSnapshotRequest) { +func (ps *pubSub) publish(msg *api.StreamExtSnapshotRequest) { // Send message to all subscribers without dropping any ps.RLock() defer ps.RUnlock() @@ -56,7 +56,7 @@ func (ps *pubSub) close() { ps.subscribers = nil } -func (ps *pubSub) handlePublisher(ctx context.Context, stream apiv2.Dgraph_StreamExtSnapshotServer) error { +func (ps *pubSub) handlePublisher(ctx context.Context, stream api.Dgraph_StreamExtSnapshotServer) error { for { select { case <-ctx.Done(): @@ -77,7 +77,7 @@ func (ps *pubSub) handlePublisher(ctx context.Context, stream apiv2.Dgraph_Strea } -func (ps *pubSub) runForwardSubscriber(ctx context.Context, out apiv2.Dgraph_StreamExtSnapshotClient, peerId string) error { +func (ps *pubSub) runForwardSubscriber(ctx context.Context, out api.Dgraph_StreamExtSnapshotClient, peerId string) error { buffer := ps.subscribe() size := 0 Loop: @@ -92,12 +92,12 @@ Loop: break Loop } - data := &apiv2.StreamExtSnapshotRequest{Pkt: &apiv2.StreamPacket{Data: msg.Pkt.Data}} + data := &api.StreamExtSnapshotRequest{Pkt: &api.StreamPacket{Data: msg.Pkt.Data}} if msg.Pkt.Done { glog.Infof("[import] received done signal from [%v]", peerId) - d := apiv2.StreamPacket{Done: true} - if err := out.Send(&apiv2.StreamExtSnapshotRequest{Pkt: &d}); err != nil { + d := api.StreamPacket{Done: true} + if err := out.Send(&api.StreamExtSnapshotRequest{Pkt: &d}); err != nil { return err } break Loop @@ -154,7 +154,7 @@ Loop: return postStreamProcessing(ctx) } -func ProposeDrain(ctx context.Context, drainMode *apiv2.UpdateExtSnapshotStreamingStateRequest) ([]uint32, error) { +func ProposeDrain(ctx context.Context, drainMode *api.UpdateExtSnapshotStreamingStateRequest) ([]uint32, error) { memState := GetMembershipState() currentGroups := make([]uint32, 0) for gid := range memState.GetGroups() { @@ -195,8 +195,7 @@ func ProposeDrain(ctx context.Context, drainMode *apiv2.UpdateExtSnapshotStreami // with the leader of that group and streams data to it. The function returns an error if // there are any issues in the process, such as a broken connection or failure to establish // a stream with the leader. -func InStream(stream apiv2.Dgraph_StreamExtSnapshotServer) error { - +func InStream(stream api.Dgraph_StreamExtSnapshotServer) error { req, err := stream.Recv() if err != nil { return fmt.Errorf("failed to receive initial stream message: %v", err) @@ -223,7 +222,7 @@ func InStream(stream apiv2.Dgraph_StreamExtSnapshotServer) error { } glog.Infof("[import] sending forward true to leader of group [%v]", groupId) - forwardReq := &apiv2.StreamExtSnapshotRequest{Forward: true} + forwardReq := &api.StreamExtSnapshotRequest{Forward: true} if err := alphaStream.Send(forwardReq); err != nil { return fmt.Errorf("failed streamInGroupto send forward request: %w", err) } @@ -231,14 +230,14 @@ func InStream(stream apiv2.Dgraph_StreamExtSnapshotServer) error { return pipeTwoStream(stream, alphaStream, groupId) } -func pipeTwoStream(in apiv2.Dgraph_StreamExtSnapshotServer, out pb.Worker_StreamExtSnapshotClient, +func pipeTwoStream(in api.Dgraph_StreamExtSnapshotServer, out pb.Worker_StreamExtSnapshotClient, groupId uint32) error { currentGroup := groups().Node.gid glog.Infof("[import] [forward from group-%v to group-%v] forwarding stream", currentGroup, groupId) defer func() { - if err := in.SendAndClose(&apiv2.StreamExtSnapshotResponse{}); err != nil { + if err := in.SendAndClose(&api.StreamExtSnapshotResponse{}); err != nil { glog.Errorf("[import] [forward from group %v to group %v] failed to send close on in"+ " stream for group [%v]: %v", currentGroup, groupId, groupId, err) } @@ -279,7 +278,7 @@ func pipeTwoStream(in apiv2.Dgraph_StreamExtSnapshotServer, out pb.Worker_Stream } func (w *grpcWorker) UpdateExtSnapshotStreamingState(ctx context.Context, - req *apiv2.UpdateExtSnapshotStreamingStateRequest) (*pb.Status, error) { + req *api.UpdateExtSnapshotStreamingStateRequest) (*pb.Status, error) { if req == nil { return nil, errors.New("UpdateExtSnapshotStreamingStateRequest must not be nil") } @@ -362,7 +361,7 @@ func postStreamProcessing(ctx context.Context) error { // Returns: // - nil: If streaming completes successfully // - error: If there's an issue receiving data or if majority consensus isn't achieved (for leader) -func streamInGroup(stream apiv2.Dgraph_StreamExtSnapshotServer, forward bool) error { +func streamInGroup(stream api.Dgraph_StreamExtSnapshotServer, forward bool) error { node := groups().Node glog.Infof("[import] got stream,forwarding in group [%v]", forward) @@ -414,7 +413,7 @@ func streamInGroup(stream apiv2.Dgraph_StreamExtSnapshotServer, forward bool) er } }() - forwardReq := &apiv2.StreamExtSnapshotRequest{Forward: false} + forwardReq := &api.StreamExtSnapshotRequest{Forward: false} if err := peerStream.Send(forwardReq); err != nil { updateNodeStatus(&ps.RWMutex, successfulNodes, member.Addr, false) glog.Errorf("failed to send forward request: %v", err) @@ -437,7 +436,7 @@ func streamInGroup(stream apiv2.Dgraph_StreamExtSnapshotServer, forward bool) er eg.Go(func() error { defer ps.close() defer func() { - if err := stream.SendAndClose(&apiv2.StreamExtSnapshotResponse{}); err != nil { + if err := stream.SendAndClose(&api.StreamExtSnapshotResponse{}); err != nil { glog.Errorf("[import] failed to send close on in: %v", err) } }()