From 908fd8789cc1b22e556a7ffe307409931976ba08 Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Mon, 16 Sep 2024 14:16:35 +0400 Subject: [PATCH] feat: support cgroup deep analysis in `talosctl` The new command `talosctl cgroups` fetches cgroups snapshot from the machine, parses it fully, enhances with additional information (e.g. resolves pod names), and presents a customizable view of cgroups configuration (e.g. limits) and current consumption. Signed-off-by: Andrey Smirnov --- Dockerfile | 8 +- api/machine/machine.proto | 2 + cmd/talosctl/cmd/talos/cgroups.go | 254 ++ .../cmd/talos/cgroupsprinter/presets.go | 58 + .../cmd/talos/cgroupsprinter/presets/cpu.yaml | 18 + .../talos/cgroupsprinter/presets/cpuset.yaml | 9 + .../cmd/talos/cgroupsprinter/presets/io.yaml | 11 + .../talos/cgroupsprinter/presets/memory.yaml | 18 + .../talos/cgroupsprinter/presets/process.yaml | 13 + .../talos/cgroupsprinter/presets/swap.yaml | 9 + .../cmd/talos/cgroupsprinter/presets_test.go | 25 + .../cmd/talos/cgroupsprinter/schema.go | 80 + cmd/talosctl/cmd/talos/cgroupsprinter/tree.go | 88 + hack/release.toml | 8 + .../server/v1alpha1/v1alpha1_server.go | 2 + .../v1alpha1/v1alpha1_sequencer_tasks.go | 2 +- internal/integration/cli/cgroups.go | 41 + internal/pkg/cgroups/cgroups.go | 296 +++ internal/pkg/cgroups/raw.go | 30 + internal/pkg/cgroups/tar.go | 56 + internal/pkg/cgroups/tar_test.go | 32 + internal/pkg/cgroups/testdata/cgroup.tar.gz | Bin 0 -> 70147 bytes internal/pkg/cgroups/value.go | 265 ++ internal/pkg/cgroups/value_test.go | 203 ++ internal/pkg/containers/container.go | 1 + internal/pkg/containers/cri/cri.go | 1 + internal/{ => pkg}/zboot/zboot.go | 0 pkg/machinery/api/machine/machine.pb.go | 2253 +++++++++-------- .../api/machine/machine_vtproto.pb.go | 86 + .../content/v1.9/advanced/cgroups-analysis.md | 285 +++ website/content/v1.9/reference/api.md | 2 + website/content/v1.9/reference/cli.md | 49 + 32 files changed, 3083 insertions(+), 1122 deletions(-) create mode 100644 cmd/talosctl/cmd/talos/cgroups.go create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/presets.go create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/presets/cpu.yaml create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/presets/cpuset.yaml create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/presets/io.yaml create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/presets/memory.yaml create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/presets/process.yaml create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/presets/swap.yaml create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/presets_test.go create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/schema.go create mode 100644 cmd/talosctl/cmd/talos/cgroupsprinter/tree.go create mode 100644 internal/integration/cli/cgroups.go create mode 100644 internal/pkg/cgroups/cgroups.go create mode 100644 internal/pkg/cgroups/raw.go create mode 100644 internal/pkg/cgroups/tar.go create mode 100644 internal/pkg/cgroups/tar_test.go create mode 100644 internal/pkg/cgroups/testdata/cgroup.tar.gz create mode 100644 internal/pkg/cgroups/value.go create mode 100644 internal/pkg/cgroups/value_test.go rename internal/{ => pkg}/zboot/zboot.go (100%) create mode 100644 website/content/v1.9/advanced/cgroups-analysis.md diff --git a/Dockerfile b/Dockerfile index af08c4d8d0..d40ac9a78e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1083,10 +1083,10 @@ RUN protoc \ /protos/time/*.proto FROM scratch AS docs -COPY --from=docs-build /tmp/configuration/ /website/content/v1.8/reference/configuration/ -COPY --from=docs-build /tmp/cli.md /website/content/v1.8/reference/ -COPY --from=docs-build /tmp/schemas /website/content/v1.8/schemas/ -COPY --from=proto-docs-build /tmp/api.md /website/content/v1.8/reference/ +COPY --from=docs-build /tmp/configuration/ /website/content/v1.9/reference/configuration/ +COPY --from=docs-build /tmp/cli.md /website/content/v1.9/reference/ +COPY --from=docs-build /tmp/schemas /website/content/v1.9/schemas/ +COPY --from=proto-docs-build /tmp/api.md /website/content/v1.9/reference/ # The talosctl-cni-bundle builds the CNI bundle for talosctl. diff --git a/api/machine/machine.proto b/api/machine/machine.proto index 073f1e71aa..df00b064c7 100644 --- a/api/machine/machine.proto +++ b/api/machine/machine.proto @@ -615,6 +615,8 @@ message ContainersRequest { message ContainerInfo { string namespace = 1; string id = 2; + string uid = 10; + string internal_id = 9; string image = 3; uint32 pid = 4; string status = 5; diff --git a/cmd/talosctl/cmd/talos/cgroups.go b/cmd/talosctl/cmd/talos/cgroups.go new file mode 100644 index 0000000000..d2b558fc16 --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroups.go @@ -0,0 +1,254 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package talos + +import ( + "archive/tar" + "compress/gzip" + "context" + "fmt" + "os" + "path/filepath" + "slices" + "strconv" + "strings" + "text/tabwriter" + + "github.com/siderolabs/gen/xslices" + "github.com/spf13/cobra" + "gopkg.in/yaml.v3" + + "github.com/siderolabs/talos/cmd/talosctl/cmd/talos/cgroupsprinter" + "github.com/siderolabs/talos/cmd/talosctl/pkg/talos/helpers" + "github.com/siderolabs/talos/internal/pkg/cgroups" + "github.com/siderolabs/talos/pkg/cli" + "github.com/siderolabs/talos/pkg/machinery/api/common" + "github.com/siderolabs/talos/pkg/machinery/client" + "github.com/siderolabs/talos/pkg/machinery/constants" +) + +var cgroupsCmdFlags struct { + schemaFile string + presetName string +} + +// cgroupsCmd represents the cgroups command. +var cgroupsCmd = &cobra.Command{ + Use: "cgroups", + Aliases: []string{"cg"}, + Short: "Retrieve cgroups usage information", + Long: `The cgroups command fetches control group v2 (cgroupv2) usage details from the machine. +Several presets are available to focus on specific cgroup subsystems: + +* cpu +* cpuset +* io +* memory +* process +* swap + +You can specify the preset using the --preset flag. + +Alternatively, a custom schema can be provided using the --schema-file flag. +To see schema examples, refer to https://github.com/siderolabs/talos/tree/main/cmd/talosctl/cmd/talos/cgroupsprinter/schemas. +`, + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + return WithClient(func(ctx context.Context, c *client.Client) error { + if err := helpers.FailIfMultiNodes(ctx, "cgroups"); err != nil { + return err + } + + var schema cgroupsprinter.Schema + + switch { + case cgroupsCmdFlags.schemaFile != "": + in, err := os.Open(cgroupsCmdFlags.schemaFile) + if err != nil { + return fmt.Errorf("error opening schema file: %w", err) + } + + defer in.Close() //nolint:errcheck + + if err = yaml.NewDecoder(in).Decode(&schema); err != nil { + return fmt.Errorf("error decoding schema file: %w", err) + } + case cgroupsCmdFlags.presetName != "": + presetNames := cgroupsprinter.GetPresetNames() + + if slices.Index(presetNames, cgroupsCmdFlags.presetName) == -1 { + return fmt.Errorf("invalid preset name: %s (valid %v)", cgroupsCmdFlags.presetName, presetNames) + } + + schema = cgroupsprinter.GetPreset(cgroupsCmdFlags.presetName) + default: + return fmt.Errorf("either schema file or preset must be specified") + } + + if err := schema.Compile(); err != nil { + return fmt.Errorf("error compiling schema: %w", err) + } + + cgroupNameResolveMap := buildCgroupResolveMap(ctx, c) + processResolveMap := buildProcessResolveMap(ctx, c) + devicesResolveMap := buildDevicesResolveMap(ctx, c) + + r, err := c.Copy(ctx, constants.CgroupMountPath) + if err != nil { + return fmt.Errorf("error copying: %w", err) + } + + defer r.Close() //nolint:errcheck + + tree, err := cgroups.TreeFromTarGz(r) + if err != nil { + return fmt.Errorf("error reading cgroups: %w", err) + } + + tree.ResolveNames(cgroupNameResolveMap) + tree.Walk(func(node *cgroups.Node) { + node.CgroupProcsResolved = xslices.Map(node.CgroupProcs, func(pid cgroups.Value) cgroups.RawValue { + if name, ok := processResolveMap[pid.String()]; ok { + return cgroups.RawValue(name) + } + + return cgroups.RawValue(pid.String()) + }) + + for dev := range node.IOStat { + if name, ok := devicesResolveMap[dev]; ok { + node.IOStat[name] = node.IOStat[dev] + delete(node.IOStat, dev) + } + } + }) + + w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0) + + defer w.Flush() //nolint:errcheck + + headerLine := "NAME\t" + schema.HeaderLine() + "\n" + + _, err = w.Write([]byte(headerLine)) + if err != nil { + return fmt.Errorf("error writing header line: %w", err) + } + + return cgroupsprinter.PrintNode(".", w, &schema, tree.Root, nil, 0, nil, false, true) + }) + }, +} + +func completeCgroupPresetArg(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return cgroupsprinter.GetPresetNames(), cobra.ShellCompDirectiveNoFileComp +} + +func buildCgroupResolveMap(ctx context.Context, c *client.Client) map[string]string { + cgroupNameResolveMap := map[string]string{} + + containersResp, err := c.Containers(ctx, constants.K8sContainerdNamespace, common.ContainerDriver_CRI) + if err != nil { + cli.Warning("error getting containers: %s", err) + } else { + for _, ctr := range containersResp.Messages[0].Containers { + if ctr.Uid != "" && ctr.PodId != "" { + cgroupNameResolveMap["pod"+ctr.Uid] = ctr.PodId + } + + if ctr.InternalId != "" { + if ctr.PodId == ctr.Name { + cgroupNameResolveMap[ctr.InternalId] = "sandbox" + } else { + cgroupNameResolveMap[ctr.InternalId] = ctr.Name + } + } + } + } + + return cgroupNameResolveMap +} + +func buildProcessResolveMap(ctx context.Context, c *client.Client) map[string]string { + processResolveMap := map[string]string{} + + processesResp, err := c.Processes(ctx) + if err != nil { + cli.Warning("error getting processes: %s", err) + + return processResolveMap + } + + for _, proc := range processesResp.Messages[0].Processes { + name := proc.Executable + + if name == "" { + name = proc.Command + } + + if name == "" { + args := strings.Fields(proc.Args) + + if len(args) > 0 { + name = args[0] + } + } + + name = filepath.Base(name) + + processResolveMap[strconv.FormatInt(int64(proc.Pid), 10)] = name + } + + return processResolveMap +} + +func buildDevicesResolveMap(ctx context.Context, c *client.Client) map[string]string { + devicesResolveMap := map[string]string{} + + r, err := c.Copy(ctx, "/sys/dev/block") + if err != nil { + cli.Warning("error copying devices: %s", err) + + return devicesResolveMap + } + + defer r.Close() //nolint:errcheck + + gzR, err := gzip.NewReader(r) + if err != nil { + cli.Warning("error reading devices: %s", err) + + return devicesResolveMap + } + + defer gzR.Close() //nolint:errcheck + + tarR := tar.NewReader(gzR) + + for { + header, err := tarR.Next() + if err != nil { + break + } + + if header.Typeflag != tar.TypeSymlink { + continue + } + + devicesResolveMap[header.Name] = filepath.Base(header.Linkname) + } + + return devicesResolveMap +} + +func init() { + presetNames := cgroupsprinter.GetPresetNames() + + cgroupsCmd.Flags().StringVar(&cgroupsCmdFlags.schemaFile, "schema-file", "", "path to the columns schema file") + cgroupsCmd.Flags().StringVar(&cgroupsCmdFlags.presetName, "preset", "", fmt.Sprintf("preset name (one of: %v)", presetNames)) + cgroupsCmd.MarkFlagsMutuallyExclusive("schema-file", "preset") + cgroupsCmd.RegisterFlagCompletionFunc("preset", completeCgroupPresetArg) //nolint:errcheck + + addCommand(cgroupsCmd) +} diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/presets.go b/cmd/talosctl/cmd/talos/cgroupsprinter/presets.go new file mode 100644 index 0000000000..9b9d7aa354 --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/presets.go @@ -0,0 +1,58 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cgroupsprinter + +import ( + "embed" + "io/fs" + "path/filepath" + "slices" + "strings" + + "github.com/siderolabs/gen/xslices" + "gopkg.in/yaml.v3" +) + +//go:embed presets/*.yaml +var presetsFS embed.FS + +// GetPresetNames returns the list of preset names. +func GetPresetNames() []string { + list, err := presetsFS.ReadDir("presets") + if err != nil { + panic(err) // should not fail + } + + presets := xslices.Map(list, func(dirEntry fs.DirEntry) string { + // cut extension + return strings.TrimSuffix(dirEntry.Name(), filepath.Ext(dirEntry.Name())) + }) + + slices.Sort(presets) + + return presets +} + +// GetPreset returns the preset by name. +func GetPreset(name string) Schema { + f, err := presetsFS.Open(filepath.Join("presets", name+".yaml")) + if err != nil { + panic(err) // should not fail + } + + defer f.Close() //nolint:errcheck + + var schema Schema + + if err := yaml.NewDecoder(f).Decode(&schema); err != nil { + panic(err) // should not fail + } + + if err := schema.Compile(); err != nil { + panic(err) // should not fail + } + + return schema +} diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/presets/cpu.yaml b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/cpu.yaml new file mode 100644 index 0000000000..8bae550f04 --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/cpu.yaml @@ -0,0 +1,18 @@ +# Basic CPU metrics +columns: + - name: CpuWeight + template: '{{ .CPUWeight | printf "%6s" }}' + - name: CpuNice + template: '{{ .CPUWeightNice | printf "%6s" }}' + - name: CpuMax + template: '{{ .CPUMax | printf "%6s" }}' + - name: CpuUser + template: '{{ .CPUStat.user_usec.UsecToDuration | printf "%12s" }}' + - name: User/% + template: '{{ if .Parent }}{{ .CPUStat.user_usec.DivideBy .Parent.CPUStat.user_usec | printf "%6s" }}%{{ else }}-{{ end }}' + - name: CpuSystem + template: '{{ .CPUStat.system_usec.UsecToDuration | printf "%12s" }}' + - name: System/% + template: '{{ if .Parent }}{{ .CPUStat.system_usec.DivideBy .Parent.CPUStat.system_usec | printf "%6s" }}%{{ else }}-{{ end }}' + - name: Throttled + template: '{{ .CPUStat.throttled_usec.UsecToDuration | printf "%12s" }}' diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/presets/cpuset.yaml b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/cpuset.yaml new file mode 100644 index 0000000000..b5aeeb9467 --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/cpuset.yaml @@ -0,0 +1,9 @@ +columns: + - name: CpuSet + template: '{{ .CPUSetCPUs | printf "%12s" }}' + - name: CpuSet(Eff) + template: '{{ .CPUSetCPUsEffective | printf "%12s" }}' + - name: Mems + template: '{{ .CPUSetMems | printf "%12s" }}' + - name: Mems(Eff) + template: '{{ .CPUSetMemsEffective | printf "%12s" }}' diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/presets/io.yaml b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/io.yaml new file mode 100644 index 0000000000..f8a6c60e86 --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/io.yaml @@ -0,0 +1,11 @@ +columns: + - name: Bytes Read/Written + template: '{{ range $disk, $v := .IOStat }}{{ if $v }}{{ $disk }}: {{ $v.rbytes.HumanizeIBytes }}/{{ $v.wbytes.HumanizeIBytes }} {{ end }}{{ end }}' + - name: ios Read/Write + template: '{{ if .Parent }}{{ range $disk, $v := .IOStat }}{{ $disk }}: {{ $v.rios }}/{{ $v.wios }} {{ end }}{{ end }}' + - name: PressAvg10 + template: '{{ .IOPressure.some.avg10 | printf "%6s" }}' + - name: PressAvg60 + template: '{{ .IOPressure.some.avg60 | printf "%6s" }}' + - name: PressTotal + template: '{{ .IOPressure.some.total.UsecToDuration | printf "%12s" }}' diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/presets/memory.yaml b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/memory.yaml new file mode 100644 index 0000000000..7a626109ea --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/memory.yaml @@ -0,0 +1,18 @@ +# Memory-related cgroup metrics +columns: + - name: MemCurrent + template: '{{ .MemoryCurrent.HumanizeIBytes | printf "%8s" }}' + - name: MemPeak + template: '{{ .MemoryPeak.HumanizeIBytes | printf "%8s" }}' + - name: MemLow + template: '{{ .MemoryLow.HumanizeIBytes | printf "%8s" }}' + - name: Peak/Low + template: '{{ .MemoryPeak.DivideBy .MemoryLow | printf "%6s%%" }}' + - name: MemHigh + template: '{{ .MemoryHigh.HumanizeIBytes | printf "%8s" }}' + - name: MemMin + template: '{{ .MemoryMin.HumanizeIBytes | printf "%8s" }}' + - name: Current/Min + template: '{{ .MemoryCurrent.DivideBy .MemoryMin | printf "%6s%%" }}' + - name: MemMax + template: '{{ .MemoryMax.HumanizeIBytes | printf "%8s" }}' diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/presets/process.yaml b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/process.yaml new file mode 100644 index 0000000000..a9c6876aea --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/process.yaml @@ -0,0 +1,13 @@ +columns: + - name: PidsCurrent + template: '{{ .PidsCurrent | printf "%8s" }}' + - name: PidsPeak + template: '{{ .PidsPeak | printf "%8s" }}' + - name: PidsMax + template: '{{ .PidsMax | printf "%8s" }}' + - name: Procs + template: '{{ .CgroupProcs | len | printf "%7d" }}' + - name: Threads + template: '{{ .CgroupThreads | len | printf "%7d" }}' + - name: Processes + template: '{{ if .Parent }}{{ .CgroupProcsResolved | printf "%s" | printf "%.50s" }}{{ end }}' diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/presets/swap.yaml b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/swap.yaml new file mode 100644 index 0000000000..6ebcded28f --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/presets/swap.yaml @@ -0,0 +1,9 @@ +columns: + - name: SwapCurrent + template: '{{ .MemorySwapCurrent.HumanizeIBytes | printf "%8s" }}' + - name: SwapPeak + template: '{{ .MemorySwapPeak.HumanizeIBytes | printf "%8s" }}' + - name: SwapHigh + template: '{{ .MemorySwapHigh.HumanizeIBytes | printf "%8s" }}' + - name: SwapMax + template: '{{ .MemorySwapMax.HumanizeIBytes | printf "%8s" }}' diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/presets_test.go b/cmd/talosctl/cmd/talos/cgroupsprinter/presets_test.go new file mode 100644 index 0000000000..80c4a05b8b --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/presets_test.go @@ -0,0 +1,25 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cgroupsprinter_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/siderolabs/talos/cmd/talosctl/cmd/talos/cgroupsprinter" +) + +func TestGetPresetNames(t *testing.T) { + assert.Equal(t, []string{"cpu", "cpuset", "io", "memory", "process", "swap"}, cgroupsprinter.GetPresetNames()) +} + +func TestGetPreset(t *testing.T) { + for _, name := range cgroupsprinter.GetPresetNames() { + t.Run(name, func(t *testing.T) { + assert.NotEmpty(t, cgroupsprinter.GetPreset(name)) + }) + } +} diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/schema.go b/cmd/talosctl/cmd/talos/cgroupsprinter/schema.go new file mode 100644 index 0000000000..e736843123 --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/schema.go @@ -0,0 +1,80 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cgroupsprinter + +import ( + "io" + "strings" + "text/template" +) + +// Schema defines columns for cgroups printer. +type Schema struct { + Columns []*Column `yaml:"columns"` +} + +// Compile compiles the templates. +func (s *Schema) Compile() error { + for _, c := range s.Columns { + tmpl, err := template.New(c.Name).Parse(c.Template) + if err != nil { + return err + } + + c.tmpl = tmpl + } + + return nil +} + +// HeaderLine returns the header line. +func (s *Schema) HeaderLine() string { + var headerLine strings.Builder + + for i, c := range s.Columns { + if i > 0 { + headerLine.WriteString("\t") + } + + headerLine.WriteString(c.Name) + } + + return headerLine.String() +} + +// Render returns the row line. +func (s *Schema) Render(data any) (string, error) { + var rowLine strings.Builder + + for i, c := range s.Columns { + if i > 0 { + rowLine.WriteString("\t") + } + + if err := c.Render(&rowLine, data); err != nil { + return "", err + } + } + + return rowLine.String(), nil +} + +// Column defines a column for cgroups printer. +type Column struct { + Name string `yaml:"name"` + + Template string `yaml:"template"` // Template is a Go template string. + + tmpl *template.Template +} + +// Render the template with the data. +func (c *Column) Render(out io.Writer, data any) error { + if c.tmpl == nil { + panic("template is not compiled") + } + + return c.tmpl.Execute(out, data) +} diff --git a/cmd/talosctl/cmd/talos/cgroupsprinter/tree.go b/cmd/talosctl/cmd/talos/cgroupsprinter/tree.go new file mode 100644 index 0000000000..4d7e3d237e --- /dev/null +++ b/cmd/talosctl/cmd/talos/cgroupsprinter/tree.go @@ -0,0 +1,88 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// Package cgroupsprinter provides functions to print cgroup information. +package cgroupsprinter + +import ( + "fmt" + "io" + "slices" + "strings" + + "github.com/siderolabs/talos/internal/pkg/cgroups" +) + +type edgeType string + +const ( + edgeTypeNone edgeType = "" + edgeTypeLink edgeType = "│" + edgeTypeMid edgeType = "├──" + edgeTypeEnd edgeType = "└──" + + indentSize = 3 +) + +// PrintNode prints the cgroup node recursively. +// +//nolint:gocyclo +func PrintNode(name string, w io.Writer, schema *Schema, node, parent *cgroups.Node, level int, levelsEnded []int, lastNode, treeRoot bool) error { + var prefix string + + for i := range level { + if slices.Index(levelsEnded, i) != -1 { + prefix += strings.Repeat(" ", indentSize+1) + } else { + prefix += string(edgeTypeLink) + strings.Repeat(" ", indentSize) + } + } + + var edge edgeType + + switch { + case treeRoot: + edge = edgeTypeNone + case lastNode: + edge = edgeTypeEnd + default: + edge = edgeTypeMid + } + + rowData, err := schema.Render(struct { + *cgroups.Node + Parent *cgroups.Node + }{ + Node: node, + Parent: parent, + }) + if err != nil { + return err + } + + _, err = fmt.Fprintf(w, "%s%s%s\t%s\n", prefix, edge, name, rowData) + if err != nil { + return err + } + + children := node.SortedChildren() + + if lastNode { + levelsEnded = append(levelsEnded, level) + } + + if !treeRoot { + level++ + } + + for i, child := range children { + last := i == len(children)-1 + + if err = PrintNode(child, w, schema, node.Children[child], node, level, levelsEnded, last, false); err != nil { + return err + } + } + + return nil +} diff --git a/hack/release.toml b/hack/release.toml index 4a5ecdc930..6f97621e13 100644 --- a/hack/release.toml +++ b/hack/release.toml @@ -31,6 +31,14 @@ All other release assets can be downloaded from [Image Factory](https://www.talo Linux: 6.6.52 Talos is built with Go 1.23.1. +""" + + [notes.cgroups] + title = "`talosctl cgroups`" + description = """\ +The `talosctl cgroups` command has been added to the `talosctl` tool. +This command allows you to view the cgroup resource consumption and limits for a machine, e.g. +`talosctl cgroups --preset memory`. """ [make_deps] diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go index cd9e6308e6..05a494e885 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go @@ -1435,6 +1435,8 @@ func (s *Server) Containers(ctx context.Context, in *machine.ContainersRequest) container := &machine.ContainerInfo{ Namespace: in.Namespace, Id: container.Display, + InternalId: container.ID, + Uid: container.UID, PodId: pod.Name, Name: container.Name, Image: container.Image, diff --git a/internal/app/machined/pkg/runtime/v1alpha1/v1alpha1_sequencer_tasks.go b/internal/app/machined/pkg/runtime/v1alpha1/v1alpha1_sequencer_tasks.go index 87412d3b0d..535690edf0 100644 --- a/internal/app/machined/pkg/runtime/v1alpha1/v1alpha1_sequencer_tasks.go +++ b/internal/app/machined/pkg/runtime/v1alpha1/v1alpha1_sequencer_tasks.go @@ -63,7 +63,7 @@ import ( "github.com/siderolabs/talos/internal/pkg/partition" "github.com/siderolabs/talos/internal/pkg/secureboot" "github.com/siderolabs/talos/internal/pkg/secureboot/tpm2" - "github.com/siderolabs/talos/internal/zboot" + "github.com/siderolabs/talos/internal/pkg/zboot" "github.com/siderolabs/talos/pkg/conditions" "github.com/siderolabs/talos/pkg/images" "github.com/siderolabs/talos/pkg/kernel/kspp" diff --git a/internal/integration/cli/cgroups.go b/internal/integration/cli/cgroups.go new file mode 100644 index 0000000000..e3344ae2c8 --- /dev/null +++ b/internal/integration/cli/cgroups.go @@ -0,0 +1,41 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +//go:build integration_cli + +package cli + +import ( + "regexp" + + "github.com/siderolabs/talos/internal/integration/base" +) + +// CgroupsSuite verifies dmesg command. +type CgroupsSuite struct { + base.CLISuite +} + +// SuiteName ... +func (suite *CgroupsSuite) SuiteName() string { + return "cli.CgroupsSuite" +} + +// TestPresets verifies successful execution. +func (suite *CgroupsSuite) TestPresets() { + for _, preset := range []string{"cpu", "cpuset", "io", "memory", "process", "swap"} { + suite.Run(preset, func() { + suite.RunCLI( + []string{ + "cgroups", "--nodes", suite.RandomDiscoveredNodeInternalIP(), + "--preset", preset, + }, + base.StdoutShouldMatch(regexp.MustCompile(`apid`))) + }) + } +} + +func init() { + allSuites = append(allSuites, new(CgroupsSuite)) +} diff --git a/internal/pkg/cgroups/cgroups.go b/internal/pkg/cgroups/cgroups.go new file mode 100644 index 0000000000..dee24ad235 --- /dev/null +++ b/internal/pkg/cgroups/cgroups.go @@ -0,0 +1,296 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// Package cgroups provides functions to parse cgroup information. +package cgroups + +import ( + "io" + "slices" + "strings" + + "github.com/siderolabs/gen/maps" +) + +// Tree represents a cgroup tree. +type Tree struct { + Root *Node +} + +// Find the node by directory path. +func (t *Tree) Find(directoryPath string) *Node { + node := t.Root + + for _, component := range strings.Split(directoryPath, "/") { + if component == "." || component == "" { + return node + } + + if node.Children == nil { + node.Children = make(map[string]*Node) + } + + child, ok := node.Children[component] + if !ok { + child = &Node{} + node.Children[component] = child + } + + node = child + } + + return node +} + +// ResolveNames resolves the names of the node and its children. +func (t *Tree) ResolveNames(nameMap map[string]string) { + t.Root.ResolveNames(nameMap) +} + +// Walk the tree. +func (t *Tree) Walk(fn func(*Node)) { + t.Root.Walk(fn) +} + +// SortedChildren returns the sorted children of the node. +func (n *Node) SortedChildren() []string { + children := maps.Keys(n.Children) + + slices.Sort(children) + + return children +} + +// ResolveNames resolves the names of the node and its children. +func (n *Node) ResolveNames(nameMap map[string]string) { + for name, child := range n.Children { + if resolvedName, ok := nameMap[name]; ok { + delete(n.Children, name) + n.Children[resolvedName] = child + } + + child.ResolveNames(nameMap) + } +} + +// Walk the node. +func (n *Node) Walk(fn func(*Node)) { + fn(n) + + for _, child := range n.Children { + child.Walk(fn) + } +} + +// Node represents a cgroup node. +type Node struct { + Children map[string]*Node + + CgroupEvents FlatMap + CgroupFreeze Value + CgroupProcs Values + CgroupStat FlatMap + CgroupThreads Values + + // Resolved externally into process names. + CgroupProcsResolved []RawValue + + CPUIdle Value + CPUMax Values + CPUMaxBurst Value + CPUPressure NestedKeyed + CPUStat FlatMap + CPUStatLocal FlatMap + CPUWeight Value + CPUWeightNice Value + + CPUSetCPUs RawValue + CPUSetCPUsEffective RawValue + CPUSetMems RawValue + CPUSetMemsEffective RawValue + + IOBFQWeight FlatMap + IOMax NestedKeyed + IOPressure NestedKeyed + IOStat NestedKeyed + + MemoryCurrent Value + MemoryEvents FlatMap + MemoryEventsLocal FlatMap + MemoryHigh Value + MemoryLow Value + MemoryMax Value + MemoryMin Value + MemoryNUMAStat NestedKeyed + MemoryOOMGroup Value + MemoryPeak Value + MemoryPressure NestedKeyed + MemoryStat FlatMap + + MemorySwapCurrent Value + MemorySwapEvents FlatMap + MemorySwapHigh Value + MemorySwapMax Value + MemorySwapPeak Value + + PidsCurrent Value + PidsEvents FlatMap + PidsMax Value + PidsPeak Value +} + +func parseSingleValue(parser func(r io.Reader) (Values, error), out *Value, r io.Reader) error { + values, err := parser(r) + if err != nil { + return err + } + + if len(values) > 0 { + *out = values[0] + } + + return nil +} + +// Parse the cgroup information by filename from the reader. +// +//nolint:gocyclo,cyclop +func (n *Node) Parse(filename string, r io.Reader) error { + var err error + + switch filename { + case "cgroup.events": + n.CgroupEvents, err = ParseFlatMapValues(r) + + return err + case "cgroup.freeze": + return parseSingleValue(ParseNewlineSeparatedValues, &n.CgroupFreeze, r) + case "cgroup.procs": + n.CgroupProcs, err = ParseNewlineSeparatedValues(r) + + return err + case "cgroup.stat": + n.CgroupStat, err = ParseFlatMapValues(r) + + return err + case "cgroup.threads": + n.CgroupThreads, err = ParseNewlineSeparatedValues(r) + + return err + case "cpu.idle": + return parseSingleValue(ParseNewlineSeparatedValues, &n.CPUIdle, r) + case "cpu.max": + n.CPUMax, err = ParseSpaceSeparatedValues(r) + + return err + case "cpu.max.burst": + return parseSingleValue(ParseNewlineSeparatedValues, &n.CPUMaxBurst, r) + case "cpu.pressure": + n.CPUPressure, err = ParseNestedKeyedValues(r) + + return err + case "cpu.stat": + n.CPUStat, err = ParseFlatMapValues(r) + + return err + case "cpu.stat.local": + n.CPUStatLocal, err = ParseFlatMapValues(r) + + return err + case "cpu.weight": + return parseSingleValue(ParseNewlineSeparatedValues, &n.CPUWeight, r) + case "cpu.weight.nice": + return parseSingleValue(ParseNewlineSeparatedValues, &n.CPUWeightNice, r) + case "cpuset.cpus": + n.CPUSetCPUs, err = ParseRawValue(r) + + return err + case "cpuset.cpus.effective": + n.CPUSetCPUsEffective, err = ParseRawValue(r) + + return err + case "cpuset.mems": + n.CPUSetMems, err = ParseRawValue(r) + + return err + case "cpuset.mems.effective": + n.CPUSetMemsEffective, err = ParseRawValue(r) + + return err + case "io.bfq.weight": + n.IOBFQWeight, err = ParseFlatMapValues(r) + + return err + case "io.max": + n.IOMax, err = ParseNestedKeyedValues(r) + + return err + case "io.pressure": + n.IOPressure, err = ParseNestedKeyedValues(r) + + return err + case "io.stat": + n.IOStat, err = ParseNestedKeyedValues(r) + + return err + case "memory.current": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemoryCurrent, r) + case "memory.events": + n.MemoryEvents, err = ParseFlatMapValues(r) + + return err + case "memory.events.local": + n.MemoryEventsLocal, err = ParseFlatMapValues(r) + + return err + case "memory.high": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemoryHigh, r) + case "memory.low": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemoryLow, r) + case "memory.max": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemoryMax, r) + case "memory.min": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemoryMin, r) + case "memory.numa_stat": + n.MemoryNUMAStat, err = ParseNestedKeyedValues(r) + + return err + case "memory.oom.group": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemoryOOMGroup, r) + case "memory.peak": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemoryPeak, r) + case "memory.pressure": + n.MemoryPressure, err = ParseNestedKeyedValues(r) + + return err + case "memory.stat": + n.MemoryStat, err = ParseFlatMapValues(r) + + return err + case "memory.swap.current": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemorySwapCurrent, r) + case "memory.swap.events": + n.MemorySwapEvents, err = ParseFlatMapValues(r) + + return err + case "memory.swap.high": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemorySwapHigh, r) + case "memory.swap.max": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemorySwapMax, r) + case "memory.swap.peak": + return parseSingleValue(ParseNewlineSeparatedValues, &n.MemorySwapPeak, r) + case "pids.current": + return parseSingleValue(ParseNewlineSeparatedValues, &n.PidsCurrent, r) + case "pids.events": + n.PidsEvents, err = ParseFlatMapValues(r) + + return err + case "pids.max": + return parseSingleValue(ParseNewlineSeparatedValues, &n.PidsMax, r) + case "pids.peak": + return parseSingleValue(ParseNewlineSeparatedValues, &n.PidsPeak, r) + } + + return nil +} diff --git a/internal/pkg/cgroups/raw.go b/internal/pkg/cgroups/raw.go new file mode 100644 index 0000000000..001be6e2f9 --- /dev/null +++ b/internal/pkg/cgroups/raw.go @@ -0,0 +1,30 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cgroups + +import ( + "bufio" + "io" +) + +// RawValue is a raw cgroup value (without any parsing). +type RawValue string + +// ParseRawValue parses the raw cgroup value. +func ParseRawValue(r io.Reader) (RawValue, error) { + scanner := bufio.NewScanner(r) + + if !scanner.Scan() { + return RawValue(""), nil + } + + line := scanner.Text() + + if err := scanner.Err(); err != nil { + return RawValue(""), err + } + + return RawValue(line), nil +} diff --git a/internal/pkg/cgroups/tar.go b/internal/pkg/cgroups/tar.go new file mode 100644 index 0000000000..78e69dd64e --- /dev/null +++ b/internal/pkg/cgroups/tar.go @@ -0,0 +1,56 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cgroups + +import ( + "archive/tar" + "compress/gzip" + "fmt" + "io" + "path/filepath" +) + +// TreeFromTarGz builds a crgroup tree from the tar.gz reader. +// +// It is assumed to work with output of `talosctl cp /sys/fs/cgroup -`. +func TreeFromTarGz(r io.Reader) (*Tree, error) { + gzReader, err := gzip.NewReader(r) + if err != nil { + return nil, err + } + + defer gzReader.Close() //nolint:errcheck + + tarReader := tar.NewReader(gzReader) + + tree := &Tree{ + Root: &Node{}, + } + + for { + header, err := tarReader.Next() + if err == io.EOF { + break + } + + if err != nil { + return nil, err + } + + if header.Typeflag != tar.TypeReg { + continue + } + + directory, filename := filepath.Split(header.Name) + + node := tree.Find(directory) + + if err = node.Parse(filename, tarReader); err != nil { + return nil, fmt.Errorf("failed to parse %q: %w", header.Name, err) + } + } + + return tree, nil +} diff --git a/internal/pkg/cgroups/tar_test.go b/internal/pkg/cgroups/tar_test.go new file mode 100644 index 0000000000..96daf0359d --- /dev/null +++ b/internal/pkg/cgroups/tar_test.go @@ -0,0 +1,32 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cgroups_test + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/siderolabs/talos/internal/pkg/cgroups" +) + +func TestTreeFromTarGz(t *testing.T) { + t.Parallel() + + tarFile, err := os.Open("testdata/cgroup.tar.gz") + require.NoError(t, err) + + t.Cleanup(func() { + assert.NoError(t, tarFile.Close()) + }) + + tree, err := cgroups.TreeFromTarGz(tarFile) + require.NoError(t, err) + + assert.Equal(t, []string{"init", "kubepods", "podruntime", "system"}, tree.Root.SortedChildren()) + assert.Equal(t, "114712576", tree.Find("init").MemoryCurrent.String()) +} diff --git a/internal/pkg/cgroups/testdata/cgroup.tar.gz b/internal/pkg/cgroups/testdata/cgroup.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..53df4baed2223cff0f5d36a40af67cb5d2dc7708 GIT binary patch literal 70147 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 0 { + return v.String() + } + + return humanize.IBytes(uint64(v.Val)) +} + +// DivideBy returns the value divided by another value in percentage. +// +// a.DivideBy(b) = a / b * 100. +func (v Value) DivideBy(other Value) Value { + switch { + case !v.IsSet || !other.IsSet: + // if either value is unset, return unset + return Value{} + case other.IsMax && !v.IsMax: + // if other is max and v is not, return 0.00% + return Value{IsSet: true, Frac: 2} + case v.IsMax && other.IsMax: + // if both are max, return 100.00% + return Value{Val: 10000, IsSet: true, Frac: 2} + case other.Val == 0 || v.IsMax: + // if other is 0, return max + return Value{IsMax: true, IsSet: true} + default: + return Value{Val: int64(math.Round(float64(v.Val) / float64(other.Val) * 100 * 100)), IsSet: true, Frac: 2} + } +} + +// UsecToDuration returns the duration representation of the cgroup value in microseconds. +func (v Value) UsecToDuration() string { + if !v.IsSet || v.IsMax { + return v.String() + } + + return (time.Duration(v.Val) * time.Microsecond).String() +} + +// Values represents a list of cgroup values. +type Values []Value + +// FlatMap returns the flat map of the cgroup values. +type FlatMap map[string]Value + +// NestedKeyed returns the nested keyed map of the cgroup values. +type NestedKeyed map[string]FlatMap + +// ParseValue parses the cgroup value from the string. +func ParseValue(s string) (Value, error) { + if s == "max" { + return Value{IsMax: true, IsSet: true}, nil + } + + var frac int + + l, r, ok := strings.Cut(s, ".") + if ok { + frac = len(r) + + s = l + r + } + + val, err := strconv.ParseInt(s, 10, 64) + if err != nil { + return Value{}, err + } + + return Value{Val: val, Frac: frac, IsSet: true}, nil +} + +// ParseNewlineSeparatedValues parses the cgroup values from the newline separated string. +// +// New-line separated values +// (when only one value can be written at once) +// +// VAL0\n +// VAL1\n +// ... +func ParseNewlineSeparatedValues(r io.Reader) (Values, error) { + scanner := bufio.NewScanner(r) + + var values Values + + for scanner.Scan() { + val, err := ParseValue(scanner.Text()) + if err != nil { + return nil, err + } + + values = append(values, val) + } + + if err := scanner.Err(); err != nil { + return nil, err + } + + return values, nil +} + +// ParseSpaceSeparatedValues parses the cgroup values from the space separated string. +// +// Space separated values +// (when read-only or multiple values can be written at once) +// +// VAL0 VAL1 ...\n. +func ParseSpaceSeparatedValues(r io.Reader) (Values, error) { + scanner := bufio.NewScanner(r) + + if !scanner.Scan() { + return nil, nil + } + + line := scanner.Text() + parts := strings.Fields(line) + + values := make(Values, 0, len(parts)) + + for _, s := range parts { + val, err := ParseValue(s) + if err != nil { + return nil, err + } + + values = append(values, val) + } + + if err := scanner.Err(); err != nil { + return nil, err + } + + return values, nil +} + +// ParseFlatMapValues parses the cgroup values from the flat map. +// +// Flat keyed: +// +// KEY0 VAL0\n +// KEY1 VAL1\n +// ... +func ParseFlatMapValues(r io.Reader) (FlatMap, error) { + scanner := bufio.NewScanner(r) + + flatMap := FlatMap{} + + for scanner.Scan() { + line := scanner.Text() + + key, value, ok := strings.Cut(line, " ") + if !ok { + return nil, errors.New("invalid format") + } + + val, err := ParseValue(value) + if err != nil { + return nil, err + } + + flatMap[key] = val + } + + if err := scanner.Err(); err != nil { + return nil, err + } + + return flatMap, nil +} + +// ParseNestedKeyedValues parses the cgroup values from the nested keyed map. +// +// Nested keyed: +// +// KEY0 SUB_KEY0=VAL00 SUB_KEY1=VAL01... +// KEY1 SUB_KEY0=VAL10 SUB_KEY1=VAL11... +// ... +func ParseNestedKeyedValues(r io.Reader) (NestedKeyed, error) { + scanner := bufio.NewScanner(r) + + nestedKeyed := NestedKeyed{} + + for scanner.Scan() { + line := scanner.Text() + + key, values, ok := strings.Cut(line, " ") + if !ok { + return nil, errors.New("invalid format") + } + + flatMap := FlatMap{} + + for _, pair := range strings.Fields(values) { + subKey, value, ok := strings.Cut(pair, "=") + if !ok { + return nil, errors.New("invalid format") + } + + val, err := ParseValue(value) + if err != nil { + return nil, err + } + + flatMap[subKey] = val + } + + nestedKeyed[key] = flatMap + } + + if err := scanner.Err(); err != nil { + return nil, err + } + + return nestedKeyed, nil +} diff --git a/internal/pkg/cgroups/value_test.go b/internal/pkg/cgroups/value_test.go new file mode 100644 index 0000000000..5b7e3452b7 --- /dev/null +++ b/internal/pkg/cgroups/value_test.go @@ -0,0 +1,203 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cgroups_test + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/siderolabs/talos/internal/pkg/cgroups" +) + +func TestParseValue(t *testing.T) { + t.Parallel() + + for _, test := range []struct { + in string + + expected cgroups.Value + }{ + { + in: "42", + expected: cgroups.Value{Val: 42, IsSet: true}, + }, + { + in: "max", + expected: cgroups.Value{IsMax: true, IsSet: true}, + }, + { + in: "42.5", + expected: cgroups.Value{Val: 425, Frac: 1, IsSet: true}, + }, + { + in: "0.00", + expected: cgroups.Value{Val: 0, Frac: 2, IsSet: true}, + }, + } { + t.Run(test.in, func(t *testing.T) { + t.Parallel() + + v, err := cgroups.ParseValue(test.in) + require.NoError(t, err) + + assert.Equal(t, test.expected, v) + + assert.Equal(t, test.in, v.String()) + }) + } +} + +func TestParseNewlineSeparatedValues(t *testing.T) { //nolint:dupl + t.Parallel() + + for _, test := range []struct { + name string + input string + expected cgroups.Values + }{ + { + name: "one", + input: "42\n", + expected: cgroups.Values{ + {Val: 42, IsSet: true}, + }, + }, + { + name: "two", + input: "42\n43\n", + expected: cgroups.Values{ + {Val: 42, IsSet: true}, + {Val: 43, IsSet: true}, + }, + }, + { + name: "max", + input: "max\n", + expected: cgroups.Values{ + {IsMax: true, IsSet: true}, + }, + }, + } { + t.Run(test.name, func(t *testing.T) { + t.Parallel() + + r := strings.NewReader(test.input) + + values, err := cgroups.ParseNewlineSeparatedValues(r) + require.NoError(t, err) + require.Equal(t, test.expected, values) + }) + } +} + +func TestParseSpaceSeparatedValues(t *testing.T) { //nolint:dupl + t.Parallel() + + for _, test := range []struct { + name string + input string + expected cgroups.Values + }{ + { + name: "one", + input: "42\n", + expected: cgroups.Values{ + {Val: 42, IsSet: true}, + }, + }, + { + name: "two", + input: "42 43\n", + expected: cgroups.Values{ + {Val: 42, IsSet: true}, + {Val: 43, IsSet: true}, + }, + }, + { + name: "max", + input: "max\n", + expected: cgroups.Values{ + {IsMax: true, IsSet: true}, + }, + }, + } { + t.Run(test.name, func(t *testing.T) { + t.Parallel() + + r := strings.NewReader(test.input) + + values, err := cgroups.ParseSpaceSeparatedValues(r) + require.NoError(t, err) + require.Equal(t, test.expected, values) + }) + } +} + +func TestParseFlatMapValues(t *testing.T) { + t.Parallel() + + for _, test := range []struct { + name string + input string + expected cgroups.FlatMap + }{ + { + name: "values", + input: "anon 3000\nfile 6000\n", + expected: cgroups.FlatMap{ + "anon": {Val: 3000, IsSet: true}, + "file": {Val: 6000, IsSet: true}, + }, + }, + } { + t.Run(test.name, func(t *testing.T) { + t.Parallel() + + r := strings.NewReader(test.input) + + values, err := cgroups.ParseFlatMapValues(r) + require.NoError(t, err) + require.Equal(t, test.expected, values) + }) + } +} + +func TestParseNestedKeyedValues(t *testing.T) { + t.Parallel() + + for _, test := range []struct { + name string + input string + expected cgroups.NestedKeyed + }{ + { + name: "values", + input: "anon rss=3125 vms=123\nreal rss=1234 vms=5678\n", + expected: cgroups.NestedKeyed{ + "anon": { + "rss": {Val: 3125, IsSet: true}, + "vms": {Val: 123, IsSet: true}, + }, + "real": { + "rss": {Val: 1234, IsSet: true}, + "vms": {Val: 5678, IsSet: true}, + }, + }, + }, + } { + t.Run(test.name, func(t *testing.T) { + t.Parallel() + + r := strings.NewReader(test.input) + + values, err := cgroups.ParseNestedKeyedValues(r) + require.NoError(t, err) + require.Equal(t, test.expected, values) + }) + } +} diff --git a/internal/pkg/containers/container.go b/internal/pkg/containers/container.go index 6c50994bae..0541e55199 100644 --- a/internal/pkg/containers/container.go +++ b/internal/pkg/containers/container.go @@ -29,6 +29,7 @@ type Container struct { Display string // Friendly Name Name string // container name ID string // container sha/id + UID string // container uid Digest string // Container Digest Image string PodName string diff --git a/internal/pkg/containers/cri/cri.go b/internal/pkg/containers/cri/cri.go index d0972dacb3..5535a09ec8 100644 --- a/internal/pkg/containers/cri/cri.go +++ b/internal/pkg/containers/cri/cri.go @@ -201,6 +201,7 @@ func (i *inspector) buildPod(sandbox *runtimeapi.PodSandbox) (*ctrs.Pod, error) Display: podName, Name: podName, ID: sandbox.Id, + UID: sandbox.Metadata.Uid, PodName: podName, Status: sandboxStatus.State.String(), IsPodSandbox: true, diff --git a/internal/zboot/zboot.go b/internal/pkg/zboot/zboot.go similarity index 100% rename from internal/zboot/zboot.go rename to internal/pkg/zboot/zboot.go diff --git a/pkg/machinery/api/machine/machine.pb.go b/pkg/machinery/api/machine/machine.pb.go index 140caab9ee..8416090d8a 100644 --- a/pkg/machinery/api/machine/machine.pb.go +++ b/pkg/machinery/api/machine/machine.pb.go @@ -4785,6 +4785,8 @@ type ContainerInfo struct { Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"` Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + Uid string `protobuf:"bytes,10,opt,name=uid,proto3" json:"uid,omitempty"` + InternalId string `protobuf:"bytes,9,opt,name=internal_id,json=internalId,proto3" json:"internal_id,omitempty"` Image string `protobuf:"bytes,3,opt,name=image,proto3" json:"image,omitempty"` Pid uint32 `protobuf:"varint,4,opt,name=pid,proto3" json:"pid,omitempty"` Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` @@ -4839,6 +4841,20 @@ func (x *ContainerInfo) GetId() string { return "" } +func (x *ContainerInfo) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +func (x *ContainerInfo) GetInternalId() string { + if x != nil { + return x.InternalId + } + return "" +} + func (x *ContainerInfo) GetImage() string { if x != nil { return x.Image @@ -12174,1162 +12190,1165 @@ var file_machine_machine_proto_rawDesc = []byte{ 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, - 0x65, 0x72, 0x22, 0xd5, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x65, 0x72, 0x22, 0x88, 0x02, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, - 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x71, 0x0a, 0x09, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, 0x44, 0x0a, - 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x0c, 0x44, 0x6d, 0x65, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x22, - 0x41, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x22, 0x6b, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x09, 0x70, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, - 0xb2, 0x02, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, - 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x63, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0e, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, - 0x67, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x14, - 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x22, 0x6f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 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, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, - 0x72, 0x69, 0x76, 0x65, 0x72, 0x22, 0x37, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x75, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x2b, 0x0a, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x71, 0x0a, + 0x09, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, + 0x22, 0x44, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x0c, 0x44, 0x6d, 0x65, 0x73, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x74, 0x61, + 0x69, 0x6c, 0x22, 0x41, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x6b, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3f, - 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, - 0x5d, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 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, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2f, 0x0a, - 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x22, 0x5a, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x3b, 0x0a, 0x0d, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, - 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x15, - 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x70, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x06, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, + 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x22, 0xb2, 0x02, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x03, 0x70, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, + 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, 0x75, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x63, 0x70, 0x75, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x76, 0x69, 0x72, + 0x74, 0x75, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, + 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x6f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 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, 0x09, 0x52, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, + 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x22, 0x37, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x2a, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x6d, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x3d, 0x0a, - 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x8b, 0x0c, 0x0a, - 0x07, 0x4d, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x66, 0x72, 0x65, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x66, 0x72, 0x65, 0x65, 0x12, 0x22, - 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, - 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, - 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, - 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x65, 0x76, 0x69, 0x63, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x65, 0x76, 0x69, 0x63, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0e, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, - 0x73, 0x77, 0x61, 0x70, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x73, 0x77, 0x61, 0x70, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x77, - 0x61, 0x70, 0x66, 0x72, 0x65, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x77, - 0x61, 0x70, 0x66, 0x72, 0x65, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x69, 0x72, 0x74, 0x79, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x69, 0x72, 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x09, - 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x12, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, - 0x6f, 0x6e, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, - 0x6e, 0x6f, 0x6e, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x70, 0x70, - 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x61, 0x62, 0x18, 0x16, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x61, 0x62, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x72, - 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0c, 0x73, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x73, 0x75, 0x6e, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0a, 0x73, 0x75, 0x6e, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x20, - 0x0a, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x19, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x74, 0x61, 0x63, 0x6b, - 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x1a, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x66, 0x73, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x1b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6e, 0x66, 0x73, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x18, 0x1c, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x74, 0x6d, 0x70, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x74, 0x6d, 0x70, 0x12, 0x20, - 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x1e, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x61, 0x73, 0x18, - 0x1f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x61, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x18, 0x20, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, - 0x63, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, - 0x63, 0x75, 0x73, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x76, 0x6d, 0x61, - 0x6c, 0x6c, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x6d, 0x61, 0x6c, - 0x6c, 0x6f, 0x63, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x22, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, - 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x2c, 0x0a, 0x11, - 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, - 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6e, - 0x6f, 0x6e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x24, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x61, 0x6e, 0x6f, 0x6e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, - 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, - 0x65, 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x68, - 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x68, 0x6d, 0x65, - 0x6d, 0x70, 0x6d, 0x64, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x26, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x70, 0x6d, 0x64, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6d, 0x61, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x27, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x63, 0x6d, 0x61, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6d, 0x61, 0x66, 0x72, 0x65, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, - 0x6d, 0x61, 0x66, 0x72, 0x65, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, - 0x67, 0x65, 0x73, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x29, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, - 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x24, - 0x0a, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x66, 0x72, 0x65, 0x65, 0x18, - 0x2a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, - 0x66, 0x72, 0x65, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, - 0x73, 0x72, 0x73, 0x76, 0x64, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, - 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x72, 0x73, 0x76, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, - 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x73, 0x75, 0x72, 0x70, 0x18, 0x2c, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x73, 0x75, 0x72, 0x70, - 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x2d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, - 0x73, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, - 0x70, 0x34, 0x6b, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6d, 0x61, 0x70, 0x34, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6d, 0x61, 0x70, 0x32, 0x6d, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x32, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6d, 0x61, 0x70, 0x31, 0x67, 0x18, 0x30, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x31, 0x67, 0x22, 0x41, 0x0a, 0x10, 0x48, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x54, 0x0a, - 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x3f, 0x0a, 0x0f, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x12, - 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x6f, - 0x61, 0x64, 0x31, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x35, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x35, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x61, - 0x64, 0x31, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x31, - 0x35, 0x22, 0x45, 0x0a, 0x12, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x52, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xd6, 0x03, 0x0a, 0x0a, 0x53, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x43, 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, 0x52, 0x08, 0x63, 0x70, 0x75, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x12, 0x22, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, - 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x72, 0x71, 0x5f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x72, 0x71, 0x54, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x72, 0x71, 0x18, 0x06, 0x20, 0x03, 0x28, 0x04, 0x52, - 0x03, 0x69, 0x72, 0x71, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, - 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, - 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x6f, - 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, 0x71, 0x54, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x6f, 0x66, - 0x74, 0x49, 0x52, 0x51, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, - 0x71, 0x22, 0xed, 0x01, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x04, 0x6e, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, - 0x04, 0x69, 0x64, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x69, 0x64, 0x6c, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x72, 0x71, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x69, 0x72, 0x71, 0x12, 0x19, 0x0a, 0x08, 0x73, - 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x73, - 0x6f, 0x66, 0x74, 0x49, 0x72, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x65, 0x61, 0x6c, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x74, 0x65, 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, - 0x67, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x67, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x69, 0x63, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x67, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x69, 0x63, - 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x66, 0x74, 0x49, 0x52, 0x51, 0x53, 0x74, 0x61, - 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x68, - 0x69, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x74, - 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x54, 0x78, 0x12, 0x15, - 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x72, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x6e, 0x65, 0x74, 0x52, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x22, 0x0a, 0x0d, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6f, 0x50, 0x6f, 0x6c, 0x6c, 0x12, - 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x6c, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x6c, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x63, 0x68, 0x65, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x63, 0x75, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x72, 0x63, 0x75, 0x22, 0x40, 0x0a, 0x0f, 0x43, - 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x73, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x65, 0x0a, - 0x08, 0x43, 0x50, 0x55, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x70, 0x75, 0x5f, 0x69, - 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x63, 0x70, 0x75, - 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x8b, 0x06, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x12, 0x1b, - 0x0a, 0x09, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x70, 0x75, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x63, 0x70, 0x75, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x65, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x73, 0x74, 0x65, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x6d, - 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x70, 0x75, - 0x5f, 0x6d, 0x68, 0x7a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x63, 0x70, 0x75, 0x4d, - 0x68, 0x7a, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, - 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x17, - 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x63, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x63, - 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x70, 0x75, 0x43, - 0x6f, 0x72, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x26, 0x0a, - 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x41, - 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x75, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x66, 0x70, 0x75, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x70, 0x75, 0x5f, 0x65, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x66, 0x70, 0x75, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, - 0x63, 0x70, 0x75, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0a, 0x63, 0x70, 0x75, 0x49, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0e, - 0x0a, 0x02, 0x77, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x77, 0x70, 0x12, 0x14, - 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, 0x67, 0x73, 0x18, 0x15, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x62, 0x75, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x67, 0x6f, - 0x5f, 0x6d, 0x69, 0x70, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x62, 0x6f, 0x67, - 0x6f, 0x4d, 0x69, 0x70, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6c, 0x5f, 0x66, 0x6c, 0x75, 0x73, - 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x6c, - 0x46, 0x6c, 0x75, 0x73, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x1a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, - 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, - 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x52, 0x05, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x22, 0x86, 0x04, 0x0a, 0x06, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x19, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x72, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x78, - 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, - 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x78, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x78, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x78, 0x5f, 0x64, 0x72, 0x6f, - 0x70, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x78, 0x44, 0x72, - 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x66, 0x69, 0x66, 0x6f, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x78, 0x46, 0x69, 0x66, 0x6f, 0x12, 0x19, - 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x72, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x78, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0c, 0x72, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x21, - 0x0a, 0x0c, 0x72, 0x78, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x78, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, - 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x74, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x64, - 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x78, - 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x66, 0x69, - 0x66, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x78, 0x46, 0x69, 0x66, 0x6f, - 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x74, 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x63, 0x61, 0x72, 0x72, - 0x69, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x78, 0x43, 0x61, 0x72, - 0x72, 0x69, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x74, 0x78, 0x43, - 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x22, 0x43, 0x0a, 0x11, 0x44, 0x69, 0x73, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, + 0x61, 0x22, 0x3f, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x22, 0x5d, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 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, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x2f, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, + 0x72, 0x22, 0x5a, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x3b, 0x0a, + 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x8f, - 0x01, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, + 0x32, 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x04, 0x53, + 0x74, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x06, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x69, 0x6e, 0x66, 0x6f, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x4d, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x69, 0x6e, 0x66, 0x6f, + 0x22, 0x3d, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, + 0x8b, 0x0c, 0x0a, 0x07, 0x4d, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x6d, + 0x65, 0x6d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x66, 0x72, + 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x66, 0x72, 0x65, + 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x77, 0x61, + 0x70, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x69, + 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x12, + 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x12, + 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, + 0x69, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x65, 0x76, 0x69, 0x63, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x65, 0x76, 0x69, 0x63, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, + 0x1c, 0x0a, 0x09, 0x73, 0x77, 0x61, 0x70, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1a, 0x0a, + 0x08, 0x73, 0x77, 0x61, 0x70, 0x66, 0x72, 0x65, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x73, 0x77, 0x61, 0x70, 0x66, 0x72, 0x65, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x69, 0x72, + 0x74, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x69, 0x72, 0x74, 0x79, 0x12, + 0x1c, 0x0a, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x1c, 0x0a, + 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x61, + 0x62, 0x18, 0x16, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x61, 0x62, 0x12, 0x22, 0x0a, + 0x0c, 0x73, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x6e, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x75, 0x6e, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x74, 0x61, 0x63, 0x6b, + 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x74, + 0x61, 0x63, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x66, 0x73, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6e, 0x66, 0x73, 0x75, 0x6e, 0x73, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x18, + 0x1c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, + 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x74, 0x6d, 0x70, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x74, 0x6d, + 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x1e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x61, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x61, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x20, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x76, 0x6d, 0x61, + 0x6c, 0x6c, 0x6f, 0x63, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x6d, 0x61, + 0x6c, 0x6c, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x76, + 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x22, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0c, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x12, + 0x2c, 0x0a, 0x11, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x72, 0x75, + 0x70, 0x74, 0x65, 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x68, 0x61, 0x72, 0x64, + 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x61, 0x6e, 0x6f, 0x6e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x24, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x6e, 0x6f, 0x6e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, + 0x67, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x68, 0x75, 0x67, 0x65, + 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, 0x68, 0x6d, + 0x65, 0x6d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x73, + 0x68, 0x6d, 0x65, 0x6d, 0x70, 0x6d, 0x64, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x26, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x70, 0x6d, 0x64, 0x6d, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6d, 0x61, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x27, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6d, 0x61, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, + 0x18, 0x0a, 0x07, 0x63, 0x6d, 0x61, 0x66, 0x72, 0x65, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x63, 0x6d, 0x61, 0x66, 0x72, 0x65, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x75, 0x67, + 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x29, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x66, 0x72, + 0x65, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, + 0x67, 0x65, 0x73, 0x66, 0x72, 0x65, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, + 0x61, 0x67, 0x65, 0x73, 0x72, 0x73, 0x76, 0x64, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x72, 0x73, 0x76, 0x64, 0x12, 0x24, 0x0a, + 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x73, 0x75, 0x72, 0x70, 0x18, 0x2c, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x73, + 0x75, 0x72, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x68, 0x75, 0x67, 0x65, 0x70, + 0x61, 0x67, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6d, 0x61, 0x70, 0x34, 0x6b, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x34, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x32, 0x6d, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x32, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x31, 0x67, 0x18, 0x30, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x31, 0x67, 0x22, 0x41, 0x0a, + 0x10, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x48, 0x6f, + 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x22, 0x54, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, - 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x22, 0xd8, 0x04, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x72, 0x65, 0x61, 0x64, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, - 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, - 0x65, 0x61, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x61, - 0x64, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x72, 0x65, 0x61, 0x64, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0c, - 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x27, - 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x77, 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, - 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, - 0x22, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x69, 0x6f, 0x49, - 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, - 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x69, 0x6f, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x69, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x65, 0x64, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x10, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x6d, - 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x64, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x53, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x64, 0x69, - 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x19, 0x0a, 0x17, 0x45, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, + 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, + 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3f, 0x0a, 0x0f, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x52, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, 0x41, + 0x76, 0x67, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x35, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x35, 0x12, 0x16, 0x0a, 0x06, + 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6c, 0x6f, + 0x61, 0x64, 0x31, 0x35, 0x22, 0x45, 0x0a, 0x12, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, + 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xd6, 0x03, 0x0a, 0x0a, + 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x6f, 0x6f, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, 0x52, 0x08, 0x63, 0x70, 0x75, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x22, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x53, + 0x74, 0x61, 0x74, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x72, 0x71, 0x5f, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x72, 0x71, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x72, 0x71, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x04, 0x52, 0x03, 0x69, 0x72, 0x71, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, + 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x75, 0x6e, + 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x24, 0x0a, + 0x0e, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, 0x71, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x53, 0x6f, 0x66, 0x74, 0x49, 0x52, 0x51, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x73, 0x6f, 0x66, + 0x74, 0x49, 0x72, 0x71, 0x22, 0xed, 0x01, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x12, 0x12, 0x0a, 0x04, 0x69, 0x64, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, + 0x69, 0x64, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x69, 0x72, 0x71, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x69, 0x72, 0x71, 0x12, 0x19, + 0x0a, 0x08, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x07, 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x65, + 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x74, 0x65, 0x61, 0x6c, 0x12, + 0x14, 0x0a, 0x05, 0x67, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, + 0x67, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, + 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x67, 0x75, 0x65, 0x73, 0x74, + 0x4e, 0x69, 0x63, 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x66, 0x74, 0x49, 0x52, 0x51, + 0x53, 0x74, 0x61, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x68, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, + 0x74, 0x5f, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x54, + 0x78, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x72, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x52, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x22, + 0x0a, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6f, 0x50, 0x6f, + 0x6c, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x6c, 0x65, 0x74, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x6c, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, + 0x72, 0x63, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x72, 0x63, 0x75, 0x22, 0x40, + 0x0a, 0x0f, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, + 0x55, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x22, 0x65, 0x0a, 0x08, 0x43, 0x50, 0x55, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x70, + 0x75, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, + 0x63, 0x70, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x8b, 0x06, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, + 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x70, 0x75, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x65, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x65, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x1c, + 0x0a, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x68, 0x7a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x63, + 0x70, 0x75, 0x4d, 0x68, 0x7a, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, + 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x73, 0x69, + 0x63, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, + 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, + 0x75, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, + 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x63, 0x5f, + 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x70, 0x69, 0x63, 0x49, 0x64, + 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x70, 0x69, 0x63, + 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x41, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x75, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, 0x70, 0x75, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x70, + 0x75, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x66, 0x70, 0x75, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x20, 0x0a, 0x0c, 0x63, 0x70, 0x75, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, + 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, 0x70, 0x75, 0x49, 0x64, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x77, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x77, + 0x70, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, 0x67, 0x73, 0x18, + 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x62, 0x75, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, + 0x6f, 0x67, 0x6f, 0x5f, 0x6d, 0x69, 0x70, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, + 0x62, 0x6f, 0x67, 0x6f, 0x4d, 0x69, 0x70, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6c, 0x5f, 0x66, + 0x6c, 0x75, 0x73, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0b, 0x63, 0x6c, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x27, 0x0a, 0x0f, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, 0x6c, 0x69, 0x67, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6f, + 0x77, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x1a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x1a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x94, 0x01, 0x0a, + 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x44, 0x65, + 0x76, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x86, 0x04, 0x0a, 0x06, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, + 0x0a, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, + 0x72, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x72, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x78, 0x5f, + 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, + 0x78, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x66, + 0x69, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x78, 0x46, 0x69, 0x66, + 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x72, 0x78, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0c, 0x72, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x78, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, + 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x78, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x63, 0x61, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1b, + 0x0a, 0x09, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x74, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, + 0x78, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x74, 0x78, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, + 0x5f, 0x66, 0x69, 0x66, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x78, 0x46, + 0x69, 0x66, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x74, 0x78, 0x43, 0x6f, + 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x63, + 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x78, + 0x43, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, + 0x74, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x22, 0x43, 0x0a, 0x11, + 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, + 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, + 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x52, + 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x22, 0xd8, 0x04, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x72, 0x65, + 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, + 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, + 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x4d, + 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x53, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x5f, + 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, + 0x69, 0x6f, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x0a, + 0x69, 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x69, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x69, 0x6f, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x6d, + 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x69, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x57, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x73, + 0x63, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x27, 0x0a, + 0x0f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x53, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x19, + 0x0a, 0x17, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x45, 0x74, 0x63, + 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x51, 0x0a, 0x18, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, - 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x31, + 0x0a, 0x17, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x22, 0x40, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x51, 0x0a, 0x18, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x1b, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x22, 0x44, 0x0a, 0x14, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x51, 0x0a, 0x18, 0x45, 0x74, 0x63, 0x64, - 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x31, 0x0a, 0x17, 0x45, - 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x40, - 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x51, 0x0a, 0x18, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x1b, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, - 0x44, 0x0a, 0x14, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x59, 0x0a, 0x1c, 0x45, 0x74, 0x63, 0x64, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x22, 0x1e, 0x0a, 0x1c, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, + 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, + 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x2c, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x22, 0x5b, 0x0a, 0x1d, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, + 0x38, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0x95, 0x01, 0x0a, 0x0a, 0x45, 0x74, + 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x55, 0x72, 0x6c, + 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x72, + 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x65, + 0x72, 0x22, 0x91, 0x01, 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x25, 0x0a, 0x0e, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x4a, 0x0a, 0x16, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x74, 0x63, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3b, 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, + 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x59, 0x0a, 0x1c, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x22, 0x1e, 0x0a, 0x1c, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x5d, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, - 0x5b, 0x0a, 0x1d, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, - 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x15, - 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0x95, 0x01, 0x0a, 0x0a, 0x45, 0x74, 0x63, 0x64, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, 0x72, 0x6c, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x22, 0x91, - 0x01, 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2c, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, - 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, - 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x22, 0x4a, 0x0a, 0x16, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x13, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x15, - 0x0a, 0x13, 0x45, 0x74, 0x63, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3b, 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x47, + 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x52, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x09, 0x45, 0x74, 0x63, 0x64, 0x41, + 0x6c, 0x61, 0x72, 0x6d, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x47, 0x0a, 0x13, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x47, 0x0a, 0x15, 0x45, - 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x09, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, + 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x61, + 0x72, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, + 0x61, 0x72, 0x6d, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, 0x72, 0x6d, + 0x73, 0x22, 0x99, 0x01, 0x0a, 0x0f, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x38, 0x0a, 0x05, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x22, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x2e, 0x41, 0x6c, 0x61, 0x72, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x22, 0x2f, 0x0a, 0x09, + 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, + 0x45, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x52, 0x52, 0x55, 0x50, 0x54, 0x10, 0x02, 0x22, 0x4f, 0x0a, + 0x17, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x72, 0x6d, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, + 0x73, 0x61, 0x72, 0x6d, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x7e, + 0x0a, 0x0f, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x72, 0x6d, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, 0x72, 0x6d, - 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x73, 0x22, 0x99, - 0x01, 0x0a, 0x0f, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, - 0x72, 0x6d, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x38, 0x0a, 0x05, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x2e, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x05, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x22, 0x2f, 0x0a, 0x09, 0x41, 0x6c, 0x61, - 0x72, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x4f, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x43, 0x4f, 0x52, 0x52, 0x55, 0x50, 0x54, 0x10, 0x02, 0x22, 0x4f, 0x0a, 0x17, 0x45, 0x74, - 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x72, 0x6d, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x72, - 0x6d, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x7e, 0x0a, 0x0f, 0x45, - 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x72, 0x6d, 0x12, 0x2c, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0d, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x61, 0x72, 0x6d, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, - 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x52, 0x0c, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x73, 0x22, 0x4d, 0x0a, 0x16, 0x45, - 0x74, 0x63, 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x3e, 0x0a, 0x0e, 0x45, 0x74, - 0x63, 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x45, 0x0a, 0x12, 0x45, 0x74, - 0x63, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x22, 0x7a, 0x0a, 0x0a, 0x45, 0x74, 0x63, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x73, 0x22, 0x4d, + 0x0a, 0x16, 0x45, 0x74, 0x63, 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x3e, 0x0a, + 0x0e, 0x45, 0x74, 0x63, 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, - 0x0d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, - 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xd1, 0x02, - 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x64, 0x62, 0x53, - 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0e, 0x64, 0x62, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x69, - 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x64, 0x62, 0x53, - 0x69, 0x7a, 0x65, 0x49, 0x6e, 0x55, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x61, 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x1b, 0x0a, 0x09, 0x72, 0x61, 0x66, 0x74, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x72, 0x61, 0x66, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x12, 0x2c, 0x0a, 0x12, - 0x72, 0x61, 0x66, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x64, - 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x72, 0x61, 0x66, 0x74, 0x41, 0x70, - 0x70, 0x6c, 0x69, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x4c, 0x65, 0x61, 0x72, 0x6e, 0x65, - 0x72, 0x22, 0x59, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, 0x36, 0x0a, 0x11, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x45, 0x0a, + 0x12, 0x45, 0x74, 0x63, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x45, 0x74, 0x63, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x22, 0x7a, 0x0a, 0x0a, 0x45, 0x74, 0x63, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x3e, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0xd1, 0x02, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, + 0x07, 0x64, 0x62, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x64, 0x62, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0e, 0x64, 0x62, 0x5f, 0x73, 0x69, 0x7a, + 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x64, 0x62, 0x53, 0x69, 0x7a, 0x65, 0x49, 0x6e, 0x55, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x61, 0x66, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x61, 0x66, 0x74, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x61, 0x66, 0x74, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x61, 0x66, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x12, + 0x2c, 0x0a, 0x12, 0x72, 0x61, 0x66, 0x74, 0x5f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x5f, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x72, 0x61, 0x66, + 0x74, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, + 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x61, 0x72, + 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x4c, 0x65, 0x61, + 0x72, 0x6e, 0x65, 0x72, 0x22, 0x59, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x18, 0x0a, + 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, + 0x36, 0x0a, 0x11, 0x44, 0x48, 0x43, 0x50, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, + 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, 0xf2, 0x01, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x69, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x64, + 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, + 0x6d, 0x74, 0x75, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x68, 0x63, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x04, 0x64, 0x68, 0x63, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x12, + 0x3d, 0x0a, 0x0c, 0x64, 0x68, 0x63, 0x70, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x48, 0x43, 0x50, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x22, 0xf2, 0x01, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, - 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x64, 0x72, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x74, 0x75, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x68, 0x63, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, - 0x64, 0x68, 0x63, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x12, 0x3d, 0x0a, 0x0c, - 0x64, 0x68, 0x63, 0x70, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x48, 0x43, - 0x50, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, - 0x64, 0x68, 0x63, 0x70, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x0d, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, - 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, - 0x61, 0x63, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xcd, 0x02, - 0x0a, 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, - 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, - 0x74, 0x65, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x11, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x57, 0x0a, 0x0b, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, - 0x49, 0x54, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, - 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x45, 0x52, 0x10, 0x03, 0x22, 0x30, 0x0a, - 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, - 0x33, 0x0a, 0x09, 0x43, 0x4e, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, - 0x75, 0x72, 0x6c, 0x73, 0x22, 0x68, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, - 0x64, 0x6e, 0x73, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x64, 0x6e, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x31, 0x0a, 0x0a, 0x63, - 0x6e, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x4e, 0x49, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x09, 0x63, 0x6e, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xf9, - 0x01, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, - 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x4a, - 0x0a, 0x22, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, - 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x6c, - 0x61, 0x6e, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x43, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x22, 0x84, 0x02, 0x0a, 0x1c, 0x47, + 0x67, 0x52, 0x0b, 0x64, 0x68, 0x63, 0x70, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, + 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x0d, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, + 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x69, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x22, 0xcd, 0x02, 0x0a, 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x22, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a, 0x0e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x75, 0x62, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x57, 0x0a, 0x0b, 0x4d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x10, 0x02, 0x12, + 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x45, 0x52, 0x10, 0x03, + 0x22, 0x30, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x22, 0x33, 0x0a, 0x09, 0x43, 0x4e, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x22, 0x68, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x1d, 0x0a, 0x0a, 0x64, 0x6e, 0x73, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x6e, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x31, + 0x0a, 0x0a, 0x63, 0x6e, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x4e, 0x49, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x63, 0x6e, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x22, 0xf9, 0x01, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x12, 0x4a, 0x0a, 0x22, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, + 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x6e, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x22, 0x84, 0x02, + 0x0a, 0x1c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, + 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a, 0x0e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x3f, 0x0a, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x7b, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x22, 0x5b, 0x0a, 0x1d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x3d, 0x0a, 0x0e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x0d, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x3f, 0x0a, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x69, 0x6d, - 0x65, 0x22, 0x7b, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, - 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x5b, - 0x0a, 0x1d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x22, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x63, 0x72, 0x74, 0x5f, 0x74, - 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x72, 0x74, 0x54, 0x74, 0x6c, 0x22, 0xa1, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x63, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x72, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x63, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, - 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, - 0x67, 0x0a, 0x23, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x14, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, - 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x63, 0x75, 0x6f, 0x75, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x63, 0x75, 0x6f, 0x75, - 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x5f, 0x6c, 0x65, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x6e, 0x61, 0x70, 0x4c, 0x65, 0x6e, 0x12, 0x36, 0x0a, 0x0a, - 0x62, 0x70, 0x66, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x50, 0x46, 0x49, 0x6e, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x62, 0x70, 0x66, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x0e, 0x42, 0x50, 0x46, 0x49, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x6a, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x02, 0x6a, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6a, 0x66, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x02, 0x6a, 0x66, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x01, 0x6b, 0x22, 0xd2, 0x04, 0x0a, 0x0e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x6e, + 0x0a, 0x22, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x63, 0x72, + 0x74, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x72, 0x74, 0x54, 0x74, 0x6c, 0x22, 0xa1, + 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, + 0x63, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, 0x63, 0x61, 0x12, 0x10, 0x0a, 0x03, + 0x63, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x63, 0x72, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0x67, 0x0a, 0x23, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x14, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x63, 0x75, 0x6f, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6d, 0x69, 0x73, 0x63, + 0x75, 0x6f, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x5f, 0x6c, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x6e, 0x61, 0x70, 0x4c, 0x65, 0x6e, 0x12, + 0x36, 0x0a, 0x0a, 0x62, 0x70, 0x66, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x50, + 0x46, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x62, 0x70, + 0x66, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x0e, 0x42, 0x50, 0x46, 0x49, 0x6e, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x6a, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x6a, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x6a, 0x66, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x6a, 0x66, 0x12, 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x01, 0x6b, 0x22, 0xd2, 0x04, 0x0a, 0x0e, 0x4e, 0x65, 0x74, 0x73, + 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x06, 0x66, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x12, 0x39, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, + 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x39, 0x0a, + 0x07, 0x6c, 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x52, + 0x07, 0x6c, 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x33, 0x0a, 0x05, 0x6e, 0x65, 0x74, 0x6e, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, - 0x39, 0x0a, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, - 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x07, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x6c, 0x34, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x07, 0x6c, 0x34, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x33, 0x0a, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, - 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4e, 0x65, - 0x74, 0x4e, 0x53, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x1a, 0x1b, 0x0a, 0x07, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x70, 0x69, 0x64, 0x1a, 0xb1, 0x01, 0x0a, 0x07, 0x4c, 0x34, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x63, 0x70, 0x36, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x04, 0x74, 0x63, 0x70, 0x36, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x64, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x75, 0x64, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x64, 0x70, 0x36, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x75, 0x64, 0x70, 0x36, 0x12, - 0x18, 0x0a, 0x07, 0x75, 0x64, 0x70, 0x6c, 0x69, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x75, 0x64, 0x70, 0x6c, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x64, 0x70, - 0x6c, 0x69, 0x74, 0x65, 0x36, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x75, 0x64, 0x70, - 0x6c, 0x69, 0x74, 0x65, 0x36, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x03, 0x72, 0x61, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x77, 0x36, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x72, 0x61, 0x77, 0x36, 0x1a, 0x5b, 0x0a, 0x05, 0x4e, - 0x65, 0x74, 0x4e, 0x53, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x61, 0x6c, 0x6c, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x61, 0x6c, 0x6c, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x22, 0x2f, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, - 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, - 0x53, 0x54, 0x45, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x22, 0xdc, 0x06, 0x0a, 0x0d, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6c, - 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x34, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x70, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x70, 0x12, - 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1a, 0x0a, - 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x69, 0x70, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x74, 0x78, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x74, 0x78, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x78, 0x71, 0x75, 0x65, - 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x71, 0x75, 0x65, 0x75, - 0x65, 0x12, 0x32, 0x0a, 0x02, 0x74, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x52, 0x02, 0x74, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x77, 0x68, - 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x77, - 0x68, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x74, 0x72, 0x6e, 0x73, 0x6d, 0x74, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x74, 0x72, 0x6e, 0x73, 0x6d, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x75, 0x69, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, - 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x6f, 0x64, - 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, - 0x72, 0x65, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, - 0x07, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x07, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x1a, 0x2f, 0x0a, - 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xaf, - 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x53, 0x45, - 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x53, 0x54, 0x41, 0x42, 0x4c, - 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x59, 0x4e, 0x5f, 0x53, - 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x59, 0x4e, 0x5f, 0x52, 0x45, 0x43, - 0x56, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x31, - 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x32, 0x10, - 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x10, 0x06, - 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x43, - 0x4c, 0x4f, 0x53, 0x45, 0x57, 0x41, 0x49, 0x54, 0x10, 0x08, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x41, - 0x53, 0x54, 0x41, 0x43, 0x4b, 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x49, 0x53, 0x54, 0x45, - 0x4e, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x4f, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x0b, - 0x22, 0x46, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, - 0x07, 0x0a, 0x03, 0x4f, 0x46, 0x46, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4e, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x4b, 0x45, 0x45, 0x50, 0x41, 0x4c, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, - 0x0c, 0x0a, 0x08, 0x54, 0x49, 0x4d, 0x45, 0x57, 0x41, 0x49, 0x54, 0x10, 0x03, 0x12, 0x09, 0x0a, - 0x05, 0x50, 0x52, 0x4f, 0x42, 0x45, 0x10, 0x04, 0x22, 0x75, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x73, - 0x74, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x3c, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x72, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x22, - 0x3f, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, - 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x22, 0x3a, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x2e, 0x4e, 0x65, 0x74, 0x4e, 0x53, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x1a, 0x1b, 0x0a, + 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x70, 0x69, 0x64, 0x1a, 0xb1, 0x01, 0x0a, 0x07, 0x4c, + 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x63, 0x70, 0x36, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x74, 0x63, 0x70, 0x36, 0x12, 0x10, 0x0a, 0x03, + 0x75, 0x64, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x75, 0x64, 0x70, 0x12, 0x12, + 0x0a, 0x04, 0x75, 0x64, 0x70, 0x36, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x75, 0x64, + 0x70, 0x36, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x64, 0x70, 0x6c, 0x69, 0x74, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x75, 0x64, 0x70, 0x6c, 0x69, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x75, 0x64, 0x70, 0x6c, 0x69, 0x74, 0x65, 0x36, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x75, 0x64, 0x70, 0x6c, 0x69, 0x74, 0x65, 0x36, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x72, 0x61, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, + 0x77, 0x36, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x72, 0x61, 0x77, 0x36, 0x1a, 0x5b, + 0x0a, 0x05, 0x4e, 0x65, 0x74, 0x4e, 0x53, 0x12, 0x20, 0x0a, 0x0b, 0x68, 0x6f, 0x73, 0x74, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, 0x6f, + 0x73, 0x74, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x65, 0x74, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x61, 0x6c, 0x6c, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x6e, 0x65, 0x74, 0x6e, 0x73, 0x22, 0x2f, 0x0a, 0x06, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, + 0x09, 0x4c, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x22, 0xdc, 0x06, 0x0a, + 0x0d, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x6c, 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6c, 0x34, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x69, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x70, 0x6f, 0x72, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x69, 0x70, 0x12, 0x1e, 0x0a, 0x0a, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x32, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x74, 0x78, 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x78, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x78, + 0x71, 0x75, 0x65, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x71, + 0x75, 0x65, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x02, 0x74, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x22, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x52, 0x02, 0x74, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x72, 0x77, 0x68, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x72, 0x77, 0x68, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x74, 0x72, 0x6e, 0x73, + 0x6d, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x74, 0x72, 0x6e, 0x73, + 0x6d, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x03, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x69, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, + 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x65, + 0x74, 0x6e, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x6e, 0x73, + 0x1a, 0x2f, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x70, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0xaf, 0x01, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x52, + 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x45, 0x53, 0x54, + 0x41, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x59, + 0x4e, 0x5f, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x59, 0x4e, 0x5f, + 0x52, 0x45, 0x43, 0x56, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x5f, 0x57, 0x41, + 0x49, 0x54, 0x31, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x46, 0x49, 0x4e, 0x5f, 0x57, 0x41, 0x49, + 0x54, 0x32, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x57, 0x41, 0x49, + 0x54, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x07, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x57, 0x41, 0x49, 0x54, 0x10, 0x08, 0x12, 0x0b, 0x0a, + 0x07, 0x4c, 0x41, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x49, + 0x53, 0x54, 0x45, 0x4e, 0x10, 0x0a, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4c, 0x4f, 0x53, 0x49, 0x4e, + 0x47, 0x10, 0x0b, 0x22, 0x46, 0x0a, 0x0b, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x46, 0x46, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4e, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4b, 0x45, 0x45, 0x50, 0x41, 0x4c, 0x49, 0x56, 0x45, + 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x49, 0x4d, 0x45, 0x57, 0x41, 0x49, 0x54, 0x10, 0x03, + 0x12, 0x09, 0x0a, 0x05, 0x50, 0x52, 0x4f, 0x42, 0x45, 0x10, 0x04, 0x22, 0x75, 0x0a, 0x07, 0x4e, + 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x3c, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x22, 0x3f, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x39, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x11, 0x4d, 0x65, + 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, + 0x25, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x39, 0x0a, 0x09, - 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x25, 0x0a, 0x11, - 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x0a, 0x0a, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x45, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x10, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x39, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x6b, 0x0a, 0x10, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x22, 0x39, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, + 0x6c, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x45, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x08, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x10, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x43, 0x0a, 0x11, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x32, 0xc7, 0x1b, 0x0a, 0x0e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, + 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, + 0x72, 0x61, 0x70, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, + 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, + 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, + 0x3b, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, + 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, + 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, + 0x05, 0x44, 0x6d, 0x65, 0x73, 0x67, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x44, 0x6d, 0x65, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x32, 0x0a, + 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, + 0x01, 0x12, 0x51, 0x0a, 0x0e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, + 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, + 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x14, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x12, 0x24, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, + 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, + 0x44, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x10, 0x45, 0x74, 0x63, + 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x20, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x66, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x25, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, + 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, + 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x45, 0x74, + 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x3c, 0x0a, 0x0c, 0x45, 0x74, 0x63, 0x64, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x47, 0x0a, 0x0d, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, + 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, + 0x72, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, + 0x0a, 0x0f, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x72, + 0x6d, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, + 0x61, 0x72, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0e, 0x45, + 0x74, 0x63, 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x22, 0x6b, 0x0a, 0x10, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, - 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x22, 0x39, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x12, 0x2c, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x43, 0x0a, 0x11, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x32, 0xc7, 0x1b, 0x0a, 0x0e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, - 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x73, - 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, - 0x0a, 0x04, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x07, - 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x44, 0x69, 0x73, - 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x6d, - 0x65, 0x73, 0x67, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x6d, - 0x65, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x06, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x51, - 0x0a, 0x0e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x63, 0x0a, 0x14, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x12, 0x24, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, - 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x66, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, - 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, 0x52, - 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, - 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x28, 0x01, 0x12, 0x3c, 0x0a, 0x0c, 0x45, 0x74, 0x63, 0x64, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, - 0x74, 0x63, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x30, 0x01, 0x12, 0x47, 0x0a, 0x0d, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0f, 0x45, - 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x72, 0x6d, 0x12, 0x16, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x45, 0x74, 0x63, 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x45, 0x74, 0x63, 0x64, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x15, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x34, 0x0a, 0x0a, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x45, 0x74, 0x63, 0x64, 0x41, 0x6c, 0x61, 0x72, 0x6d, 0x44, 0x69, 0x73, 0x61, 0x72, 0x6d, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0e, 0x45, 0x74, 0x63, 0x64, - 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, - 0x64, 0x44, 0x65, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x45, 0x74, 0x63, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, - 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x48, 0x6f, 0x73, - 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, - 0x0a, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x6b, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, - 0x73, 0x6b, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x55, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, - 0x41, 0x76, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x14, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x61, - 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1f, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, - 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, - 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x09, 0x44, 0x69, 0x73, + 0x6b, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x07, 0x4c, + 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, + 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, - 0x12, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x17, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3f, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x36, 0x0a, 0x05, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x49, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, + 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x50, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, - 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, - 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4b, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, - 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x2e, 0x6d, + 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x52, + 0x65, 0x61, 0x64, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, + 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x52, 0x65, 0x62, + 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, + 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x18, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x51, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x48, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, + 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, - 0x6f, 0x77, 0x6e, 0x12, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x41, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x17, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, - 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, + 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x53, 0x68, + 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, + 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x78, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x3c, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x73, - 0x74, 0x61, 0x74, 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, - 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x4d, 0x65, - 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x44, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x50, 0x75, 0x6c, 0x6c, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, - 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x4e, 0x0a, 0x15, 0x64, - 0x65, 0x76, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0d, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1d, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x43, 0x61, 0x70, + 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x3c, 0x0a, 0x07, 0x4e, + 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x73, 0x74, 0x61, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x4d, 0x65, 0x74, + 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, + 0x0a, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1a, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x42, 0x0a, 0x09, 0x49, 0x6d, + 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x4e, + 0x0a, 0x15, 0x64, 0x65, 0x76, 0x2e, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x72, 0x6f, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, + 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/machinery/api/machine/machine_vtproto.pb.go b/pkg/machinery/api/machine/machine_vtproto.pb.go index d59367b77a..371be74f73 100644 --- a/pkg/machinery/api/machine/machine_vtproto.pb.go +++ b/pkg/machinery/api/machine/machine_vtproto.pb.go @@ -3887,6 +3887,20 @@ func (m *ContainerInfo) MarshalToSizedBufferVT(dAtA []byte) (int, error) { i -= len(m.unknownFields) copy(dAtA[i:], m.unknownFields) } + if len(m.Uid) > 0 { + i -= len(m.Uid) + copy(dAtA[i:], m.Uid) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.Uid))) + i-- + dAtA[i] = 0x52 + } + if len(m.InternalId) > 0 { + i -= len(m.InternalId) + copy(dAtA[i:], m.InternalId) + i = protohelpers.EncodeVarint(dAtA, i, uint64(len(m.InternalId))) + i-- + dAtA[i] = 0x4a + } if len(m.NetworkNamespace) > 0 { i -= len(m.NetworkNamespace) copy(dAtA[i:], m.NetworkNamespace) @@ -11713,6 +11727,14 @@ func (m *ContainerInfo) SizeVT() (n int) { if l > 0 { n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) } + l = len(m.InternalId) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } + l = len(m.Uid) + if l > 0 { + n += 1 + l + protohelpers.SizeOfVarint(uint64(l)) + } n += len(m.unknownFields) return n } @@ -22870,6 +22892,70 @@ func (m *ContainerInfo) UnmarshalVT(dAtA []byte) error { } m.NetworkNamespace = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InternalId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InternalId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Uid", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protohelpers.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protohelpers.ErrInvalidLength + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Uid = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := protohelpers.Skip(dAtA[iNdEx:]) diff --git a/website/content/v1.9/advanced/cgroups-analysis.md b/website/content/v1.9/advanced/cgroups-analysis.md new file mode 100644 index 0000000000..4422c5dd14 --- /dev/null +++ b/website/content/v1.9/advanced/cgroups-analysis.md @@ -0,0 +1,285 @@ +--- +title: "Cgroups Resource Analysis" +description: "How to use `talosctl cgroups` to monitor resource usage on the node." +--- + +Talos provides a way to monitor resource usage of the [control groups](https://docs.kernel.org/admin-guide/cgroup-v2.html) on the machine. +This feature is useful to understand how much resources are being used by the containers and processes running on the machine. + +Talos creates several system cgroups: + +* `init` (contains `machined` PID 1) +* `system` (contains system services, and extension services) +* `podruntime` (contains CRI containerd, kubelet, etcd) + +Kubelet creates a tree of cgroups for each pod, and each container in the pod, starting with `kubepods` as the root group. + +Talos Linux might set some default limits for the cgroups, and these are not configurable at the moment. +Kubelet is configured by default to reserve some amount of RAM and CPU for system processes to prevent the system from becoming unresponsive under extreme resource pressure. + +> Note: this feature is only available in `cgroupsv2` mode which is Talos default. + +The `talosctl cgroups` command provides a way to monitor the resource usage of the cgroups on the machine, it has a set of presets which are described below. + +## Presets + +### `cpu` + +```text +$ talosctl cgroups --preset=cpu +NAME CpuWeight CpuNice CpuMax CpuUser User/% CpuSystem System/% Throttled +. unset unset [] 7m42.43755s - 8m51.855608s - 0s +├──init 79 1 [ max 100000] 35.061148s 7.58% 41.027589s 7.71% 0s +├──kubepods 77 1 [ max 100000] 3m29.902395s 45.39% 4m41.033592s 52.84% 0s +│ ├──besteffort 1 19 [ max 100000] 1.297303s 0.62% 960.152ms 0.34% 0s +│ │ └──kube-system/kube-proxy-6r5bz 1 19 [ max 100000] 1.297441s 100.01% 960.014ms 99.99% 0s +│ │ ├──kube-proxy 1 19 [ max 100000] 1.289143s 99.36% 958.587ms 99.85% 0s +│ │ └──sandbox 1 19 [ max 100000] 9.724ms 0.75% 0s 0.00% 0s +│ └──burstable 14 9 [ max 100000] 3m28.653931s 99.41% 4m40.024231s 99.64% 0s +│ ├──kube-system/kube-apiserver-talos-default-controlplane-1 8 11 [ max 100000] 2m22.458603s 68.28% 2m22.983949s 51.06% 0s +│ │ ├──kube-apiserver 8 11 [ max 100000] 2m22.440159s 99.99% 2m22.976538s 99.99% 0s +│ │ └──sandbox 1 19 [ max 100000] 14.774ms 0.01% 11.081ms 0.01% 0s +│ ├──kube-system/kube-controller-manager-talos-default-controlplane-1 2 18 [ max 100000] 17.314271s 8.30% 3.014955s 1.08% 0s +│ │ ├──kube-controller-manager 2 18 [ max 100000] 17.303941s 99.94% 3.001934s 99.57% 0s +│ │ └──sandbox 1 19 [ max 100000] 11.675ms 0.07% 11.675ms 0.39% 0s +│ ├──kube-system/kube-flannel-jzx6m 4 14 [ max 100000] 38.986678s 18.68% 1m47.717143s 38.47% 0s +│ │ ├──kube-flannel 4 14 [ max 100000] 38.962703s 99.94% 1m47.690508s 99.98% 0s +│ │ └──sandbox 1 19 [ max 100000] 14.228ms 0.04% 7.114ms 0.01% 0s +│ └──kube-system/kube-scheduler-talos-default-controlplane-1 1 19 [ max 100000] 20.103563s 9.63% 16.099219s 5.75% 0s +│ ├──kube-scheduler 1 19 [ max 100000] 20.092317s 99.94% 16.086603s 99.92% 0s +│ └──sandbox 1 19 [ max 100000] 11.93ms 0.06% 11.93ms 0.07% 0s +├──podruntime 79 1 [ max 100000] 4m59.707084s 64.81% 5m4.010222s 57.16% 0s +│ ├──etcd 79 1 [ max 100000] 2m38.215322s 52.79% 3m7.812204s 61.78% 0s +│ ├──kubelet 39 4 [ max 100000] 1m29.026444s 29.70% 1m23.112332s 27.34% 0s +│ └──runtime 39 4 [ max 100000] 48.501668s 16.18% 37.049334s 12.19% 0s +└──system 59 2 [ max 100000] 32.395345s 7.01% 12.176964s 2.29% 0s + ├──apid 20 7 [ max 100000] 1.261381s 3.89% 756.827ms 6.22% 0s + ├──dashboard 8 11 [ max 100000] 22.231337s 68.63% 5.328927s 43.76% 0s + ├──runtime 20 7 [ max 100000] 7.282253s 22.48% 5.924559s 48.65% 0s + ├──trustd 10 10 [ max 100000] 1.254353s 3.87% 220.698ms 1.81% 0s + └──udevd 10 10 [ max 100000] 78.726ms 0.24% 233.244ms 1.92% 0s +``` + +In the CPU view, the following columns are displayed: + +* `CpuWeight`: the CPU weight of the cgroup (relative, controls the CPU shares/bandwidth) +* `CpuNice`: the CPU nice value (direct translation of the `CpuWeight` to the `nice` value) +* `CpuMax`: the maximum CPU time allowed for the cgroup +* `CpuUser`: the total CPU time consumed by the cgroup and its children in user mode +* `User/%`: the percentage of CPU time consumed by the cgroup and its children in user mode relative to the parent cgroup +* `CpuSystem`: the total CPU time consumed by the cgroup and its children in system mode +* `System/%`: the percentage of CPU time consumed by the cgroup and its children in system mode relative to the parent cgroup +* `Throttled`: the total time the cgroup has been throttled on CPU + +### `cpuset` + +```bash +$ talosctl cgroups --preset=cpuset +NAME CpuSet CpuSet(Eff) Mems Mems(Eff) +. 0-1 0 +├──init 0-1 0 +├──kubepods 0-1 0 +│ ├──besteffort 0-1 0 +│ │ └──kube-system/kube-proxy-6r5bz 0-1 0 +│ │ ├──kube-proxy 0-1 0 +│ │ └──sandbox 0-1 0 +│ └──burstable 0-1 0 +│ ├──kube-system/kube-apiserver-talos-default-controlplane-1 0-1 0 +│ │ ├──kube-apiserver 0-1 0 +│ │ └──sandbox 0-1 0 +│ ├──kube-system/kube-controller-manager-talos-default-controlplane-1 0-1 0 +│ │ ├──kube-controller-manager 0-1 0 +│ │ └──sandbox 0-1 0 +│ ├──kube-system/kube-flannel-jzx6m 0-1 0 +│ │ ├──kube-flannel 0-1 0 +│ │ └──sandbox 0-1 0 +│ └──kube-system/kube-scheduler-talos-default-controlplane-1 0-1 0 +│ ├──kube-scheduler 0-1 0 +│ └──sandbox 0-1 0 +├──podruntime 0-1 0 +│ ├──etcd 0-1 0 +│ ├──kubelet 0-1 0 +│ └──runtime 0-1 0 +└──system 0-1 0 + ├──apid 0-1 0 + ├──dashboard 0-1 0 + ├──runtime 0-1 0 + ├──trustd 0-1 0 + └──udevd 0-1 0 +``` + +This preset shows information about the CPU and memory sets of the cgroups, it is mostly useful with `kubelet` CPU manager. + +* `CpuSet`: the CPU set of the cgroup +* `CpuSet(Eff)`: the effective CPU set of the cgroup +* `Mems`: the memory set of the cgroup (NUMA nodes) +* `Mems(Eff)`: the effective memory set of the cgroup + +### `io` + +```bash +$ talosctl cgroups --preset=io +NAME Bytes Read/Written ios Read/Write PressAvg10 PressAvg60 PressTotal +. loop0: 94 MiB/0 B vda: 700 MiB/803 MiB 0.12 0.37 2m12.512921s +├──init loop0: 231 KiB/0 B vda: 4.9 MiB/4.3 MiB loop0: 6/0 vda: 206/37 0.00 0.00 232.446ms +├──kubepods vda: 282 MiB/16 MiB vda: 3195/3172 0.00 0.00 383.858ms +│ ├──besteffort vda: 58 MiB/0 B vda: 678/0 0.00 0.00 86.833ms +│ │ └──kube-system/kube-proxy-6r5bz vda: 58 MiB/0 B vda: 678/0 0.00 0.00 86.833ms +│ │ ├──kube-proxy vda: 58 MiB/0 B vda: 670/0 0.00 0.00 86.554ms +│ │ └──sandbox vda: 692 KiB/0 B vda: 8/0 0.00 0.00 467µs +│ └──burstable vda: 224 MiB/16 MiB vda: 2517/3172 0.00 0.00 308.616ms +│ ├──kube-system/kube-apiserver-talos-default-controlplane-1 vda: 76 MiB/16 MiB vda: 870/3171 0.00 0.00 151.677ms +│ │ ├──kube-apiserver vda: 76 MiB/16 MiB vda: 870/3171 0.00 0.00 156.375ms +│ │ └──sandbox 0.00 0.00 0s +│ ├──kube-system/kube-controller-manager-talos-default-controlplane-1 vda: 62 MiB/0 B vda: 670/0 0.00 0.00 95.432ms +│ │ ├──kube-controller-manager vda: 62 MiB/0 B vda: 670/0 0.00 0.00 100.197ms +│ │ └──sandbox 0.00 0.00 0s +│ ├──kube-system/kube-flannel-jzx6m vda: 36 MiB/4.0 KiB vda: 419/1 0.00 0.00 64.203ms +│ │ ├──kube-flannel vda: 35 MiB/0 B vda: 399/0 0.00 0.00 55.26ms +│ │ └──sandbox 0.00 0.00 0s +│ └──kube-system/kube-scheduler-talos-default-controlplane-1 vda: 50 MiB/0 B vda: 558/0 0.00 0.00 64.331ms +│ ├──kube-scheduler vda: 50 MiB/0 B vda: 558/0 0.00 0.00 62.821ms +│ └──sandbox 0.00 0.00 0s +├──podruntime vda: 379 MiB/764 MiB vda: 3802/287674 0.39 0.39 2m13.409399s +│ ├──etcd vda: 308 MiB/759 MiB vda: 2598/286420 0.50 0.41 2m15.407179s +│ ├──kubelet vda: 69 MiB/62 KiB vda: 834/13 0.00 0.00 122.371ms +│ └──runtime vda: 76 KiB/3.9 MiB vda: 19/1030 0.00 0.00 164.984ms +└──system loop0: 18 MiB/0 B vda: 3.2 MiB/0 B loop0: 590/0 vda: 116/0 0.00 0.00 153.609ms + ├──apid loop0: 1.9 MiB/0 B loop0: 103/0 0.00 0.00 3.345ms + ├──dashboard loop0: 16 MiB/0 B loop0: 487/0 0.00 0.00 11.596ms + ├──runtime 0.00 0.00 28.957ms + ├──trustd 0.00 0.00 0s + └──udevd vda: 3.2 MiB/0 B vda: 116/0 0.00 0.00 135.586ms +``` + +In the IO (input/output) view, the following columns are displayed: + +* `Bytes Read/Written`: the total number of bytes read and written by the cgroup and its children, per each blockdevice +* `ios Read/Write`: the total number of I/O operations read and written by the cgroup and its children, per each blockdevice +* `PressAvg10`: the average IO pressure of the cgroup and its children over the last 10 seconds +* `PressAvg60`: the average IO pressure of the cgroup and its children over the last 60 seconds +* `PressTotal`: the total IO pressure of the cgroup and its children (see [PSI](https://docs.kernel.org/accounting/psi.html#psi) for more information) + +### `memory` + +```bash +$ talosctl cgroups --preset=memory +NAME MemCurrent MemPeak MemLow Peak/Low MemHigh MemMin Current/Min MemMax +. unset unset unset unset% unset unset unset% unset +├──init 133 MiB 133 MiB 192 MiB 69.18% max 96 MiB 138.35% max +├──kubepods 494 MiB 505 MiB 0 B max% max 0 B max% 1.4 GiB +│ ├──besteffort 70 MiB 74 MiB 0 B max% max 0 B max% max +│ │ └──kube-system/kube-proxy-6r5bz 70 MiB 74 MiB 0 B max% max 0 B max% max +│ │ ├──kube-proxy 69 MiB 73 MiB 0 B max% max 0 B max% max +│ │ └──sandbox 872 KiB 2.2 MiB 0 B max% max 0 B max% max +│ └──burstable 424 MiB 435 MiB 0 B max% max 0 B max% max +│ ├──kube-system/kube-apiserver-talos-default-controlplane-1 233 MiB 242 MiB 0 B max% max 0 B max% max +│ │ ├──kube-apiserver 232 MiB 242 MiB 0 B max% max 0 B max% max +│ │ └──sandbox 208 KiB 3.3 MiB 0 B max% max 0 B max% max +│ ├──kube-system/kube-controller-manager-talos-default-controlplane-1 78 MiB 80 MiB 0 B max% max 0 B max% max +│ │ ├──kube-controller-manager 78 MiB 80 MiB 0 B max% max 0 B max% max +│ │ └──sandbox 212 KiB 3.3 MiB 0 B max% max 0 B max% max +│ ├──kube-system/kube-flannel-jzx6m 48 MiB 50 MiB 0 B max% max 0 B max% max +│ │ ├──kube-flannel 46 MiB 48 MiB 0 B max% max 0 B max% max +│ │ └──sandbox 216 KiB 3.1 MiB 0 B max% max 0 B max% max +│ └──kube-system/kube-scheduler-talos-default-controlplane-1 66 MiB 67 MiB 0 B max% max 0 B max% max +│ ├──kube-scheduler 66 MiB 67 MiB 0 B max% max 0 B max% max +│ └──sandbox 208 KiB 3.4 MiB 0 B max% max 0 B max% max +├──podruntime 549 MiB 647 MiB 0 B max% max 0 B max% max +│ ├──etcd 382 MiB 482 MiB 256 MiB 188.33% max 0 B max% max +│ ├──kubelet 103 MiB 104 MiB 192 MiB 54.31% max 96 MiB 107.57% max +│ └──runtime 64 MiB 71 MiB 392 MiB 18.02% max 196 MiB 32.61% max +└──system 229 MiB 232 MiB 192 MiB 120.99% max 96 MiB 239.00% max + ├──apid 26 MiB 28 MiB 32 MiB 88.72% max 16 MiB 159.23% 40 MiB + ├──dashboard 113 MiB 113 MiB 0 B max% max 0 B max% 196 MiB + ├──runtime 74 MiB 77 MiB 96 MiB 79.89% max 48 MiB 154.57% max + ├──trustd 10 MiB 11 MiB 16 MiB 69.85% max 8.0 MiB 127.78% 24 MiB + └──udevd 6.8 MiB 14 MiB 16 MiB 86.87% max 8.0 MiB 84.67% max +``` + +In the memory view, the following columns are displayed: + +* `MemCurrent`: the current memory usage of the cgroup and its children +* `MemPeak`: the peak memory usage of the cgroup and its children +* `MemLow`: the low memory reservation of the cgroup +* `Peak/Low`: the ratio of the peak memory usage to the low memory reservation +* `MemHigh`: the high memory limit of the cgroup +* `MemMin`: the minimum memory reservation of the cgroup +* `Current/Min`: the ratio of the current memory usage to the minimum memory reservation +* `MemMax`: the maximum memory limit of the cgroup + +### `swap` + +```bash +$ talosctl cgroups --preset=swap +NAME SwapCurrent SwapPeak SwapHigh SwapMax +. unset unset unset unset +├──init 0 B 0 B max max +├──kubepods 0 B 0 B max max +│ ├──besteffort 0 B 0 B max max +│ │ └──kube-system/kube-proxy-6r5bz 0 B 0 B max max +│ │ ├──kube-proxy 0 B 0 B max 0 B +│ │ └──sandbox 0 B 0 B max max +│ └──burstable 0 B 0 B max max +│ ├──kube-system/kube-apiserver-talos-default-controlplane-1 0 B 0 B max max +│ │ ├──kube-apiserver 0 B 0 B max 0 B +│ │ └──sandbox 0 B 0 B max max +│ ├──kube-system/kube-controller-manager-talos-default-controlplane-1 0 B 0 B max max +│ │ ├──kube-controller-manager 0 B 0 B max 0 B +│ │ └──sandbox 0 B 0 B max max +│ ├──kube-system/kube-flannel-jzx6m 0 B 0 B max max +│ │ ├──kube-flannel 0 B 0 B max 0 B +│ │ └──sandbox 0 B 0 B max max +│ └──kube-system/kube-scheduler-talos-default-controlplane-1 0 B 0 B max max +│ ├──kube-scheduler 0 B 0 B max 0 B +│ └──sandbox 0 B 0 B max max +├──podruntime 0 B 0 B max max +│ ├──etcd 0 B 0 B max max +│ ├──kubelet 0 B 0 B max max +│ └──runtime 0 B 0 B max max +└──system 0 B 0 B max max + ├──apid 0 B 0 B max max + ├──dashboard 0 B 0 B max max + ├──runtime 0 B 0 B max max + ├──trustd 0 B 0 B max max + └──udevd 0 B 0 B max max +``` + +In the swap view, the following columns are displayed: + +* `SwapCurrent`: the current swap usage of the cgroup and its children +* `SwapPeak`: the peak swap usage of the cgroup and its children +* `SwapHigh`: the high swap limit of the cgroup +* `SwapMax`: the maximum swap limit of the cgroup + +## Custom Schemas + +The `talosctl cgroups` command allows you to define custom schemas to display the cgroups information in a specific way. +The schema is defined in a YAML file with the following structure: + +```yaml +columns: + - name: Bytes Read/Written + template: '{{ range $disk, $v := .IOStat }}{{ if $v }}{{ $disk }}: {{ $v.rbytes.HumanizeIBytes }}/{{ $v.wbytes.HumanizeIBytes }} {{ end }}{{ end }}' + - name: ios Read/Write + template: '{{ if .Parent }}{{ range $disk, $v := .IOStat }}{{ $disk }}: {{ $v.rios }}/{{ $v.wios }} {{ end }}{{ end }}' + - name: PressAvg10 + template: '{{ .IOPressure.some.avg10 | printf "%6s" }}' + - name: PressAvg60 + template: '{{ .IOPressure.some.avg60 | printf "%6s" }}' + - name: PressTotal + template: '{{ .IOPressure.some.total.UsecToDuration | printf "%12s" }}' +``` + +The schema file can be passed to the `talosctl cgroups` command with the `--schema-file` flag: + +```bash +talosctl cgroups --schema-file=schema.yaml +``` + +In the schema, for each column, you can define a `name` and a `template` which is a Go template that will be executed with the cgroups data. +In the template, there's a `.` variable that contains the cgroups data, and `.Parent` variable which is a parent cgroup (if available). +Each cgroup node contains information parsed from the cgroup filesystem, with field names matching the filenames adjusted for Go naming conventions, +e.g. `io.stat` becomes `.IOStat` in the template. + +The schemas for the presets above can be found in the [source code](https://github.com/siderolabs/talos/tree/main/cmd/talosctl/cmd/talos/cgroupsprinter/schemas). diff --git a/website/content/v1.9/reference/api.md b/website/content/v1.9/reference/api.md index 129d0ee236..e3df8a2a26 100644 --- a/website/content/v1.9/reference/api.md +++ b/website/content/v1.9/reference/api.md @@ -5582,6 +5582,8 @@ The messages message containing the requested containers. | ----- | ---- | ----- | ----------- | | namespace | [string](#string) | | | | id | [string](#string) | | | +| uid | [string](#string) | | | +| internal_id | [string](#string) | | | | image | [string](#string) | | | | pid | [uint32](#uint32) | | | | status | [string](#string) | | | diff --git a/website/content/v1.9/reference/cli.md b/website/content/v1.9/reference/cli.md index a6174c2fee..7cc0fe4ab0 100644 --- a/website/content/v1.9/reference/cli.md +++ b/website/content/v1.9/reference/cli.md @@ -81,6 +81,54 @@ talosctl bootstrap [flags] * [talosctl](#talosctl) - A CLI for out-of-band management of Kubernetes nodes created by Talos +## talosctl cgroups + +Retrieve cgroups usage information + +### Synopsis + +The cgroups command fetches control group v2 (cgroupv2) usage details from the machine. +Several presets are available to focus on specific cgroup subsystems: + +* cpu +* cpuset +* io +* memory +* process +* swap + +You can specify the preset using the --preset flag. + +Alternatively, a custom schema can be provided using the --schema-file flag. +To see schema examples, refer to https://github.com/siderolabs/talos/tree/main/cmd/talosctl/cmd/talos/cgroupsprinter/schemas. + + +``` +talosctl cgroups [flags] +``` + +### Options + +``` + -h, --help help for cgroups + --preset string preset name (one of: [cpu cpuset io memory process swap]) + --schema-file string path to the columns schema file +``` + +### Options inherited from parent commands + +``` + --cluster string Cluster to connect to if a proxy endpoint is used. + --context string Context to be used in command + -e, --endpoints strings override default endpoints in Talos configuration + -n, --nodes strings target the specified nodes + --talosconfig string The path to the Talos configuration file. Defaults to 'TALOSCONFIG' env variable if set, otherwise '$HOME/.talos/config' and '/var/run/secrets/talos.dev/config' in order. +``` + +### SEE ALSO + +* [talosctl](#talosctl) - A CLI for out-of-band management of Kubernetes nodes created by Talos + ## talosctl cluster create Creates a local docker-based or QEMU-based kubernetes cluster @@ -3081,6 +3129,7 @@ A CLI for out-of-band management of Kubernetes nodes created by Talos * [talosctl apply-config](#talosctl-apply-config) - Apply a new configuration to a node * [talosctl bootstrap](#talosctl-bootstrap) - Bootstrap the etcd cluster on the specified node. +* [talosctl cgroups](#talosctl-cgroups) - Retrieve cgroups usage information * [talosctl cluster](#talosctl-cluster) - A collection of commands for managing local docker-based or QEMU-based clusters * [talosctl completion](#talosctl-completion) - Output shell completion code for the specified shell (bash, fish or zsh) * [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig)